離線資料同步神器:DataX,支援幾乎所有異構資料來源的離線同步到MaxCompute
摘要: 概述 DataX 是阿里巴巴集團內被廣泛使用的離線資料同步工具/平臺,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構資料來源之間高效的資料同步功能。
概述
DataX 是阿里巴巴集團內被廣泛使用的離線資料同步工具/平臺,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構資料來源之間高效的資料同步功能。
DataX本身作為資料同步框架,將不同資料來源的同步抽象為從源頭資料來源讀取資料的Reader外掛,以及向目標端寫入資料的Writer外掛,理論上DataX框架可以支援任意資料來源型別的資料同步工作。同時DataX外掛體系作為一套生態系統, 每接入一套新資料來源該新加入的資料來源即可實現和現有的資料來源互通。
離線資料同步在大資料分析,資料備份,資料同步等應用場景中都會被用到,所以本文特別介紹阿里開源的這款神器:DataX!
準備工作
環境準備:Linux伺服器一臺,安裝有JDK8,maven和python 2.6+;
下載原始碼:https://github.com/alibaba/DataX.git
解壓後編譯原始碼:mvn -U clean package assembly:assembly -Dmaven.test.skip=true
出現以下資訊,表示編譯成功(編譯時間稍長,由於DataX支援的資料來源很多,對應的依賴包也比較多,所以可能需要20min左右編譯時間,具體視下載速度和機器效能而定):
常見錯誤:
在第3步可能會出現無法編譯tablestore-streamclient的錯誤,請到https://mvnrepository.com/artifact/com.aliyun.openservices/tablestore-streamclient/1.0.0 下載相應的包並放到maven相應路徑下;
工具使用
成功編譯DataX後,在cd target/datax/datax/目錄下就會生成可執行檔案,我們就可以來使用DataX同步各種格式的離線資料(具體看參考:https://github.com/alibaba/DataX/blob/master/userGuid.md),如下:
不在這個表格中的資料來源格式你可以通過自定義外掛編寫,具體編碼可參考:https://github.com/alibaba/DataX/blob/master/dataxPluginDev.md
比如我們實現一個最簡單的任務,將JSON格式化資料輸出到控制檯:
切換目錄:cd target/datax/datax/bin,比如在我們的192.168.1.63的伺服器,切換到目錄:/home/data-transfer/datax/target/datax/datax/bin
檢視配置格式命令:python datax.py -r streamreader -w streamwriter
編寫配置檔案,stream2stream.json檔案如下:
1{
2 "job": {
3 "content": [
4 {
5 "reader": {
6 "name": "streamreader",
7 "parameter": {
8 "sliceRecordCount": 10,
9 "column": [
10 {
11 "type": "long",
12 "value": "10"
13 },
14 {
15 "type": "string",
16 "value": "hello,你好,世界-DataX"
17 }
18 ]
19 }
20 },
21 "writer": {
22 "name": "streamwriter",
23 "parameter": {
24 "encoding": "UTF-8",
25 "print": true
26 }
27 }
28 }
29 ],
30 "setting": {
31 "speed": {
32 "channel": 5
33 }
34 }
35 }
36}
執行指令碼:python datax.py ./stream2stream.json,執行後控制檯輸出:
再比如mysql到mysql的離線資料同步,可使用:
python datax.py -r mysqlreader -w mysqlwriter 獲取配置檔案模板;
更多的writer可參看plugins目錄下的writer資料夾(官方預設包含的Writer,支援自定義可擴充套件):
更多的reader可參看plugins目錄下的reader資料夾(官方預設包含的Reader,支援自定義可擴充套件):
注:如果要使用離線增量同步資料,可指定配置檔案中的where過濾;