開源作業調度工具實現開源的Datax、Sqoop、Kettle等ETL工具的作業批量自動化調度

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、完成模塊代碼的編寫後,如下:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章