Datax的配置及使用
1、 DataX3.0概覽
DataX 是一個異構資料源離線同步工具,緻力于實作包括關系型資料庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構資料源之間穩定高效的資料同步功能
DataX目前已經有了比較全面的插件體系,主流的RDBMS資料庫、NOSQL、大資料計算系統都已經接入,具體詳情DataX的GitHub位址
2、 DataX3.0的使用
2.1 準備工作
Java版本要求:jdk1.8及以上
參考連結:Linux下jdk環境配置及JDK版本更新
Python版本要求:2.7.X,DataX未更新至Python3
DataX下載下傳:datax下載下傳
當然你還可以去Github去下載下傳源碼進行編譯,通過此種方式你可以自行選擇你需要的配置進行打包,如隻需要Mysql的,那麼其他的相關支援你都不需要用到,也就不需要都打包,更輕量使用。與此同時,你還需要maven工具進行打包,在pom.Xml中删除你不需要的子產品,再執行maven指令:mvn -U clean package assembly:assembly -Dmaven.test.skip=true,生成的檔案在/target/datax/datax/下
確定上述步驟都通過後則繼續往下看。
2.2 快速上手
2.2.1 建構一個測試資料表
表結構如表2-1所示。
表2-1 測試表結構
字段名 | 類型 | 備注 |
name | varchar | |
age | int | |
age_true | int |
并向其中插入幾條資料,如表2-2所示。
表2-2 測試表資料
name | age | age_true |
---|---|---|
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
... | ... |
2.2.2 建構任務Json
DataX工具是用json檔案作為配置檔案的,根據官方提供文檔我們建構Json檔案如下所示。
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": ["name","age"],
"where": "age<100",
"connection": [
{
"table": [
"person"
],
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "root",
"password": "123456",
"column": ["name","age_true"],
"connection": [
{
"table": [
"person"
],
"jdbcUrl":"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
}
]
}
}
}
],
"setting": {
"speed": {
"channel": 1,
"byte": 104857600
},
"errorLimit": {
"record": 10,
"percentage": 0.05
}
}
}
它由三部分組成,分别是讀,寫和通用配置。
Reader部分,也就是讀,常用以下幾種參數,如表2-3所示。
參數名 | 解釋 | 備注 |
name | 與要讀取的資料庫一緻 | 字元串 |
jdbcUrl | 資料庫連結 | 數組 會自動選擇一個合法的連結 可以填寫連接配接附件控制資訊 |
username | 資料庫使用者名 | 字元串,資料庫的使用者名 |
password | 資料庫密碼 | 字元串,資料庫的密碼 |
table | 要同步的表名 | 數組,需保證表結構一緻 |
column | 要同步的列名 | 數組 |
where | 選取的條件 | 字元串 |
querySql | 自定義查詢語句 | 會自動忽略上述的同步條件 |
Writer部分,也就是寫,常用以下幾種參數,如表2-4所示
參數名 | 解釋 | 備注 | |
name | 與要讀取的資料庫一緻 | 字元串 | |
jdbcUrl | 資料庫連結 | 字元串 不和writer一樣 可以填寫連接配接附件控制資訊 | |
username | 資料庫使用者名 | 字元串,資料庫的使用者名 | |
password | 資料庫密碼 | 字元串,資料庫的密碼 | |
table | 要同步的表名 | 數組,需保證表結構一緻 | |
column | 列名可以不對應,但是類型和總的個數要一緻 | 數組,需保證表結構一緻 | |
preSql | 寫入前執行的語句 | 數組,比如清空表等 | |
postSql | 寫入後執行的語句 | 數組 | |
writeMode | 寫入方式,預設為insert |
|
job.setting.speed(流量控制)
Job支援使用者對速度的自定義控制,channel的值可以控制同步時的并發數,byte的值可以控制同步時的速度
job.setting.errorLimit(髒資料控制)
Job支援使用者對于髒資料的自定義監控和告警,包括對髒資料最大記錄數門檻值(record值)或者髒資料占比門檻值(percentage值),當Job傳輸過程出現的髒資料大于使用者指定的數量/百分比,DataX Job報錯退出。
2.2.3 執行
Win+R+cmd進入指令行控制台,首先通過java –version和python檢視是否滿足要求,然後執行:python 空格{datax檔案夾路徑}\bin\datax.py 空格{json配置檔案的路徑},如,python D:\download\datax\bin\datax.py D:\download\datax\job\job2.json
接着控制台會列印出相應的資訊,控制台亂碼輸入 chcp空格 65001。
我們可以看到寫入資料表中的資料已經發生了變化,此處是将age位置的資訊寫入到age_true位置上,結果如表2-5所示。
表2-5 DataX寫入結果
name | age | age_true |
---|---|---|
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
tom | 23 | |
... | ... |
至此我們就利用datax進行了一次資料同步
在生産環境中我們往往同步的表很多,每個表用datax進行同步都要有對應的json檔案,我們可以利用腳本批量生成json檔案,具體可以參考另一篇部落格:
本篇部落格參考資源:https://blog.csdn.net/qq_28131641/article/details/80540079