Kettle8在Linux Centos7部署並定時任務排程

疯子110發表於2024-03-14


Kettle8在Linux Centos7部署並定時任務排程
kettle介紹
配置環境
安裝JAVA
安裝Kettle
上傳本地資源庫
修改Kettle配置
Kettle調優
上傳JDBC驅動包
新增jndi連線池配置
編寫執行指令碼
設定linx定時任務排程
Kettle使用kettle.properties
Kettle8在Linux Centos7部署並定時任務排程
主要介紹如何在Linux中部署kettle,正式配置環境,執行任務,轉換以及設定定時任務;

kettle介紹
免費開源的基於java的企業級ETL工具,功能強大簡單易用,無可抗拒

ETL(Extract-Transform-Load的縮寫,即資料抽取、轉換、裝載的過程),對於企業或行業應用來說,我們經常會遇到各種資料的處理,轉換,遷移,所以瞭解並掌握一種etl工具的使用,必不可少,這裡我介紹一個我在工作中使用了3年左右的ETL工具Kettle,本著好東西不獨享的想法,跟大家分享碰撞交流一下!在使用中我感覺這個工具真的很強大,支援圖形化的GUI設計介面,然後可以以工作流的形式流轉,在做一些簡單或複雜的資料抽取、質量檢測、資料清洗、資料轉換、資料過濾等方面有著比較穩定的表現,其中最主要的我們透過熟練的應用它,減少了非常多的研發工作量,提高了我們的工作效率

中文官網:http://www.kettle.org.cn/

下載地址: https://sourceforge.net/projects/pentaho/files/

配置環境
安裝JAVA
離線安裝java
下載對應的JDK版本

檢視原系統jdk版本
java -version

圖中可看出jdk版本為openJDK 需要解除安裝;如果沒有安裝則跳過

檢視安裝的資訊
rpm -qa | grep java


解除安裝OpenJDK
rpm -e --nodeps tzdata-java-2019c-1.el7.noarch
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.232.b09-0.el7_7.x86_64

安裝jdk
rpm -ivh jdk-8u251-linux-x64.rpm


設定變數環境
vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_251

export JAVA_BIN=/usr/java/jdk1.8.0_251/bin

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME JAVA_BIN PATH CLASSPATH

環境變數生效,需要執行命令

source /etc/profile

驗證JDK是否安裝成功
java -version

安裝Kettle
將下載後的kettle工具pdi-ce-8.3.0.0-371.zip上傳至linux伺服器,kettle在windows和linux系統中通用;
windows使用Kitchen.bat,linux使用kitchen.sh;
解壓檔案
unzip -o -d /home/program/kettle/ pdi-ce-8.3.0.0-371.zip

安裝完成
上傳本地資源庫
在windows中編寫好任務、轉換;打包資源庫上傳至linux;

上傳壓縮檔案到linux伺服器


解壓檔案
unzip -o -d /home/program/kettle/kettle_repo xxx.zip

建立kettle資源庫檔案,在根目錄下
vi repositories.xml
新增此內容,改為自己實際的內容

<?xml version="1.0" encoding="UTF-8"?>
<repositories>
<repository>
<id>KettleFileRepository</id>
<name>資源庫名稱</name>
<description>File repository</description>
<is_default>false</is_default>
<base_directory>資源庫地址</base_directory>
<read_only>N</read_only>
<hides_hidden_files>N</hides_hidden_files>
</repository>
</repositories>

引數:
name:資源庫名稱 xxx
base_directory:資源庫地址 /home/program/kettle/kettle_repo/xxx

修改Kettle配置
Kettle調優
調整JVM大小進行效能最佳化,修改Kettle定時任務中的Kitchen或Pan或Spoon指令碼。
linux下修改spoon.sh檔案

引數參考:
-Xmx1024m: 設定JVM最大可用記憶體為1024M。
-Xms512m: 設定JVM促使記憶體為512m。此值可以設定與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配記憶體。
-Xmn2g: 設定年輕代大小為2G。整個JVM記憶體大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代後,將會減小年老代大小。此值對系統效能影響較大,Sun官方推薦配置為整個堆的3/8。
-Xss128k: 設定每個執行緒的堆疊大小。JDK5.0以後每個執行緒堆疊大小為1M,以前每個執行緒堆疊大小為256K。更具應用的執行緒所需記憶體大小進行調整。在相同實體記憶體下,減小這個值能生成更多的執行緒。但是作業系統對一個程序內的執行緒數還是有限制的,不能無限生成,經驗值在3000~5000左右。
-XX:MaxPermSize JVM最大允許分配的非堆記憶體,按需分配
上傳JDBC驅動包
上傳驅動包至kettle根目錄下\lib

oracle:ojdbc14-10.2.0.4.0.jar
mysql: mysql-connector-java-5.1.47.jar
新增jndi連線池配置
如在資源庫中使用了jndi連線池新增配置

kettle jndi的使用


kettle連線池配置

vi simple-jndi/jdbc.properties
1
檔案最下方新增配置

#mysql配置
demo/type=javax.sql.DataSource
demo/driver=com.mysql.cj.jdbc.Driver
demo/url=jdbc:mysql://127.0.0.1:3366/demo?characterEncoding=utf8&serverTimezone=Asia/Shanghai
demo/user=root
demo/password=root

#oracle_local
oracle/type=javax.sql.DataSource
oracle/driver=oracle.jdbc.driver.OracleDriver
oracle/url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
oracle/user=oracle
oracle/password=oracle

##sqlserver_local
sqlserver/type=javax.sql.DataSource
sqlserver/driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
sqlserver/url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=sqlserver
sqlserver/user=sqlserver
sqlserver/password=sqlserver

編寫執行指令碼
進入/home/program/kettle 目錄下建立執行指令碼
vi start.sh
1
export JAVA_HOME=/home/program/jdk8
export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

REP_NAME=資源庫名稱
JOB_NAME=執行任務名稱
LOG_DATE="`date +%Y-%m-%d`"
LOG_PATH=/home/logs/etl/$JOB_NAME"_"$LOG_DATE"_log.log"
DIR_PATH=/
FILE=/home/program/kettle/kettle_repo/xxxx/$JOB_NAME".kjb"
LOG_LEVEL=Basic
echo ==================================================================================================
echo 開始資料轉換:
echo 資源庫:$REP_NAME
echo 任務名稱:$JOB_NAME
echo 日誌路徑:$LOG_PATH
echo ==================================================================================================

/home/program/kettle/data-integration/kitchen.sh -rep:$REP_NAME -dir:$DIR_PATH -file:$FILE -job:$JOB_NAME -level:$LOG_LEVEL>>$LOG_PATH

kitchen.sh 引數介紹:

-rep: 執行資源庫名稱
-dir: kettle資源庫中存放任務轉換的根目錄
-file: 執行的任務檔案
-job:執行任務名稱
-level:log級別 (Basic, Detailed, Debug, Rowlevel, Error, Nothing);如需提高效能則Basic即可
更多引數介紹詳看:kettle介紹

設定指令碼為可執行
chmod +x start.sh
執行指令碼
./start.sh
檢視執行日誌
tail -f -n 2000 /home/logs/etl/xxxx.log
設定linx定時任務排程
配置crontab例行性工作排程
crontab例行性工作可以直接在/etc/crontab中進行配置,但是不建議這樣子做,因為有可能會因為輸入法的問題而導致無法執行。我們使用crontab–e來進行編輯。

下面來看下使用crontab –e進入編輯介面後的六個欄位引數說明:
欄位:* * * * * 命令串
釋義:分 時 日 月 周 具體要執行的命令或者指令碼等,具體可檢視cron表示式
上面的*表示具體的時間數字,在實際應用中,要替換成有意義的資料。

輸入crontab –e進入編輯介面,在編輯介面進行計劃任務的設定
0 */1 * * * bash /home/program/kettle/start.sh
上面命令的意義是:每1小時就會執行/home/program/kettle/start.sh指令碼,而且該指令碼的內容就是執行我們的job。這樣就實現了每小時執行排程的工作了。

Kettle使用kettle.properties


配置如下
commit_size = 5000
#郵箱授權碼
email_send_auth = EABSHTFXLMEYNCYH
#郵箱傳送地址
email_send_url = smtp.163.com
#郵箱傳送人
email_send_user =xxxxx@163.com
#傳送使用者,多個空格隔開
email_user = xxxx@qq.com
thread_size = 27

文章知識點與官方知識檔案匹配,可進一步學習相關知識
————————————————

版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。

原文連結:https://blog.csdn.net/qq_34960590/article/details/123014442

相關文章