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