1、阿里開源軟件:DataX
DataX 是一個異構數據源離線同步工具,致力於實現包括關係型數據庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構數據源之間穩定高效的數據同步功能。(摘自百科)
2、Apache開源軟件:Sqoop
Sqoop(發音:skup)是一款開源的工具,主要用於在HADOOP(Hive)與傳統的數據庫(mysql、postgresql...)間進行數據的傳遞,可以將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中。(摘自百科)
3、Kettle開源軟件:水壺(中文名)
Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,數據抽取高效穩定。(摘自百科)
上面三個開源ETL工具的簡介都摘自百科內容,個人kettle用的比較多,其他兩個用的比較少。其實不管是開源還是商用ETL工具都自帶了作業調度,但其從使用的靈活性和簡易性來說,那就不如第三方專業做批量作業調度的工具了。既然都是工具,是爲了方便我們使用人員,那幹嘛不使用更好的工具來減輕我們的工作量,從而讓我們將精力更多的投入到業務本身去呢?這裏就給大家分享一個第三方開源批量作業自動化工具TASKCTL(開源社區地址:https://www.oschina.net/p/taskctl),看TASKCTL如何輕鬆實現開源ETL工具Datax、Sqoop、Kettle等的作業批量調度。廢話不多說,直接上乾貨。
TASKCTL採用任務插件驅動機制,因此,可支持各種存儲過程、各種腳本、以及諸如Datastage\Informatica\kettle等各種ETL工具任務,可以完成串行、並行、依賴、互斥、執行計劃、定時、容錯、循環、條件分支、遠程、負載均衡、自定義條件等各種不同的核心調度功能。
下面以調度DataX作業類型爲例:
$ cd {YOUR_DATAX_DIR_BIN}
$ python datax.py ./mysql2odps.json
我們可以看到調用datax,實際上是調用python腳本。
因此我們可以直接在taskctl中配置作業的xml片段如下:
<python>
<name>datax_job</name>
<progname>datax.py</progname> -- 此處有可能需要定位到cd {YOUR_DATAX_DIR_BIN}
<para>./mysql2odps.json</para>
</python>
當然,如果要使datax作業類型看起來更加個性化點(或者在插件中適配點什麼)。我們還可以datax配置單獨的任務插件,步驟如下:
1、編寫調用datax的腳本文件cprundataxjob.sh:
#!bin/bash if [ $# -ne 3 ] then echo "Param error !" echo "Usage: $0 progname para expara" exit 126 fi #------------------------------------------------------------------------------ # 第一步: 接收參數 #------------------------------------------------------------------------------ ProgName=$1 Para=$2 ExpPara=$3 #------------------------------------------------------------------------------ # 第二步: 運行JOB,並等待結果 #------------------------------------------------------------------------------ #cd {YOUR_DATAX_DIR_BIN} --相當於TASKCTL中的exppara環境參數 cd ${ExpPara} #python datax.py ./mysql2odps.json python datax.py ${ProgName} #收集datax.py執行結果 retinfo=$? #------------------------------------------------------------------------------ # 第四步: 插件返回 #------------------------------------------------------------------------------ #根據retinfo的信息,返回給TASKCTL if [ ${retinfo} -eq 0 ] then echo "" echo "Run job success !" else echo "" echo "Run job failed !" fi exit ${retinfo}
配置後,把cprundataxjob.sh放到TASKCTL服務端的$TASKCTLDIR/src/plugin/dataxjob/shell/目錄下
2、在TASKCTL桌面軟件admin中配置插件如下圖:
3、在designer中編寫模塊代碼如下:
<dataxjob> <name>MainModul_JobNode0</name> <progname>./mysql2odps.json</progname> <exppara>[你的datax安裝路徑]</exppara> </dataxjob>
4、完成模塊代碼的編寫後,如下: