通過DataX導(dǎo)入RDS數(shù)據(jù)
本文主要介紹如何使用阿里巴巴的開源工具DataX實(shí)現(xiàn)從關(guān)系型數(shù)據(jù)庫到時(shí)序引擎的數(shù)據(jù)遷移。
背景信息
DataX是阿里巴巴集團(tuán)內(nèi)被廣泛使用的離線數(shù)據(jù)同步工具,實(shí)現(xiàn)包括MySQL、Oracle、SQL Server、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各種異構(gòu)數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能。DataX相關(guān)使用介紹請參閱DataX的README文檔。
下面將首先介紹DataX工具本身,以及以MySQL為例,實(shí)現(xiàn)從MySQL遷移到Lindorm時(shí)序引擎。本次遷移工作涉及到的兩個(gè)插件(MySQL Reader和TSDB Writer)。
MySQL Reader
MySQL Reader是DataX的一個(gè)插件,實(shí)現(xiàn)了從MySQL讀取數(shù)據(jù)。
TSDB Writer
TSDB Writer是DataX的一個(gè)插件,實(shí)現(xiàn)了將數(shù)據(jù)點(diǎn)寫入到Lindorm數(shù)據(jù)庫時(shí)序引擎中。
注意事項(xiàng)
確保與時(shí)序引擎的網(wǎng)絡(luò)是連通的
因?yàn)門SDB Writer寫入數(shù)據(jù)的方式是調(diào)用HTTP接口(/api/mput
以及/api/put
)來完成的,所以需要確保遷移任務(wù)的進(jìn)程能正常訪問到時(shí)序引擎暴露出來的HTTP接口的。否則,會報(bào)錯(cuò)Connect Exception異常。
確保與MySQL的網(wǎng)絡(luò)是連通的
因?yàn)镸ySQL Reader讀取數(shù)據(jù)是通過JDBC來完成的,所以需要確保遷移任務(wù)的進(jìn)程能正常訪問到MySQL暴露出來的JDBC接口的。否則,會報(bào)錯(cuò)Connect Exception異常。
準(zhǔn)備工作
環(huán)境準(zhǔn)備。
下載DataX及其插件。
單擊鏈接進(jìn)行下載。
利用DataX自帶的測試遷移任務(wù),檢查遷移流程能否走通。
這里,我們先以最簡單的Stream Reader到Stream Writer為例。因?yàn)檫@兩個(gè)插件不依賴任何的外部環(huán)境,特別適合用來測試流程是否能走通。簡單介紹下這兩個(gè)插件,其中Stream Reader會隨機(jī)地產(chǎn)生字符串,而Stream Writer則會將接受到的字符串輸出到控制臺,以此模擬一個(gè)最簡單的數(shù)據(jù)遷移過程。
工具部署
將下載后的安裝包,解壓至某個(gè)目錄(作為DATAX_HOME),即可運(yùn)行測試遷移任務(wù):
$ cd ${DATAX_HOME}
$ python bin/datax.py job/job.json
檢查任務(wù)是否成功
下面是任務(wù)結(jié)束后的匯總信息,看到如下內(nèi)容,即可表示遷移任務(wù)已成功完成:
任務(wù)啟動時(shí)刻 : 2019-04-26 11:18:07
任務(wù)結(jié)束時(shí)刻 : 2019-04-26 11:18:17
任務(wù)總計(jì)耗時(shí) : 10s
任務(wù)平均流量 : 253.91KB/s
記錄寫入速度 : 10000rec/s
讀出記錄總數(shù) : 100000
讀寫失敗總數(shù) : 0
配置和啟動MySQL到時(shí)序引擎的遷移任務(wù)
通過上述Stream Reader到Stream Writer的遷移任務(wù),我們就可以確保整個(gè)DataX流程是沒有問題的。下面就可以真正開始MySQL Reader到TSDB Writer遷移任務(wù)了。
參數(shù)說明
接下來,我們先看下各個(gè)配置項(xiàng)的含義:
MySQL Reader相關(guān)
名稱 | 類型 | 是否必選 | 描述 | 默認(rèn)值 | 舉例 |
jdbcUrl | String | 是 | 數(shù)據(jù)庫的JDBC連接信息 | 無 |
|
username | String | 是 | 數(shù)據(jù)源的用戶名 | 無 |
|
password | String | 是 | 數(shù)據(jù)源指定用戶名的密碼 | 無 |
|
table | String | 是 | 需要同步的表 | 無 |
|
column | Array | 是 | 表中需要同步的列名集合 |
|
|
splitPk | String | 否 | 如果指定splitPk,表示用戶希望使用splitPk代表的字段進(jìn)行數(shù)據(jù)分片 | 空 |
|
TSDB Writer相關(guān)
名稱 | 類型 | 是否必選 | 描述 | 默認(rèn)值 | 舉例 |
sourceDbType | String | 否 | 目前支持TSDB和RDB兩個(gè)取值。其中,時(shí)序引擎指OpenTSDB、InfluxDB、Prometheus、TimeScale等;而RDB指MySQL、Oracle、PostgreSQL、DRDS 等 |
|
|
column | Array | 是 | 表中需要同步的列名集合 |
|
|
columnType | Array | 是 | 關(guān)系型數(shù)據(jù)庫中表字段,映射到時(shí)序引擎中的類型。支持的類型:timestamp:該字段是個(gè)時(shí)間戳;tag:該字段是個(gè) tag;metric_num:該metric的value 數(shù)值類型;metric_string:該metric的value是字符串類型 |
|
|
endpoint | String | 是 | 時(shí)序引擎的IP:PORT地址 | 無 |
|
multiField | Bool | 是 | 使用多值方式寫入,推薦true | false | true |
table | String | 是 | 導(dǎo)入TSDB的表名 | 無 | table |
username | String | 否 | 數(shù)據(jù)庫用戶名 | 無 | tsdbuser |
password | String | 否 | 數(shù)據(jù)庫密碼 | 無 | tsdbpsw |
ignoreWriteError | Bool | 是 | 忽略寫入錯(cuò)誤 | false | true |
database | String | 否 | 導(dǎo)入TSDB的數(shù)據(jù)庫名 | default | default |
配置遷移任務(wù)
配置一個(gè)從MySQL數(shù)據(jù)庫同步抽取數(shù)據(jù)到時(shí)序引擎的任務(wù),命名為mysql2tsdb.json
,完整的配置信息如下(針對各個(gè)配置參數(shù)的詳細(xì)說明,請看"參數(shù)說明"):
{
"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字段順序保持一致。否則,數(shù)據(jù)會錯(cuò)亂。
啟動MySQL到時(shí)序引擎遷移任務(wù)
$ cd ${DATAX_HOME}/..
$ ls
datax/ datax.tar.gz mysql2tsdb.json
$ python datax/bin/datax.py mysql2tsdb.json
檢查任務(wù)是否成功
下面是任務(wù)結(jié)束后的匯總信息,看到如下內(nèi)容,即可表示遷移任務(wù)已成功完成:
任務(wù)啟動時(shí)刻 : 2019-05-21 18:25:16
任務(wù)結(jié)束時(shí)刻 : 2019-05-21 18:25:27
任務(wù)總計(jì)耗時(shí) : 11s
任務(wù)平均流量 : 3B/s
記錄寫入速度 : 0rec/s
讀出記錄總數(shù) : 3
讀寫失敗總數(shù) : 0
FAQ
Q:是否支持調(diào)整遷移進(jìn)程的 JVM 內(nèi)存大小?
A:支持的。以從MySQL到時(shí)序引擎的數(shù)據(jù)遷移任務(wù)為例,啟動命令如下:
python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m"
Q:如何給時(shí)序引擎設(shè)置網(wǎng)絡(luò)白名單?
A:參考設(shè)置白名單。
Q:將遷移任務(wù)運(yùn)行在ECS上的用戶,如何配置 VPC,以及常見問題有哪些?
A:參考ECS安全組配置案例和VPC 常見問題。