datax 是阿裡巴巴集團内被廣泛使用的離線資料同步工具/平台,實作包括 mysql、oracle、hdfs、hive、oceanbase、hbase、ots、odps 等各種異構資料源之間高效的資料同步功能。datax采用了架構
+ 插件 的模式,目前已開源,代碼托管在github。
代碼托管位址:
https://github.com/alibaba/datax
插件的開發可以參考:
https://github.com/alibaba/datax/wiki/datax%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91%e5%ae%9d%e5%85%b8
下面是參考《datax插件開發寶典》,進行插件開發的一個完整的流程。
首先從 https://github.com/alibaba/datax 克隆代碼,然後執行如下指令:
這個指令會生成datax.tar.gz,我們可以将生成的檔案部署到相應的環境,進行資料的導入導出。
後續,開發測試之後,可以使用上面的指令,将我們自己開發的插件內建到datax中。
然後将代碼導入到eclispe(或者其它ide)中,然後在這個項目下建立一個maven子產品。
接着做一些配置,配置之後就可以進行開發了
datax使用maven工具來管理項目,插件和架構使用多子產品的方式組織在一起。使用maven-assembly-plugin将所有的子產品打包在一起。
在開發的過程中,需要進行兩方面的配置
插件子產品本身的配置:目錄和檔案要滿足約定
datax主子產品的配置:需要配置2個檔案:./pom.xml和./package.xml
建立一個插件子產品之後,源代碼的結果應該滿足如下結構:

pom的配置:
這裡要注意的是,
1 增加了對datax-common的依賴,這個依賴是datax的架構,
2 配置了maven-assembly-plugin,在這裡應用了src/main/assembly/package.xml。package.xml定義了打包之後的目錄結構,這個目錄結果是datax約定好的。具體如下:
除了上面的兩個xml檔案,還需要兩個json檔案
plugin.json是對插件本省的描述,在架構根據這個檔案來加載插件,例如:
plugin_job_template.json:插件的配置子產品,使用者在使用插件是,根據這個模版來進行配置。例如:
pom.xml 中添加本插件的子產品名稱
子產品名稱artifactid
package.xml 中添加本插件的打包内容,以讓 datax 能夠把該插件納入整個插件體系。
主要參考《datax插件開發寶典》,這裡面講的比較詳細。
下面是插件如何通過<code>recordsender</code>往<code>channel</code>寫入資料的僞代碼:
開發完成之後,可以通過執行指令:
來生成datax,然後進行測試。
因為每次執行這條指令,會把datax中所有的插件重新編譯和打包,速度會比較慢。是以,可以修改datax中的pom.xml和package.xml,子產品隻保留common和正在開發中的插件。