境搭建與避坑實(shí)踐)
簡(jiǎn)介這份資源面向數(shù)據(jù)工程師、ETL開(kāi)發(fā)初學(xué)者及需要搭建數(shù)據(jù)集成流程的技術(shù)人員提供KettlePentaho Data Integration9.3版本的獲取渠道。Kettle是一款純Java編寫(xiě)的開(kāi)源ETL工具支持Windows、Linux、Unix跨平臺(tái)運(yùn)行通過(guò)圖形化界面Spoon以拖拽方式設(shè)計(jì)Transformation與Job完成數(shù)據(jù)抽取、清洗、轉(zhuǎn)換、聚合及工作流調(diào)度并可對(duì)接MySQL、Oracle、MongoDB、Hadoop HDFS以及Amazon S3、Azure Blob等云存儲(chǔ)服務(wù)。資源包內(nèi)共1個(gè)docx文檔約14KB內(nèi)容圍繞9.3版本的特性說(shuō)明、下載方式與使用要點(diǎn)展開(kāi)附帶百度云鏈接及提取碼方便國(guó)內(nèi)用戶(hù)繞開(kāi)網(wǎng)絡(luò)限制獲取安裝包。目前已有5724人學(xué)習(xí)下載適合希望快速上手Kettle、了解新版更新亮點(diǎn)并搭建本地ETL實(shí)驗(yàn)環(huán)境的數(shù)據(jù)從業(yè)者參考。1. 從一次 JDK 版本翻車(chē)說(shuō)起Kettle 9.3 到底該配什么環(huán)境上周幫一個(gè)做數(shù)據(jù)倉(cāng)庫(kù)的朋友排查問(wèn)題他那邊用 Kettle 跑一個(gè)每天凌晨?jī)牲c(diǎn)的定時(shí)抽取任務(wù)連續(xù)三天失敗報(bào)錯(cuò)信息里全是NoClassDefFoundError和UnsupportedClassVersionError。我遠(yuǎn)程連上去一看他機(jī)器上裝的是 JDK 8而 Kettle 9.3 的某些依賴(lài)包編譯版本已經(jīng)上到 11 了。這就是典型的“工具下好了環(huán)境沒(méi)對(duì)齊”的翻車(chē)現(xiàn)場(chǎng)。Kettle 9.3 作為 Pentaho Data Integration 的一個(gè)穩(wěn)定版本在國(guó)內(nèi)數(shù)據(jù)圈子里用得非常多尤其是做傳統(tǒng)數(shù)倉(cāng)、做批量數(shù)據(jù)同步的團(tuán)隊(duì)幾乎繞不開(kāi)它。但很多人拿到安裝包之后直接雙擊 Spoon.bat 就開(kāi)跑結(jié)果要么閃退要么連不上數(shù)據(jù)庫(kù)要么跑著跑著內(nèi)存溢出。這篇筆記就是把我自己裝 Kettle 9.3 的完整過(guò)程拆開(kāi)從 JDK 選型、安裝包獲取、環(huán)境變量配置到第一次跑通一個(gè) Transformation再到常見(jiàn)報(bào)錯(cuò)怎么救全部按可復(fù)現(xiàn)的步驟寫(xiě)清楚。如果你正在找 Kettle 9.3 的安裝配置方法或者已經(jīng)裝了一半卡在某個(gè)報(bào)錯(cuò)上下面的內(nèi)容可以照著走一遍。2. 安裝前的環(huán)境準(zhǔn)備JDK 版本、內(nèi)存參數(shù)與目錄規(guī)劃2.1 JDK 選型為什么我最終鎖定了 JDK 11Kettle 9.3 官方文檔里寫(xiě)的是支持 JDK 8 和 JDK 11但實(shí)際用下來(lái)JDK 8 在連接某些新版本數(shù)據(jù)庫(kù)驅(qū)動(dòng)時(shí)會(huì)出問(wèn)題比如 MySQL 8 的caching_sha2_password認(rèn)證插件JDK 8 的舊版 JRE 默認(rèn)不支持需要額外換驅(qū)動(dòng)包。而 JDK 11 是 LTS 版本Pentaho 9.3 的很多依賴(lài)庫(kù)也是按 11 編譯的兼容性最好。我一般會(huì)選 OpenJDK 11 的某個(gè)穩(wěn)定發(fā)行版比如 Eclipse Temurin 11 或者 Amazon Corretto 11這兩個(gè)在 Windows 和 Linux 上都有現(xiàn)成的安裝包省得自己編譯。安裝完 JDK 之后第一件事是驗(yàn)證版本java -version輸出里應(yīng)該看到openjdk version 11.0.x這樣的字樣。如果還是顯示 1.8說(shuō)明系統(tǒng)里存在多個(gè) JDK需要調(diào)整JAVA_HOME的指向。Windows 下可以在系統(tǒng)環(huán)境變量里把JAVA_HOME改成 JDK 11 的安裝路徑Linux 下用update-alternatives切換。提示不要用 JDK 17 或更高版本去跑 Kettle 9.3我試過(guò)Spoon 啟動(dòng)時(shí)會(huì)報(bào)模塊訪問(wèn)錯(cuò)誤因?yàn)?9.3 還沒(méi)做模塊化適配。2.2 內(nèi)存參數(shù)給 Spoon 留夠堆空間Kettle 的圖形化客戶(hù)端 Spoon 本身是個(gè) Java 應(yīng)用默認(rèn)堆內(nèi)存可能只有 512MB 或 1GB處理稍大一點(diǎn)的數(shù)據(jù)量就會(huì)卡死或者拋OutOfMemoryError。安裝包解壓后在>PENTAHO_DI_JAVA_OPTIONS-Xms1024m -Xmx4096m -XX:MaxPermSize256m-Xms1024m是初始堆大小-Xmx4096m是最大堆具體數(shù)值根據(jù)你機(jī)器的物理內(nèi)存來(lái)定一般不超過(guò)物理內(nèi)存的一半。-XX:MaxPermSize在 JDK 8 之后其實(shí)已經(jīng)廢棄了但 Kettle 的啟動(dòng)腳本里還留著這個(gè)參數(shù)JDK 11 下會(huì)忽略它不用管。2.3 目錄規(guī)劃別把安裝包放在中文路徑下這是血淚經(jīng)驗(yàn)。Kettle 的很多腳本和配置文件對(duì)中文路徑支持不好如果解壓到D:\工具\(yùn)kettle這種目錄下Spoon 啟動(dòng)時(shí)可能找不到lib下的 jar 包報(bào)ClassNotFoundException。我習(xí)慣把安裝包解壓到一個(gè)純英文、無(wú)空格的路徑比如D:\pdi-ce-9.3或者/opt/pdi-ce-9.3。另外>export KETTLE_HOME/opt/pdi-ce-9.3/data-integration export PATH$PATH:$KETTLE_HOMEWindows 下在系統(tǒng)環(huán)境變量里新建KETTLE_HOME值指向>./kitchen.sh -file/path/to/test.kjb -levelBasic如果輸出里能看到日志內(nèi)容并且退出碼是 0說(shuō)明命令行環(huán)境沒(méi)問(wèn)題。-levelBasic是日志級(jí)別調(diào)試時(shí)可以改成Debug看更詳細(xì)的信息。6.3 檢查點(diǎn)三一個(gè)完整的 ETL 鏈路跑通最終驗(yàn)證還是要回到數(shù)據(jù)本身。我一般會(huì)設(shè)計(jì)一個(gè)最小閉環(huán)從 MySQL 讀一張表經(jīng)過(guò)“字段選擇”和“過(guò)濾記錄”兩個(gè)步驟寫(xiě)到另一個(gè) MySQL 表或者 CSV 文件里。跑完之后去目標(biāo)端select count(*)確認(rèn)數(shù)據(jù)量對(duì)得上再抽查幾行看字段值有沒(méi)有被錯(cuò)誤轉(zhuǎn)換。這一步能過(guò)基本就可以把 Kettle 9.3 投入到日常使用了。從那以后我每次裝完 Kettle都會(huì)強(qiáng)制走一遍“Spoon 啟動(dòng) → 命令行執(zhí)行 → 數(shù)據(jù)閉環(huán)”這三步不再只看界面能不能打開(kāi)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取