淘寶異構數據源數據交換工具 DataX
DataX是什么?
DataX是一個在異構的數據庫/文件系統之間高速交換數據的工具,實現了在任意的數據處理系統(RDBMS/Hdfs/Local filesystem)之間的數據交換,由淘寶數據平台部門完成。
DataX用來解決什么?
目前成熟的數據導入導出工具比較多,但是一般都只能用於數據導入或者導出,並且只能支持一個或者幾個特定類型的數據庫。這樣帶來的一個問題是,如果我們擁 有很多不同類型的數據庫/文件系統(Mysql/Oracle/Rac/Hive/Other…),並且經常需要在它們之間導入導出數據,那么我們可能需 要開發/維護/學習使用一批這樣的工具(jdbcdump/dbloader/multithread/getmerge+sqlloader /mysqldumper…)。而且以后每增加一種庫類型,我們需要的工具數目將線性增長。(當我們需要將mysql的數據導入oracle的時候,有沒 有過想從jdbcdump和dbloader上各掰下來一半拼在一起到沖動?) 這些工具有些使用文件中轉數據,有些使用管道,不同程度的為數據中轉帶來額外開銷,效率差別很非常大。很多工具也無法滿足ETL任務中常見的需求,比如日 期格式轉化,特性字符的轉化,編碼轉換。另外,有些時候,我們希望在一個很短的時間窗口內,將一份數據從一個數據庫同時導出到多個不同類型的數據庫。 DataX正是為了解決這些問題而生。
(問題: 新增第n+1個數據源,是不是要新開發n個數據同步工具 ?)
我們只需要針對新增的數據源開發的一套Reader/Writer插件,即可實現任意數據的互導
DataX特點?
- 在異構的數據庫/文件系統之間高速交換數據
- 采用Framework + plugin架構構建,Framework處理了緩沖,流控,並發,上下文加載等高速數據交換的大部分技術問題,提供了簡單的接口與插件交互,插件僅需實現對數據處理系統的訪問
- 運行模式:stand-alone
- 數據傳輸過程在單進程內完成,全內存操作,不讀寫磁盤,也沒有IPC
- 開放式的框架,開發者可以在極短的時間開發一個新插件以快速支持新的數據庫/文件系統。(具體參見《DataX插件開發指南》)
DataX結構模式(框架+插件)
- Job: 一道數據同步作業
- Splitter: 作業切分模塊,將一個大任務與分解成多個可以並發的小任務.
- Sub-job: 數據同步作業切分后的小任務
- Reader(Loader): 數據讀入模塊,負責運行切分后的小任務,將數據從源頭裝載入DataX
- Storage: Reader和Writer通過Storage交換數據
- Writer(Dumper): 數據寫出模塊,負責將數據從DataX導入至目的數據地
DataX框架內部通過雙緩沖隊列、線程池封裝等技術,集中處理了高速數據交換遇到的問題,提供簡單的接口與插件交互,插件分為Reader和 Writer兩類,基於框架提供的插件接口,可以十分便捷的開發出需要的插件。比如想要從oracle導出數據到mysql,那么需要做的就是開發出 OracleReader和MysqlWriter插件,裝配到框架上即可。並且這樣的插件一般情況下在其他數據交換場合是可以通用的。更大的驚喜是我們 已經開發了如下插件:
Reader插件
- hdfsreader : 支持從hdfs文件系統獲取數據。
- mysqlreader: 支持從mysql數據庫獲取數據。
- sqlserverreader: 支持從sqlserver數據庫獲取數據。
- oraclereader : 支持從oracle數據庫獲取數據。
- streamreader: 支持從stream流獲取數據(常用於測試)
- httpreader : 支持從http URL獲取數據。
Writer插件
- hdfswriter:支持向hdbf寫入數據。
- mysqlwriter:支持向mysql寫入數據。
- oraclewriter:支持向oracle寫入數據。
- streamwriter:支持向stream流寫入數據。(常用於測試)
您可以按需選擇使用或者獨立開發您自己的插件 (具體參見《DataX插件開發指南》)