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