開源神器:阿里開源ETL工具dataX上手指南

DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具/平臺

,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構數據源之間高效的數據同步功能。

開源地址:https://github.com/alibaba/DataX

設計思想

為了解決異構數據源同步問題,DataX將複雜的網狀的同步鏈路變成了星型數據鏈路,DataX作為中間傳輸載體負責連接各種數據源。當需要接入一個新的數據源的時候,只需要將此數據源對接到DataX,便能跟已有的數據源做到無縫數據同步。

開源神器:阿里開源ETL工具dataX上手指南


數據交換通過DataX進行中轉,任何數據源只要和DataX連接上即可以和已實現的任意數據源同步

開源神器:阿里開源ETL工具dataX上手指南


核心組件:

  • Reader:數據採集模塊,負責從源採集數據
  • Writer:數據寫入模塊,負責寫入目標庫
  • Framework:數據傳輸通道,負責處理數據緩衝等

以上只需要重寫Reader與Writer插件,即可實現新數據源支持d支持主流數據源,詳見:https://github.com/alibaba/DataX/blob/master/introduction.md

核心架構

DataX 3.0 開源版本支持單機多線程模式完成同步作業運行,本小節按一個DataX作業生命週期的時序圖,從整體架構設計非常簡要說明DataX各個模塊相互關係。

開源神器:阿里開源ETL工具dataX上手指南


從一個JOB來理解datax的核心模塊組件:

  • datax完成單個數據同步的作業,稱為Job,job會負責數據清理、任務切分等工作;
  • 任務啟動後,Job會根據不同源的切分策略,切分成多個Task併發執行,Task就是執行作業的最小單元;
  • 切分完成後,根據Scheduler模塊,將Task組合成TaskGroup,每個group負責一定的併發和分配Task;

入門

環境要求

  • Linux
  • JDK(1.6以上,推薦1.6.x)
  • Python(推薦Python2.6.X)
  • Apache Maven 3.x (若不編譯DataX源碼,則不需要)

工具部署

方法一:安裝包安裝

直接下載DataX工具包:DataX,下載後解壓至本地某個目錄,進入bin目錄,即可運行同步作業

$ cd {YOUR_DATAX_HOME}/bin
$ python datax.py {YOUR_JOB.json}

同步作業配置模板,請參考DataX各個插件配置模板和參數說明

方法二:編譯安裝

下載DataX源碼,自己編譯:DataX源碼

  • 下載DataX源碼:
$ git clone [email protected]:alibaba/DataX.git
  • 通過maven打包:
$ cd {DataX_source_code_home}
$ mvn -U clean package assembly:assembly -Dmaven.test.skip=true

打包成功,日誌顯示如下:

[INFO] BUILD SUCCESS
[INFO] ————————————————————————————————-

[INFO] Total time: 08:12 min
[INFO] Finished at: 2015-12-13T16:26:48+08:00
[INFO] Final Memory: 133M/960M
[INFO] ————————————————————————————————-

打包成功後的DataX包位於 {DataX_source_code_home}/target/datax/datax/ ,結構如下:

$ cd {DataX_source_code_home}
$ ls ./target/datax/datax/
bin conf job lib log log_perf plugin/>

配置示例

示例:從stream讀取數據並打印到控制檯

第一步、創建創業的配置文件(json格式)

#stream2stream.json
{
"job": {
"setting": {
"speed": {
"channel": 5
}
},
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"sliceRecordCount": 10,
"column": [
{
"type": "long",
"value": "10"
},
{
"type": "string",
"value": "hello,你好,世界-DataX"
},
{
"type": "double",

"value": "3.141592653"
},
{
"type": "bytes",
"value": "image"
},
{
"type": "bool",
"value": "true"
},
{
"type": "bool",
"value": "5678true"
},
{
"type": "date",
"value": "2014-10-10",
"dateFormat": "yyyy-MM-dd"
}
]
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"encoding": "UTF-8",
"print": true
}
}
}
]
}
}

第二步:啟動DataX

$ cd {YOUR_DATAX_DIR_BIN}
$ python datax.py ./stream2stream.json

同步結束,顯示日誌如下:

2015-12-17 11:20:25.263 [job-0] INFO JobContainer -
任務啟動時刻 : 2015-12-17 11:20:15
任務結束時刻 : 2015-12-17 11:20:25
任務總計耗時 : 10s

任務平均流量 : 205B/s
記錄寫入速度 : 5rec/s
讀出記錄總數 : 50
讀寫失敗總數 : 0

其他reader與writer插件的配置文檔直接點擊對應的文件夾進入doc即可。

開源神器:阿里開源ETL工具dataX上手指南



分享到:


相關文章: