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