kettle 作業調度

本週項目上用到了kettle並且需要做任務調度,聽老師說用kettle自帶的調度不大穩定於是便baidu了下,參照這篇文章完成了通過kitchen的調度,簡單說就是通過windows的計劃任務來調用.bat的批處理文件來開始kettle作業。


先普及一點知識
Kettle是一個開源的ETL(Extract-Transform-Load的縮寫,即數據抽取、轉換、裝載的過程)項目,項目名很有意思,水壺。按項目負責人Matt的說法:把各種數據放到一個壺裏,然後呢,以一種你希望的格式流出。Kettle包括三大塊:
   Spoon——轉換/工作(transform/job)設計工具 (GUI方式)
   Kitchen——工作(job)執行器 (命令行方式)
   Span——轉換(trasform)執行器 (命令行方式)
Kettle是一款國外開源的etl工具,純java編寫,綠色無需安裝,數據抽取高
效穩定。Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。

因爲最近工作需要所以不得不研究下調用kitchen.bat後面接參數的問題。
經過一段時間的研究終於知道傳參的方法了。
如下:
kitchen.bat   後面可以是-也可以是/然後再加options
Options:
/rep        : Repository name
/user       : Repository username
/pass       : Repository password
/job        : The name of the job to launch
/dir        : The directory (dont forget the leading /)
/file       : The filename (Job XML) to launch
/level      : The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing)
/logfile    : The logging file to write to
/listdir    : List the directories in the repository
/listjobs   : List the jobs in the specified directory
/listrep    : List the available repositories
/norep      : Do not log into the repository
/version    : show the version, revision and build date
/param      : Set a named parameter <NAME>=<VALUE>. For example -param:FOO=bar
/listparam : List information concerning the defined parameters in the specified job.
/export     : Exports all linked resources of the specified job. The argument is the name of a ZIP
file.

而options 後面可以是=也可以是:也可以是空格
kitchen.bat /file d:\   或者 -file=D:\ 或者/file:D:\等等都可以。。。
定時執行的代碼參考如下【原創】,可以執行的實例
1、windows下的執行方式:
建立一個mysql.dat的文件,裏面寫入
cd D:/Kettle-3.0.2
kitchen.bat /norep -file=D:/kettledata/mysal2orcle.kjb >> kitchen_%date:~0,10%.log
exit
保存文件。
解釋一下上面的語句
cd D:/Kettle-3.0.2 這句的含義是跳轉到kettle的根目錄,因爲kitchen.bat 文件在根目錄下
kitchen.bat /norep -file=D:/kettledata/mysal2orcle.kjb >> kitchen_%date:~0,10%.log
上面的含義是,使用kitchen.bat 命令來執行job文件,job文件的存放路徑是D:/kettledata/mysal2orcle.kjb,並且將執行的結果輸出到 kitchen_%date:~0,10%.log文件中。
2、linux下的書寫格式:
創建mysqldb.sh
內容如下
cd /home/Kettle-3.0.2 這句的含義是跳轉到kettle的根目錄,因爲kitchen.bat 文件在根目錄下
./kitchen.sh -file=/home/etl/mysql.kjb >> /home/etl/log/kettle.log
然後這個文件在crontab中去執行
注意:linux執行shell過程中,由於linux對權限要求很嚴格,所以kitchen.sh必須有可執行的權限。前面必須加上./,也就是./kitchen.sh才能執行,否則會提示找不到此命令。

kitchen.bat的使用方法:

Kitchen.bat /file:D:\job_name.kjb /level:Basic>>D:\etl.log

使用心得:

1.file和level都是前面有‘/’,後面有‘:’,任何一個都不能丟。

2.此語句要在一行上完成,中間不能有換行符之類的。
博主從昨天就開始調試的幾個bat文件,始終不能在我指定的文件裏面記日誌,一直在dos界面記錄,苦思不得其果,偶然的一個把bat文件全屏之後,發現原來語句被換行了,修改到同一行之後可以順利的運行。

3.此語句後面不能接任何語句,就算你在bat文件裏面添加了別的語句,也不會得到執行,查閱了好多資料,沒有發現解決辦法,逼不得已,我只能把job做成了一個一個單獨的bat文件,這個有點兒杯具。

4.JDK或者JRE很重要。
博主因爲服務器上沒有配置java環境,吃了不少苦。
先是沒裝java環境,無法運行kettle;接着裝好了java環境之後,job和轉換可以正常運行,但是kitchen.bat語句不能正常運行,又查閱了一堆資料後發現,原來是環境變量的問題,設置了環境變量之後總算可以正常運行了。

有一篇介紹
Kitchen——作業執行器     是一個作業執行引擎,用來執行作業。這是一個命令行執行工具,沒啥可講的,就把它的參數說明列一下。
    -rep      : Repository name   任務包所在存儲名
    -user     : Repository username   執行人
    -pass     : Repository password   執行人密碼
    -job      : The name of the job to launch 任務包名稱
    -dir      : The directory (don''t forget the leading / or \) 
    -file     : The filename (Job XML) to launch 
    -level    : The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing) 指定日誌級別
    -log      : The logging file to write to  指定日誌文件
    -listdir  : List the directories in the repository 列出指定存儲中的目錄結構。
    -listjobs : List the jobs in the specified directory 列出指定目錄下的所有任務
    -listrep  : List the defined repositories 列出所有的存儲
    -norep    : Don''t log into the repository  不寫日誌
    嗯,居然不支持調度。看了一下文檔,建議使用操作系統提供的調度器來實現調度,比如:Windows可以使用它的任務計劃工具。
發佈了7 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章