9本文介紹使用shell呼叫kettle job實現資料排程功能。
1、通過crontab定時排程shell
2、使用shell呼叫kettle job
3、排程異常傳送郵件預警
基本步驟為
1、建立extract資料夾,用於存放指令碼&job配置檔案
2、建立extract_log資料夾,用於存放排程log
3、在extract資料夾建立test.sh指令碼
4、在extract資料夾中建立test_list.txt用於配置需要排程的job名稱
test.sh指令碼如下:
#!/bin/bash
#判斷日誌資料夾是否存在,不存在則建立
#以天為單位儲存日誌
#log_date_dir=`date '+/%y/%m/%d'`
log_date_dir=`date '+%y%m%d'`
log_dir=/extract_log/$log_date_dir
#echo $log_dir
#判斷日誌檔案目錄是否存在
if [ -d
$log_dir ];then
echo
$log_dir exists!
else
#日誌目錄不存在則建立
mkdir $log_dir
fi#迴圈執行轉換job
#進入專案資料夾
cd /extract
#迴圈讀取job名稱 並執行,按行讀取
#extratc_list.txt中為要執行的job名,一行乙個,如有新增job配置該檔案即可
for line in `cat extract_list.txt`
do#echo $line
#執行讀取到的job,需配置連線kettle的使用者名稱 密碼,同事指定日誌儲存位置
sh /tools/data-integration/pan.sh -rep kettle_zs -user user_test -pass pass_test -trans $line -level basic>$log_dir/$line
".log"
#判斷執行是否出錯,如果出錯中午傳送郵件
if [ "$?" != "0" ];then
echo
"erro!"
echo
"##########log_msg######################"
#將報錯的的job名稱放入log_msg.py檔案,用於傳送郵件用
echo sub_msg=\"$line\">/tools/project/log_msg.py
#將報錯的的job日誌追加至log_msg.py檔案,用於傳送郵件用
echo con_msg=\"$log_dir/$line".log"\">>
/tools/project/log_msg.py
#呼叫發郵件程式,python實現
python /mail/sendmail.py
else
echo "success!"
fidone
建立mail資料夾,在檔案加中建立sendmail.py、log_msg.py檔案
sendmail.py實現郵件傳送功能
log_msg.py即上文shell中提到的檔案,用於存放報錯資訊用於傳送郵件
#sendmail.py實現
# -*- coding: utf-8 -*-
import smtplib
import socket
import log_msg
#from proper import list
from email.mime.text import mimetext
#郵件服務配置
mail_host="smtp.exmail.qq.com"
mail_user="[email protected]"
mail_pass="test_1234"
defsend_mail
(to_list,sub,content):
host_name = socket.gethostname()
send_from = socket.gethostbyname(host_name)
#定義發件人
me=mail_user
#指定郵件內容 樣式
msg = mimetext(content,_subtype='plain',_charset='utf-8')
#指定郵件標題
msg['subject'] = sub #+"send from:"+send_from
#指定發件人
msg['from'] = me
#指定收件人
msg['to'] = ";".join(to_list)
try:
server = smtplib.smtp()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return
true
except exception, e:
print str(e)
return
false
if __name__ == '__main__':
mailto_list=["[email protected]","[email protected]","[email protected]"]
v_sub='erro:from 192.168.168.1-'+log_msg.sub_msg
f = open(log_msg.con_msg,'r')
v_content = f.read()
f.close()
if send_mail(mailto_list,v_sub,v_content):
print
"success!"
print log_msg.sub_msg
print log_msg.con_msg
else:
print
"failed!"
#編輯crontab 每天8:30執行該排程
30 08 * * * sh /extract/test.sh
以上為完成流程,實現了定時排程kettle job,並實現排程異常時,實現郵件預警功能。
主要使用內容為:shell、python、kettle、crontab
python迴圈排程kettle作業
需求 當前job只能一次跑一天程式,想著用python寫個迴圈,然後一次性跑乙個月的資料。原理是python呼叫cmd cmd kitchen.bat rep kettle repo user admin pass admin dir job job material inventory param...
解決kettle排程效率低,不可高併發排程方法
我在spoon裡面執行乙個作業只要幾秒種,但是在命令列中執行卻要好幾十秒?並行同時執行幾個job,就把記憶體撐爆了,kettle好佔資源呀!kettle作為使用者規模最多的開源etl工具,強大簡潔的功能深受廣大etl從業者的歡迎。但kettle本身的排程監控功能卻非常弱。連pentaho官方都建議採...
kettle實現資料轉換
功能要求 1,ba中302合併到307中,307後續會停止使用,但是老的資料裡還是會有 2,使用季度為展示期間 3,年份展示格式為 fy16 4,公司 展示位描述 5,成本中心合併為部門展示 6,科目一部分展示 一部分合併到指定科目 7,dg中mo合併至r5,mo後續會停止使用,類似ba 8,依據之...