綠色安裝包: pdi-ce-8.3.0.0-371.zip (1.38G)
連結:https://pan.baidu.com/s/12Blwc0Tl5qDM2dY5RW32IQ
提取碼:mn0d
Kettle 現在叫 PDI(Pentaho Data Intergration) 官網 速度很慢🐌 盡管社群版下載下傳是免費的,但且頁面不友好【很難找到下載下傳連結-不瞞您說,我就沒找到 😅】Kettle中文網 【下載下傳收費】但教程總結的很詳細且免費,大家可以學習。
1 介紹
ETL(Extract-Transform-Load的縮寫,即資料抽取、轉換、裝載),這類的工具不少 Flume、Kafka、Sqoop 等,但像 Kettle 這樣功能全面的不多,Kettle 支援圖形化的 GUI 設計界面,更加直覺,可以做一些簡單或複雜的資料抽取、品質檢測、資料清洗、資料轉換、資料過濾等,我放上兩張圖檔,大家一看就明了了【Kettle 是可以部分替代 DataPipeline 的】:
說明: 我使用 Kettle 有好幾年,一般是借助 shell 腳本調用 Kettle 腳本來完成資料的遷移清洗,也用過 Flume、Sqoop 等大資料相關的工具,寫過Java代碼實作的資料治理項目,Kettle 有自身的優勢,也有它的不足,Kettle 工具不是分布式的,有些操作極其消耗記憶體,處理一些非大量和複雜的資料效率還是很高的。
2 使用
Kettle 是解壓即用的,在 Windows 和 Linux 環境下都可以運作。通常是使用 Windows 環境下的圖形化界面進行腳本的開發,然後在 Linux 環境下進行調用 🐶【問就是穩定】。
Kettle 要運作在 Java 環境下:
[[email protected] bin]# java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
# JAVA_HOME 配置環境變量:
vim /etc/profile.d/my_env.sh
# 添加 JAVA_HOME和bin
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
# 使得配置的環境變量立即生效:
# 首先是要賦權限【隻操作一次就行】
chmod +x /etc/profile.d/my_env.sh
source /etc/profile.d/my_env.sh
【以上都是正常操作】以下是調用 .ktr 的 shell 腳本内容:
# PDI的解壓路徑
cd /usr/local/data-integration
# ------ 參數 ------
# 年月日
yearMonthDay=$(date +%Y%m%d)
# 電話号碼總數
phoneNum=3000
# 生成檔案路徑
filePath=/home/data-integration/file/test
#生成記錄條數=單次生成數量*生成次數
#單次生成數量
oneTimeCount=1000
#生成次數
totalTime=2
# ------ 腳本及相關資訊 ------
# 執行ktr腳本的工具路徑
pan=/usr/local/data-integration/pan.sh
# ktr、log路徑、ktrName
basedir=/home/data-integration
ktrdir=$basedir/ktr
log=$basedir/log
ktrName=creatData
# 先删除目前日期檔案
rm -f ${filePath}-${yearMonthDay}.txt
echo "删除檔案" ${filePath}-${yearMonthDay}.txt
# 循環調用運作ktr 【-param對應的是.ktr的參數名稱】
for num in $( seq 0 $((${totalTime}-1)) )
do
echo "第[" $((${num} + 1)) "]次,生成[" ${oneTimeCount} "]條資料。"
echo "随機數 i 序列起始值:" $(( ${oneTimeCount} * ${num} ))
echo "ID 序列起始值:" $(( ${oneTimeCount} * ${num} * 2 ))
echo "電話号碼序列起始值:" $[ $(( ${oneTimeCount} * ${num})) % ${phoneNum} ]
sh $pan -file:$ktrdir/$ktrName.ktr \
-level:Error \
-logfile:$log/$ktrName.log \
-param:copyNum=${oneTimeCount} \
-param:phoneStart=$[ $(( ${oneTimeCount} * ${num})) % ${phoneNum} ] \
-param:phoneNum=${phoneNum} \
-param:iStart=$(( ${oneTimeCount} * ${num} )) \
-param:idStart=$(( ${oneTimeCount} * ${num} * 2 )) \
-param:filePath=${filePath}-${yearMonthDay}
done