背景說明:
在數據量較小,且數據源和裝載地都是關系型數據庫時,使用Kettle做ETL較為簡便。
由於調度系統產品因為服務器環境方面的因素,而無法部署,故使用Linux的crontab定時器來制作簡易調度系統是一個比較簡便的解決方案。
本文旨在記錄Kettle的部署及配置文件配置注意事項和如何自制簡易調度系統,以便處理類似問題時方案的復用。
一、環境與工具
- CentOS 6.7
- JDK1.8/JDK1.7
- pdi-ce-6.1.0.1-196.zip
二、Linux安裝Kettle
2.1 安裝JDK並配置環境變量
Kettle的運行需要jdk環境,所以需要先安裝jdk。jdk的安裝方法此處略去。
2.2 創建kettle用戶
# useradd -m kettle
2.3 上傳Kettle安裝包並解壓
創建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 更改屬主屬組和執行權限
# chown -R kettle:kettle /opt/kettle
# chmod 755 /opt/kettle/pdi-ce-6.1.0.1-196/data-integration/*.sh
2.5 測試
切換至kettle用戶
# su kettle
啟動kettle的kitchen或pan
$ cd /opt/kettle/pdi-ce-6.1.0.1-196/data-integration/
$ ./kitchen.sh
如果能正常啟動,則說明kettle安裝成功。
2.6 配置文件設置
在/home/kettle/.kettle目錄下有一個kettle.properties文件,在kettle程序啟動時會讀取這個文件配置的屬性。這里一般可以將數據庫的連接信息(包含ip,端口,數據庫實例,用戶名,密碼等)以及自定的一些變量(如etl_path等)。
將這些連接信息配置在配置文件中,而在kettle腳本中使用這些變量名來代替,好處在與腳本的移植與復用時,不需要改動腳本,只需要修改配置文件即可。
三、簡易調度系統制作
3.1 創建調度系統目錄
- 創建kettle腳本存放目錄
# mkdir -p /opt/kettle/scripts
# mkdir -p /opt/kettle/scripts/jobs
# mkdir -p /opt/kettle/scripts/trans
- 創建調度腳本存放目錄
# mkdir -p /opt/kettle/scheduler
- 創建日志存放目錄
# mkdir -p /opt/kettle/logs
3.2 上傳或創建調度腳本kettle_scheduler.sh
上傳kettle_scheduler.sh文件到/opt/kettle/scheduler目錄下。或者進入目錄創建:
編輯文件:
# cd /opt/kettle/scheduler
# vim kettle_scheduler.sh
輸入如下內容並保存:
#!/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 修改權限
# chown -R kettle:kettle /opt/kettle
# chmod 755 /opt/kettle/scheduler/kettle_scheduler.sh
3.4 配置定時任務
進入crontab編輯界面
# crontab -e
輸入如下內容,保存退出
1 0 * * * chown -R kettle:kettle /opt/kettle/scripts
5 0 * * * su - kettle -c "/opt/kettle/scheduler/kettle_scheduler.sh" &
四、調度系統的使用
4.1 kettle腳本的上線
上傳開發好的kettle腳本到指定路徑。
- 將所有的kettle作業(以.kjb為后綴)上傳至/opt/kettle/scripts/jobs目錄下;
- 將所有的kettle轉換(以.ktr為后綴)上傳至/opt/kettle/scripts/trans目錄下。
這里開發kettle作業時,需要注意作業和轉換的目錄位置關系,比如可以在配置文件kettle.properties中配置etl_path=/opt/kettle/scripts。
4.2 日志查看
在/opt/kettle/logs目錄下,每一個作業會新建一個對應名稱的文件夾用於存儲執行的日志,作業的每一次執行都會在這個文件夾下創建一個日志文件並加上日期。
例如,/opt/kettle/scripts/jobs目錄下有個test.kjb的作業,則執行完后會在/opt/kettle/logs/test目錄下創建一個test-20190823.log
# cd /opt/kettle/logs/test
# cat test-20190823.log
五、日志的清理
5.1 上傳或創建日志清理腳本kettle_clean.sh
上傳kettle_clean.sh文件到/opt/kettle/scheduler目錄下。或者進入目錄創建:
編輯文件:
# cd /opt/kettle/scheduler
# vim kettle_clean.sh
輸入如下內容並保存:
#!/bin/bash
dir=/opt/kettle/logs
cd ${dir}
reserveDays=7 # 設置要保留的日志天數
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 更改屬主屬組和執行權限
# chown kettle:kettle /opt/kettle/scheduler/kettle_clean.sh
# chmod 755 /opt/kettle/scheduler/kettle_clean.sh
5.3 配置定時任務
進入crontab編輯界面
# crontab -e
增加一行如下內容,保存退出
0 2 * * * su - kettle -c "/opt/kettle/scheduler/kettle_clean.sh"