部署Kettle做ETL開(kāi)發(fā)并使用Crontab制作調(diào)度系統(tǒng)
背景說(shuō)明:
在數(shù)據(jù)量較小,且數(shù)據(jù)源和裝載地都是關(guān)系型數(shù)據(jù)庫(kù)時(shí),使用Kettle做ETL較為簡(jiǎn)便。
由于調(diào)度系統(tǒng)產(chǎn)品因?yàn)榉?wù)器環(huán)境方面的因素,而無(wú)法部署,故使用Linux的crontab定時(shí)器來(lái)制作簡(jiǎn)易調(diào)度系統(tǒng)是一個(gè)比較簡(jiǎn)便的解決方案。
本文旨在記錄Kettle的部署及配置文件配置注意事項(xiàng)和如何自制簡(jiǎn)易調(diào)度系統(tǒng),以便處理類(lèi)似問(wèn)題時(shí)方案的復(fù)用。
一、環(huán)境與工具
- CentOS 6.7
- JDK1.8/JDK1.7
- pdi-ce-6.1.0.1-196.zip
二、Linux安裝Kettle
2.1 安裝JDK并配置環(huán)境變量
Kettle的運(yùn)行需要jdk環(huán)境,所以需要先安裝jdk。jdk的安裝方法此處略去。
2.2 創(chuàng)建kettle用戶(hù)
# useradd -m kettle
2.3 上傳Kettle安裝包并解壓
創(chuàng)建kettle部署目錄
# mkdir /opt/kettle
將安裝包pdi-ce-6.1.0.1-196.zip上傳至/opt/kettle目錄下,并解壓:
# unzip /opt/kettle/pdi-ce-6.1.0.1-196.zip
2.4 更改屬主屬組和執(zhí)行權(quán)限
# chown -R kettle:kettle /opt/kettle
# chmod 755 /opt/kettle/pdi-ce-6.1.0.1-196/data-integration/*.sh
2.5 測(cè)試
切換至kettle用戶(hù)
# su kettle
啟動(dòng)kettle的kitchen或pan
$ cd /opt/kettle/pdi-ce-6.1.0.1-196/data-integration/
$ ./kitchen.sh
如果能正常啟動(dòng),則說(shuō)明kettle安裝成功。
2.6 配置文件設(shè)置
在/home/kettle/.kettle目錄下有一個(gè)kettle.properties文件,在kettle程序啟動(dòng)時(shí)會(huì)讀取這個(gè)文件配置的屬性。這里一般可以將數(shù)據(jù)庫(kù)的連接信息(包含ip,端口,數(shù)據(jù)庫(kù)實(shí)例,用戶(hù)名,密碼等)以及自定的一些變量(如etl_path等)。
將這些連接信息配置在配置文件中,而在kettle腳本中使用這些變量名來(lái)代替,好處在與腳本的移植與復(fù)用時(shí),不需要改動(dòng)腳本,只需要修改配置文件即可。
三、簡(jiǎn)易調(diào)度系統(tǒng)制作
3.1 創(chuàng)建調(diào)度系統(tǒng)目錄
- 創(chuàng)建kettle腳本存放目錄
# mkdir -p /opt/kettle/scripts
# mkdir -p /opt/kettle/scripts/jobs
# mkdir -p /opt/kettle/scripts/trans
- 創(chuàng)建調(diào)度腳本存放目錄
# mkdir -p /opt/kettle/scheduler
- 創(chuàng)建日志存放目錄
# mkdir -p /opt/kettle/logs
3.2 上傳或創(chuàng)建調(diào)度腳本kettle_scheduler.sh
上傳kettle_scheduler.sh文件到/opt/kettle/scheduler目錄下。或者進(jìn)入目錄創(chuàng)建:
編輯文件:
# cd /opt/kettle/scheduler
# vim kettle_scheduler.sh
輸入如下內(nèi)容并保存:
#!/bin/bash
#
cd /opt/kettle/scripts/jobs/
date=`date +%Y%m%d`
files=`ls /opt/kettle/scripts/jobs/*.kjb`
for file in $files
do
file_name=`echo "$file" | awk -F '.' '{print $1}' | awk -F '/' '{print $6}'`
log_name="${file_name}-${date}.log"
mkdir -p /opt/kettle/logs/$file_name
/opt/kettle/pdi-ce-6.1.0.1-196/data-integration/kitchen.sh -file=$file -level=basic>>/opt/kettle/logs/$file_name/$log_name
done
3.3 修改權(quán)限
# chown -R kettle:kettle /opt/kettle
# chmod 755 /opt/kettle/scheduler/kettle_scheduler.sh
3.4 配置定時(shí)任務(wù)
進(jìn)入crontab編輯界面
# crontab -e
輸入如下內(nèi)容,保存退出
1 0 * * * chown -R kettle:kettle /opt/kettle/scripts
5 0 * * * su - kettle -c "/opt/kettle/scheduler/kettle_scheduler.sh" &
四、調(diào)度系統(tǒng)的使用
4.1 kettle腳本的上線(xiàn)
上傳開(kāi)發(fā)好的kettle腳本到指定路徑。
- 將所有的kettle作業(yè)(以.kjb為后綴)上傳至/opt/kettle/scripts/jobs目錄下;
- 將所有的kettle轉(zhuǎn)換(以.ktr為后綴)上傳至/opt/kettle/scripts/trans目錄下。
這里開(kāi)發(fā)kettle作業(yè)時(shí),需要注意作業(yè)和轉(zhuǎn)換的目錄位置關(guān)系,比如可以在配置文件kettle.properties中配置etl_path=/opt/kettle/scripts。
4.2 日志查看
在/opt/kettle/logs目錄下,每一個(gè)作業(yè)會(huì)新建一個(gè)對(duì)應(yīng)名稱(chēng)的文件夾用于存儲(chǔ)執(zhí)行的日志,作業(yè)的每一次執(zhí)行都會(huì)在這個(gè)文件夾下創(chuàng)建一個(gè)日志文件并加上日期。
例如,/opt/kettle/scripts/jobs目錄下有個(gè)test.kjb的作業(yè),則執(zhí)行完后會(huì)在/opt/kettle/logs/test目錄下創(chuàng)建一個(gè)test-20190823.log
# cd /opt/kettle/logs/test
# cat test-20190823.log
五、日志的清理
5.1 上傳或創(chuàng)建日志清理腳本kettle_clean.sh
上傳kettle_clean.sh文件到/opt/kettle/scheduler目錄下。或者進(jìn)入目錄創(chuàng)建:
編輯文件:
# cd /opt/kettle/scheduler
# vim kettle_clean.sh
輸入如下內(nèi)容并保存:
#!/bin/bash
dir=/opt/kettle/logs
cd ${dir}
reserveDays=7 # 設(shè)置要保留的日志天數(shù)
sub_dirs=`ls ${dir}`
for sub_dir in ${sub_dirs}; do
count=$(ls ${sub_dir} | wc -l)
if [[ ${count} -gt ${reserveDays} ]]; then
cleanCnt=$((count-reserveDays))
files=$(ls ${dir}/${sub_dir} | head -n ${cleanCnt})
cd ${sub_dir}
rm -rf ${files}
cd ..
fi
done
5.2 更改屬主屬組和執(zhí)行權(quán)限
# chown kettle:kettle /opt/kettle/scheduler/kettle_clean.sh
# chmod 755 /opt/kettle/scheduler/kettle_clean.sh
5.3 配置定時(shí)任務(wù)
進(jìn)入crontab編輯界面
# crontab -e
增加一行如下內(nèi)容,保存退出
0 2 * * * su - kettle -c "/opt/kettle/scheduler/kettle_clean.sh"

浙公網(wǎng)安備 33010602011771號(hào)