Kettle排程實現

2021-08-04 15:45:49 字數 3395 閱讀 2894

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,依據之...