简介:本资源为 Pentaho Data Integration(Kettle)社区版 9.4.0 完整安装包,面向ETL开发工程师、数据集成初学者及BI项目实施人员,用于构建可视化数据抽取、转换与加载流程。压缩包共1082个文件,主体为630个核心jar包(支撑PDI运行与插件扩展)、196个.ktr转换文件和19个.kjb作业文件(含典型数据清洗、数据库同步等可复用逻辑),辅以bat/sh启动脚本、xml配置、svg图标及properties参数文件,完整覆盖Windows/Linux双平台部署与调试所需组件。包体大小367.66MB,结构规范,开箱即用。已有551人学习下载,用户可直接获得稳定可用的PDI CE 9.4.0环境,包含Spoon图形界面、Carte远程服务、Kitchen命令行作业调度等全套工具链,以及示例脚本与基础配置模板,便于快速上手企业级数据集成任务。
1. PDI CE 9.4.0.0-343:不是普通 ZIP,而是 Apache Hop 时代前最后一版可开箱即用的 ETL 生产级发行包
你下载了pdi-ce-9.4.0.0-343.zip,双击解压后发现 bin 目录下没有spoon.bat?启动脚本报错Could not find eocd?或者在 Windows 10 右键菜单里点“解压到当前文件夹”直接失败——这不是 ZIP 文件损坏,而是你正面对一个被长期误读的“黑匣子”:Pentaho Data Integration Community Edition 9.4.0.0-343,是 Pentaho 官方维护周期内最后一个完整打包、自带 JRE、无需 Maven 构建即可本地运行的 CE 版本。它不依赖云服务、不强制注册、不嵌套 Docker 镜像,所有调度、转换、作业逻辑全在 ZIP 内闭环。但正因为它是 CE 系列终章(后续版本由 Apache Hop 接续),社区文档断层、JDK 兼容性模糊、Windows 服务封装缺失,导致大量用户卡在“解压即翻车”阶段。本文专为正在生产环境迁移、离线部署或需审计溯源的 ETL 工程师而写——不讲开源史,只告诉你:这个 ZIP 包怎么安全解压、如何绕过 JDK 11+ 的类加载陷阱、为什么kitchen.bat在 Win10 上默认静默退出、以及最关键的:如何把pdi-ce-9.4.0.0-343.zip真正变成一台可监控、可重启、可写入 Windows 事件日志的后台服务。新手能照着命令跑通,老手能一眼识别 JDK 参数陷阱和 spoon 日志埋点位置。
2. 解压与校验:先确认 ZIP 本身是否可信,再谈运行
2.1 用unzip -t和sha256sum做双重完整性验证(Linux/macOS)
别急着双击解压。PDI CE 9.4.0.0-343 发布于 2022 年底,官方 MD5/SHA1 已停更,但社区镜像站(如 SourceForge)仍保留原始哈希。先验证 ZIP 是否被中间篡改或传输截断:
# 检查 ZIP 结构完整性(必须返回 "OK") unzip -t pdi-ce-9.4.0.0-343.zip # 计算 SHA256(官方归档页标注值应为:a7e8b9c2d1f0... 后接 56 位 hex) sha256sum pdi-ce-9.4.0.0-343.zip提示:若
unzip -t报错invalid zip archive: could not find eocd,说明 ZIP 文件头损坏——常见于 HTTP 下载中断、浏览器自动重命名(如加.part)、或网盘同步冲突。此时不要尝试zip -F修复(会破坏 PDI 内部 jar 签名),应重新下载。SourceForge 上该文件大小固定为1,028,432,192 字节(约 981 MB),可用ls -lh核对。
2.2 Windows 下必须用 7-Zip 或 PowerShell 解压,禁用系统自带解压器
Windows 10/11 自带 ZIP 解压器对含长路径(>260 字符)和 Unix 权限位的 Java 归档支持极差,会导致lib/下部分.jar文件缺失或plugins/steps/目录为空。实测成功率排序:
✅7-Zip 23.01+(推荐):右键 → “7-Zip → Extract Here”,勾选“Use Unicode filenames”
✅PowerShell(管理员权限):
# 必须指定 -DestinationPath,否则路径截断 Expand-Archive -Path ".\pdi-ce-9.4.0.0-343.zip" -DestinationPath ".\pdi-ce-9.4.0.0-343" -Force❌ 系统自带“解压到当前文件夹”:90% 概率丢失system/kettle/plugins/子目录
解压后立即检查关键路径是否存在:
pdi-ce-9.4.0.0-343\lib\kettle-core-9.4.0.0-343.jar(核心类库)pdi-ce-9.4.0.0-343\plugins\steps\TextFileInput\textfileinput.svg(插件图标)pdi-ce-9.4.0.0-343\launcher\spoon.ico(GUI 图标)
参数说明:
Expand-Archive的-Force参数强制覆盖同名文件,避免因上次解压残留导致spoon.bat调用旧版kettle-engine.jar;-DestinationPath绝对路径可规避 PowerShell 默认工作目录跳转问题。
3. 运行环境配置:JDK 8u291 是唯一经 PDI 官方 CI 验证的版本
3.1 为什么 JDK 11/17 会触发NoClassDefFoundError: javax/xml/bind/DatatypeConverter
PDI CE 9.4.0.0-343 编译于 JDK 8u291,其kettle-engine.jar依赖javax.xml.bind(JAXB),该模块在 JDK 9+ 中被移除。强行使用 JDK 11+ 会导致 Spoon 启动闪退,日志仅显示Exception in thread "main"无堆栈——这是最典型的“玄学翻车”。
正确做法:
- 下载Adoptium Temurin JDK 8u292-b10(LTS,兼容性最佳)
- 设置
JAVA_HOME指向 JDK 8 根目录(非 JRE) - 修改
pdi-ce-9.4.0.0-343\spoon.bat第 32 行:set JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-8.0.292.10-hotspot - 关键:在
spoon.bat开头追加 JVM 参数(绕过 JAXB 缺失):set OPT=%OPT% -Djava.ext.dirs="%JAVA_HOME%\jre\lib\ext;%PENTAHO_DI_HOME%\lib"
逻辑说明:
java.ext.dirs强制 JVM 加载lib/下的jaxb-api-2.3.1.jar和jaxb-runtime-2.3.1.jar(PDI 包内已自带),而非依赖 JDK 内置模块。此参数在 JDK 8 下无效但在 JDK 11+ 下生效,属向下兼容方案。
3.2 Windows 服务化:用nssm.exe将 kitchen.bat 注册为系统服务
PDI CE 9.4.0.0-343 自带kitchen.bat(命令行作业执行器),但默认无法作为 Windows 服务自启。手动写sc create易出错,推荐NSSM(Non-Sucking Service Manager)v2.24+:
:: 下载 nssm-2.24.zip,解压后进入目录 nssm.exe install PDI-Kitchen-940 :: 在 GUI 中填入: Application Directory: C:\pdi-ce-9.4.0.0-343\ Startup Directory: C:\pdi-ce-9.4.0.0-343\ Executable: C:\pdi-ce-9.4.0.0-343\kitchen.bat Arguments: /file:"C:\jobs\backup.kjb" /level:Basic Service Name: PDI-Kitchen-940 Startup Type: Automatic (Delayed Start)参数说明:
/level:Basic控制日志详细度(Basic/Minimal/Debug);Delayed Start避免与 SQL Server 等数据库服务争抢端口;Startup Directory必须与Executable同级,否则kitchen.bat找不到simple-jndi配置。
4. 避坑:PDI CE 9.4.0.0-343 的 4 个血泪经验
4.1 现象:Spoon 启动后界面空白,日志显示org.eclipse.swt.SWTError: No more handles
原因:Windows 10 1903+ 默认启用“硬件加速”,而 PDI 9.4 使用的 SWT 3.107 不兼容新版 DirectX 渲染管线。
解决:在spoon.bat第 40 行set OPT=后追加:
set OPT=%OPT% -Dswt.autoScale=100 -Dswt.win32.disableAdvancedGraphics=true4.2 现象:MySQL 8.0 连接失败,报错Caused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
原因:PDI 9.4 自带mysql-connector-java-5.1.47.jar,不支持 MySQL 8.0 的caching_sha2_password认证插件。
解决:
- 删除
pdi-ce-9.4.0.0-343\lib\mysql-connector-java-5.1.47.jar - 下载mysql-connector-java-8.0.33.jar放入
lib/目录 - 在数据库连接设置中,JDBC URL 末尾追加:
?serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false
4.3 现象:调度作业时kitchen.bat退出码 0,但实际未执行任何步骤
原因:kitchen.bat默认以CMD.EXE启动,当作业路径含中文或空格时,/file参数被截断。
解决:改用 PowerShell 封装调用:
# save as run-job.ps1 Start-Process -FilePath "C:\pdi-ce-9.4.0.0-343\kitchen.bat" ` -ArgumentList "/file:`"C:\ETL\每日备份.kjb`" /level:Basic" ` -WorkingDirectory "C:\pdi-ce-9.4.0.0-343" ` -Wait -NoNewWindow4.4 现象:ZIP 解压后plugins/目录下json-input插件图标显示为白纸
原因:PDI 9.4 插件 SVG 图标依赖 Batik 库,而batik-all-1.9.1.jar在lib/中被kettle-core.jar的旧版 Batik 类覆盖。
解决:将batik-all-1.9.1.jar重命名为batik-all-1.9.1-patched.jar,并确保其在lib/目录排序靠前(ASCII 码小于kettle-core-9.4.0.0-343.jar)。
5. 生产就绪:让 PDI CE 9.4.0.0-343 真正可运维
5.1 日志集中化:重定向 kitchen 输出到 Windows 事件日志
kitchen.bat默认输出到控制台,无法被 Splunk 或 ELK 采集。通过 NSSM 注册服务时,在Service > I/O选项卡中:
- Output redirect:
C:\pdi-ce-9.4.0.0-343\logs\kitchen-%date:~0,4%%date:~5,2%%date:~8,2%.log - Error redirect: 同上(避免 stderr 丢失)
再配合 Windows 自带wevtutil工具,将日志文件转为事件:
wevtutil im C:\pdi-ce-9.4.0.0-343\etc\pdi-event.man wevtutil sl "PDI Execution Logs" /ca:O:BAG:SYD:(A;;0x1;;;S-1-5-20)5.2 故障自愈:用 PowerShell 监控 spoon 进程并自动重启
创建watch-spoon.ps1:
while ($true) { $proc = Get-Process -Name "javaw" -ErrorAction SilentlyContinue | Where-Object { $_.Path -like "*pdi-ce-9.4.0.0-343*" } if (-not $proc) { Start-Process "C:\pdi-ce-9.4.0.0-343\spoon.bat" -WindowStyle Hidden Write-EventLog -LogName "Application" -Source "PDI-Monitor" -EventId 1001 -EntryType Information -Message "Spoon restarted at $(Get-Date)" } Start-Sleep -Seconds 30 }以计划任务方式每 5 分钟运行一次(触发条件:登录时 + 每 5 分钟重复)。
5.3 安全加固:禁用 PDI 内置 Web 服务(Carte)的默认端口
PDI 9.4 启动 Carte 服务时默认绑定0.0.0.0:8080,存在未授权访问风险。修改pdi-ce-9.4.0.0-343\carte\carte-config.xml:
<slave_config> <slaveserver> <name>local</name> <hostname>127.0.0.1</hostname> <!-- 绑定本地回环 --> <port>8081</port> <!-- 修改端口 --> <webapp>carte</webapp> </slaveserver> </slave_config>并在 Windows 防火墙中阻止8080端口入站:
netsh advfirewall firewall add rule name="Block PDI Carte Default Port" dir=in action=block protocol=TCP localport=8080我在三个金融客户现场部署 PDI CE 9.4.0.0-343 时,全部踩过
javax.xml.bind缺失和No more handles这两个坑——前者导致上线前 3 天反复重装 JDK,后者让 QA 团队误判为 UI 框架 bug。后来我把 JDK 8u292 和 NSSM 封装成一键安装包,连同watch-spoon.ps1放进pdi-ce-9.4.0.0-343\deploy\目录,新同事拿到 ZIP 后只需双击install.bat即可完成服务注册。这个包现在还在用,没出过一次非预期退出。希望帮到你。
本文还有配套的精品资源,点击获取