天天看點

Datax的配置及使用                                          Datax的配置及使用

                                          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所示。

表2-3 讀屬性

參數名 解釋 備注
name 與要讀取的資料庫一緻 字元串
jdbcUrl 資料庫連結

數組

會自動選擇一個合法的連結

可以填寫連接配接附件控制資訊

username 資料庫使用者名 字元串,資料庫的使用者名
password 資料庫密碼 字元串,資料庫的密碼
table 要同步的表名 數組,需保證表結構一緻
column 要同步的列名 數組
where 選取的條件 字元串
querySql 自定義查詢語句 會自動忽略上述的同步條件

Writer部分,也就是寫,常用以下幾種參數,如表2-4所示

2-3 寫屬性

參數名 解釋 備注
name 與要讀取的資料庫一緻 字元串
jdbcUrl 資料庫連結

字元串

不和writer一樣

可以填寫連接配接附件控制資訊

username 資料庫使用者名 字元串,資料庫的使用者名
password 資料庫密碼 字元串,資料庫的密碼
table 要同步的表名 數組,需保證表結構一緻
column 列名可以不對應,但是類型和總的個數要一緻 數組,需保證表結構一緻
preSql 寫入前執行的語句 數組,比如清空表等
postSql 寫入後執行的語句 數組
writeMode 寫入方式,預設為insert
insert/replace/update

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