本文主要介紹如何使用阿里巴巴的開源工具DataX實現從關係型資料庫到時序引擎的資料移轉。
背景資訊
DataX是阿里巴巴集團內被廣泛使用的離線資料同步工具,實現包括MySQL、Oracle、SQL Server、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各種異構資料來源之間高效的資料同步功能。DataX相關使用介紹請參閱DataX的README文檔。
下面將首先介紹DataX工具本身,以及以MySQL為例,實現從MySQL遷移到Lindorm時序引擎。本次遷移工作涉及到的兩個外掛程式(MySQL Reader和TSDB Writer)。
MySQL Reader
MySQL Reader是DataX的一個外掛程式,實現了從MySQL讀取資料。
TSDB Writer
TSDB Writer是DataX的一個外掛程式,實現了將資料點寫入到Lindorm資料庫時序引擎中。
注意事項
確保與時序引擎的網路是連通的
因為TSDB Writer寫入資料的方式是調用HTTP介面(/api/mput以及/api/put)來完成的,所以需要確保遷移任務的進程能正常訪問到時序引擎暴露出來的HTTP介面的。否則,會報錯Connect Exception異常。
確保與MySQL的網路是連通的
因為MySQL Reader讀取資料是通過JDBC來完成的,所以需要確保遷移任務的進程能正常訪問到MySQL暴露出來的JDBC介面的。否則,會報錯Connect Exception異常。
準備工作
工具部署
將下載後的安裝包,解壓至某個目錄(作為DATAX_HOME),即可運行測試遷移任務:
$ cd ${DATAX_HOME}
$ python bin/datax.py job/job.json檢查任務是否成功
下面是任務結束後的匯總資訊,看到如下內容,即可表示遷移任務已成功完成:
任務啟動時刻 : 2019-04-26 11:18:07
任務結束時刻 : 2019-04-26 11:18:17
任務總計耗時 : 10s
任務平均流量 : 253.91KB/s
記錄寫入速度 : 10000rec/s
讀出記錄總數 : 100000
讀寫失敗總數 : 0
配置和啟動MySQL到時序引擎的遷移任務
通過上述Stream Reader到Stream Writer的遷移任務,我們就可以確保整個DataX流程是沒有問題的。下面就可以真正開始MySQL Reader到TSDB Writer遷移任務了。
參數說明
接下來,我們先看下各個配置項的含義:
MySQL Reader相關
名稱 | 類型 | 是否必選 | 描述 | 預設值 | 舉例 |
jdbcUrl | String | 是 | 資料庫的JDBC串連資訊 | 無 |
|
username | String | 是 | 資料來源的使用者名稱 | 無 |
|
password | String | 是 | 資料來源指定使用者名稱的密碼 | 無 |
|
table | String | 是 | 需要同步的表 | 無 |
|
column | Array | 是 | 表中需要同步的列名集合 |
|
|
splitPk | String | 否 | 如果指定splitPk,表示使用者希望使用splitPk代表的欄位進行資料分區 | 空 |
|
TSDB Writer相關
名稱 | 類型 | 是否必選 | 描述 | 預設值 | 舉例 |
sourceDbType | String | 否 | 目前支援TSDB和RDB兩個取值。其中,時序引擎指OpenTSDB、InfluxDB、Prometheus、TimeScale等;而RDB指MySQL、Oracle、PostgreSQL、DRDS 等 |
|
|
column | Array | 是 | 表中需要同步的列名集合 |
|
|
columnType | Array | 是 | 關係型資料庫中表欄位,映射到時序引擎中的類型。支援的類型:timestamp:該欄位是個時間戳記;tag:該欄位是個 tag;metric_num:該metric的value 數實值型別;metric_string:該metric的value是字串類型 |
|
|
endpoint | String | 是 | 時序引擎的IP:PORT地址 | 無 |
|
multiField | Bool | 是 | 使用多值方式寫入,推薦true | false | true |
table | String | 是 | 匯入TSDB的表名 | 無 | table |
username | String | 否 | 資料庫使用者名稱 | 無 | tsdbuser |
password | String | 否 | 資料庫密碼 | 無 | tsdbpsw |
ignoreWriteError | Bool | 是 | 忽略寫入錯誤 | false | true |
database | String | 否 | 匯入TSDB的資料庫名 | default | default |
配置遷移任務
配置一個從MySQL資料庫同步抽取資料到時序引擎的任務,命名為mysql2tsdb.json,完整的配置資訊如下(針對各個配置參數的詳細說明,請看"參數說明"):
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price",
"description",
"available"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/datax"
],
"table": [
"book"
]
}
],
"password": "xxx",
"splitPk": "id",
"username": "root"
}
},
"writer": {
"name": "tsdbwriter",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price",
"description",
"available"
],
"columnType": [
"tag",
"tag",
"timestamp",
"field_double",
"field_string",
"field_bool"
],
"sourceDbType": "RDB",
"endpoint": "http://localhost:8242",
"table": "my_book",
"multiField": "true",
"username":"xxx",
"password":"xxx",
"ignoreWriteError":"false",
"database":"default"
}
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
} 需要column欄位順序保持一致
需要保證SDB Writer外掛程式中的column欄位順序和MySQL Reader外掛程式中配置的column欄位順序保持一致。否則,資料會錯亂。
啟動MySQL到時序引擎遷移任務
$ cd ${DATAX_HOME}/..
$ ls
datax/ datax.tar.gz mysql2tsdb.json
$ python datax/bin/datax.py mysql2tsdb.json
檢查任務是否成功
下面是任務結束後的匯總資訊,看到如下內容,即可表示遷移任務已成功完成:
任務啟動時刻 : 2019-05-21 18:25:16
任務結束時刻 : 2019-05-21 18:25:27
任務總計耗時 : 11s
任務平均流量 : 3B/s
記錄寫入速度 : 0rec/s
讀出記錄總數 : 3
讀寫失敗總數 : 0
FAQ
Q:是否支援調整遷移進程的 JVM 記憶體大小?
A:支援的。以從MySQL到時序引擎的資料移轉任務為例,啟動命令如下:
python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m" Q:如何給時序引擎設定網路白名單?
A:參考設定白名單。
Q:將遷移任務運行在ECS上的使用者,如何配置 VPC,以及常見問題有哪些?
A:參考ECS安全性群組配置案例和VPC 常見問題。