1、DataX 基本介紹
-
DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具,致力於實現包括:關系型數據庫(MySQL、Oracle等)、HDFS、Hive、HBase、ODPS、FTP等各種異構數據源之間穩定高效的數據同步功能。
-
設計理念
- 為了解決異構數據源同步問題,DataX將復雜的網狀的同步鏈路變成了星型數據鏈路,DataX作為中間傳輸載體負責連接各種數據源。當需要接入一個新的數據源的時候,只需要將此數據源對接到DataX,便能跟已有的數據源做到無縫數據同步。
-
當前使用現狀
-
DataX在阿里巴巴集團內被廣泛使用,承擔了所有大數據的離線同步業務,並已持續穩定運行了6年之久。目前每天完成同步8w多道作業,每日傳輸數據量超過300TB。
-
此前已經開源DataX1.0版本,此次介紹為阿里雲開源全新版本DataX 3.0,有了更多更強大的功能和更好的使用體驗。
-
Github主頁地址:https://github.com/alibaba/DataX
-
2、DataX 3.0 框架設計
DataX
本身作為離線數據同步框架,采用Framework + plugin
架構構建。將數據源讀取和寫入抽象成為Reader/Writer
插件,納入到整個同步框架中。- Reader
- Reader 為數據采集模塊,負責采集數據源的數據,將數據發送給 Framework。
- Writer
- Writer 為數據寫入模塊,負責不斷向 Framework 取數據,並將數據寫入到目的端。
- Framework
- Framework 用於連接 Reader 和 Writer,作為兩者的數據傳輸通道,並處理緩沖,流控,並發,數據轉換等核心技術問題。
- Framework 用於連接 Reader 和 Writer,作為兩者的數據傳輸通道,並處理緩沖,流控,並發,數據轉換等核心技術問題。
- Reader
3、DataX 3.0 插件體系
-
經過幾年積累,DataX目前已經有了比較全面的插件體系,主流的RDBMS數據庫、NOSQL、大數據計算系統都已經接入。DataX目前支持數據如下:
類型 數據源 Reader(讀) Writer(寫) 文檔 RDBMS 關系型數據庫 MySQL √ √ 讀 、寫 Oracle √ √ 讀 、寫 SQLServer √ √ 讀 、寫 PostgreSQL √ √ 讀 、寫 DRDS √ √ 讀 、寫 達夢 √ √ 讀 、寫 通用RDBMS(支持所有關系型數據庫) √ √ 讀 、寫 阿里雲數倉數據存儲 ODPS √ √ 讀 、寫 ADS √ 寫 OSS √ √ 讀 、寫 OCS √ √ 讀 、寫 NoSQL數據存儲 OTS √ √ 讀 、寫 Hbase0.94 √ √ 讀 、寫 Hbase1.1 √ √ 讀 、寫 MongoDB √ √ 讀 、寫 Hive √ √ 讀 、寫 無結構化數據存儲 TxtFile √ √ 讀 、寫 FTP √ √ 讀 、寫 HDFS √ √ 讀 、寫 Elasticsearch √ 寫
4、DataX 3.0 核心架構
-
DataX 3.0 支持單機多線程模式完成 數據同步作業,本小節按一個DataX作業生命周期的時序圖,從整體架構設計簡要說明DataX各個模塊之間的相互關系。
-
核心模塊介紹
-
- DataX完成單個數據同步的作業,我們稱之為Job,DataX接受到一個Job之后,將啟動一個進程來完成整個作業同步過程。DataX Job模塊是單個作業的中樞管理節點,承擔了數據清理、子任務切分(將單一作業計算轉化為多個子Task)、TaskGroup管理等功能。
-
- DataX Job啟動后,會根據不同的源端切分策略,將Job切分成多個小的Task(子任務),以便於並發執行。Task便是DataX作業的最小單元,每一個Task都會負責一部分數據的同步工作。
-
- 切分多個Task之后,DataX Job會調用 Scheduler 模塊,根據配置的並發數據量,將拆分成的Task重新組合,組裝成TaskGroup(任務組)。每一個TaskGroup負責以一定的並發運行完畢分配好的所有Task,默認單個任務組的並發數量為5。
-
- 每一個Task都由TaskGroup負責啟動,Task啟動后,會固定啟動Reader—>Channel—>Writer的線程來完成任務同步工作。
-
- DataX作業運行起來之后, Job監控並等待多個TaskGroup模塊任務完成,等待所有TaskGroup任務完成后Job成功退出。否則,異常退出,進程退出值非0。
-
-
DataX調度流程
- 舉例來說,用戶提交了一個DataX作業,並且配置了20個並發,目的是將一個100張分表的mysql數據同步到odps里面。 DataX的調度決策思路是:
-
- DataXJob根據分庫分表切分成了100個Task。
-
- 根據20個並發,默認單個任務組的並發數量為5,DataX計算共需要分配4個TaskGroup。
-
- 這里4個TaskGroup平分切分好的100個Task,每一個TaskGroup負責以5個並發共計運行25個Task。
-
- 舉例來說,用戶提交了一個DataX作業,並且配置了20個並發,目的是將一個100張分表的mysql數據同步到odps里面。 DataX的調度決策思路是: