一、環境准備
二、下載安裝
三、運行軟件
四、核心文件配置
五、在Linux上運行
六、服務器定時運行Job
一、環境准備
1.1 Centos7
1.2 創建用戶
$ useradd -m -g bigdata etl -s /bin/bash # ll /home/查看是否創建成功
$ passwd etl
$ visudo
$ su etl
二、下載安裝
2.1 下載地址:https://sourceforge.net/projects/pentaho/files/Data Integration
2.2 安裝:
進入文件下載目錄
$ sudo mkdir -p /usr/local/etl/kettle8.2.0
$ sudo unzip ./pdi-ce-8.2.0.0-342.zip -d /usr/local/etl/kettle8.2.0
$ cd /usr/local/etl/
$ sudo chown -R etl ./kettle8.2.0
$ sudo chgrp -R bigdata ./kettle8.2.0
$ sudo ln -s /usr/local/etl/kettle8.2.0 ~/kettle # 方便版本更換
2.3 設置環境變量
$ vi ~/.bash_profile
增加下述內容:
JAVA_HOME=/usr/jvm/jdk1.8
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
退出,生效環境變量
$ source ~/.bash_profile
三、運行軟件
$ cd ~/kettle/data-integration
$ ./carte.sh 127.0.0.1 8081 & #127.0.0.1換成自己的IP地址
出現監聽窗口則運行成功:
[etl@xiaojy data-integration]$ ./carte.sh 127.0.0.1 8081 #127.0.0.1換成自己的IP地址
/home/etl/kettle/data-integration
2021/08/06 04:40:05 - Carte - Installing timer to purge stale objects after 1440 minutes.
2021-08-06 04:40:05.544::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
2021/08/06 04:40:05 - Carte - 創建 web 服務監聽器 @ 地址: 127.0.0.1:8081
2021-08-06 04:40:05.661::INFO: jetty-6.1.21
2021-08-06 04:40:05.765::INFO: Started SocketConnector@127.0.0.1:8081 #127.0.0.1為自己的IP地址
使用網頁登錄:127.0.0.1:8081,初始賬號密碼為cluster,如下顯示:
到此安裝結束
注意:如果要鏈接MySQL數據庫,需要將Mysql的Driver復制到data-integration/lib目錄下;
五、在Linux上運行
(一)、不帶參數運行
5.1 windows spoon圖形界面中設置好job任務,轉換填相對路徑
轉換填相對路徑
5.2 將上述兩個文件復制到~/workplace/kettle/test01/
;
進入data-integration
目錄,執行:
$ kitchen.sh -file ~/workplace/kettle/test01/linTestJob.kjb
執行完畢無報錯
Carte - Installing timer to purge stale objects after 1440 minutes.
2022/01/10 05:27:02 - linTestJob - 開始項[job1]
2022/01/10 05:27:02 - job1 - Using run configuration [Pentaho local]
2022/01/10 05:27:02 - job1 - Using legacy execution engine
2022/01/10 05:27:02 - linuText - 為了轉換解除補丁開始 [linuText]
2022/01/10 05:27:03 - input.0 - Finished reading query, closing connection.
2022/01/10 05:27:03 - input.0 - 完成處理 (I=4, O=0, R=0, W=4, U=0, E=0)
2022/01/10 05:27:03 - output.0 - 完成處理 (I=4, O=4, R=4, W=4, U=0, E=0)
2022/01/10 05:27:03 - linTestJob - 開始項[成功]
2022/01/10 05:27:03 - linTestJob - 完成作業項[成功] (結果=[true])
2022/01/10 05:27:03 - linTestJob - 完成作業項[job1] (結果=[true])
2022/01/10 05:27:03 - linTestJob - 任務執行完畢
2022/01/10 05:27:03 - Kitchen - Finished!
2022/01/10 05:27:03 - Kitchen - Start=2022/01/10 05:26:38.944, Stop=2022/01/10 05:27:03.371
2022/01/10 05:27:03 - Kitchen - Processing ended after 24 seconds.
(二)、傳遞參數運行
同樣在spoon.bat中設置流程:
1,在作業中,空白處點擊設置
2,輸入參數:
3,在job中,通用-設置變量,把參數賦值兩個變量
4,在轉換中,作業-獲取變量
此處參數獲取也有其他方式傳遞,可根據實際情況設置;
5,通樣將兩個文件復制到Linux系統同個文件夾下,此處是~/workplace/kettle/test01/
;
先不傳遞參數,使用參數默認值運行
6,在Linux系統中執行:
$ ~/kettle/data-integration/kitchen.sh -file ~/workplace/kettle/test01/linTestJob.kjb
運行前
Job運行成功:
7,再傳遞參數:
$ ~/kettle/data-integration/kitchen.sh -file ~/workplace/kettle/test01/linTestJob.kjb -param:n=lisi -param:a=25
# 兩個參數要使用兩個“-param:參數名=參數值”
Job運行成功!
六、服務器定時運行Job
1,上述Job中轉換,增加“update_at”字段用來獲取系統時間,測試是否實現定時運行
update_at代碼如下:
//Script here
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小時
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
var update_at=new Date(new Date().getTime());
同樣,把兩個文件復制到服務器,測試運行情況:
~/kettle/data-integration/kitchen.sh -file ~/workplace/kettle/test01/linTestJob.kjb
2,使用crontab設置定時任務:
2.1 運行systemctl status crond查看crontab服務狀態
2.2 進入上述Job文件目錄,創建腳本vi ./test.sh
文件輸入:
export JAVA_HOME=/usr/jvm/jdk1.8 #自己的路徑
export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
/home/etl/kettle/data-integration/kitchen.sh -file /home/etl/workplace/kettle/test01/linTestJob.kjb > /home/etl/workplace/kettle/test01/logs/`date "+%Y%m%d%H%M%S"`.log -logfile /home/etl/workplace/kettle/test01/logs/log.log #(注意此處`,為英文~鍵`不是單引號’) ## -file Job路徑、-logfile 日志保存路徑
2.3 添加文件可執行權限,測試腳本運行:
chmod a+x *.sh
./test.sh
數據成功導入,腳本可以運行。
2.4 編輯定時任務
2.4.1 先用crontab -l
查看定時任務目錄
2.4.2 然后運行crontab –e
編輯定時任務:
* * * * * /home/etl/workplace/kettle/test01/test.sh #每分鍾執行一次
2.4.3 再運行crontab -l
查看定時任務
2.4.4 運行sudo systemctl restart crond
重啟定時任務,運行systemctl status crond查看crontab服務狀態
2.4.5 等待Job運行
Job定時運行完成
附:Crontab使用鏈接:https://www.jianshu.com/p/d93e2b177814
2,使用Kettle作業的自帶定時任務:
然后照上述流程運行Job即可
運行成功!
注:#該方法需要設置服務器的后台運行!