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