简介本资源为Pentaho Data IntegrationKettle9.5社区版完整可执行包pdi-ce-9.5.0.1-261专为ETL开发人员、数据工程师及跨平台数据集成实践者设计支持macOS含M1芯片、Windows与Linux环境开箱即用无需额外安装依赖仅需JDK 17即可运行。压缩包共1078个文件以626个核心jar包含引擎、插件与依赖库、196个.ktr转换脚本和19个.kjb作业脚本为主干辅以XML配置、SVG图标、Shell/批处理启动脚本如Spoon.bat、Carte.bat、Kitchen.bat等及文档类文件结构完整、模块清晰体现Kettle 9.4版本精简包体的新特性。资源大小387.49MB目前已有2876人学习下载。用户可直接部署调试ETL流程、复用预置转换模板、研究启动机制与环境适配逻辑并参考其中规范化的脚本组织方式与跨平台配置实践快速上手企业级数据集成开发。1. Pentaho Data Integration 9.5.0.1-261MacOS 上跑通 Kettle ETL 流程的「最后一块拼图」你是不是也遇到过在 macOS 上双击spoon.sh没反应、终端里执行报No Java runtime present、装了 JDK 17 却提示Unsupported major.minor version 61、或者好不容易启动了 Spoon一拖组件就卡死在「Loading plugins…」这不是玄学——这是 PDI 9.5 在 macOS 上的真实水土不服现场。Pentaho Data IntegrationKettle9.5.0.1-261 是社区版CE最后一个稳定支持 Java 11 的大版本也是目前 macOS 用户能绕开 JDK 17 兼容黑匣子、真正实现「开箱即用式 ETL 开发」的可靠基线。它不追求最新特性但能稳稳跑通 MySQL/PostgreSQL/CSV/Excel/JSON 的全链路抽取、转换、加载适合数据工程师做本地原型验证、高校课程实验搭建、中小团队轻量级调度预演。如果你正被新版 PDI 的 Java 版本错配、Swing 渲染异常或 Apple Silicon 兼容性反复翻车这份资源不是过渡方案而是经过实测的「生产级可用快照」。2. 环境筑基macOS 下 JDK PDI 9.5 的精准匹配策略PDI 9.5 不是「随便装个 Java 就能跑」的工具。它的构建依赖明确锁定在 Java 11JDK 11.0.x且对 JVM 参数、图形栈、文件权限有隐式要求。盲目升级到 JDK 17 或 JDK 21会直接触发类加载失败、UI 线程阻塞、插件扫描超时等底层崩溃。下面这套组合拳是我在线上多个 macOS 12–14Intel 与 M1/M2/M3 均覆盖环境反复验证过的最小可行配置。2.1 为什么必须用 JDK 11从字节码版本反推兼容边界PDI 9.5.0.1-261 的核心 JAR 包如kettle-core-9.5.0.1-261.jar编译目标为major.minor version 55即 Java 11。JVM 的向后兼容规则是高版本 JVM 可以运行低版本字节码但低版本 JVM 无法加载高版本字节码而 PDI 9.5 的启动脚本spoon.sh和内部反射机制又对 JDK 11 的java.awt、javax.swing实现有强绑定。一旦使用 JDK 17即使-XX:IgnoreUnrecognizedVMOptions强行忽略警告也会在PluginRegistry.init()阶段因ClassDefNotFoundError: javax.xml.bind.DatatypeConverter失败——因为 JAXB 在 JDK 11 中仍内置而在 JDK 17 中已被彻底移除。提示不要试图用--add-modules java.xml.bind补救。PDI 9.5 的类加载器路径未声明该模块强行添加会导致Module not found或IllegalAccessError属于设计层面的不可逆断裂。2.2 macOS 下 JDK 11 安装与环境隔离实操推荐使用 SDKMAN! 进行多 JDK 版本管理避免污染系统默认 Java# 安装 SDKMAN!需 curl bash curl -s https://get.sdkman.io | bash source $HOME/.sdkman/bin/sdkman-init.sh # 列出所有可用 JDK 11 构建 sdk list java | grep 11\. # 推荐安装Temurin 11.0.22LTSApple Silicon 原生支持 sdk install java 11.0.22-tem # 设为当前 Shell 会话默认 sdk use java 11.0.22-tem # 验证输出应为 11.0.22 java -version # 永久设为默认写入 ~/.zshrc echo sdk default java 11.0.22-tem ~/.zshrc source ~/.zshrc关键点说明tem构建Eclipse Temurin在 macOS 上提供 ARM64 和 x64 双架构二进制无 Rosetta 转译损耗11.0.22是 JDK 11 最终更新版修复了 macOS 13 的AWT Toolkit初始化 hang 问题sdk use仅作用于当前终端避免全局污染其他 Java 项目。2.3 PDI 9.5.0.1-261 解压与目录结构认知下载得到的压缩包名为pdi-ce-9.5.0.1-261.zip解压后主目录结构如下精简关键路径路径用途是否可修改./spoon.sh图形界面启动脚本Linux/macOS✅ 可编辑 JVM 参数./data-integration/spoon.sh同上实际入口软链接或副本✅ 必须改./data-integration/Pentaho/插件仓库根目录含system/,plugins/⚠️ 只读新增插件放plugins/./data-integration/simple-jndi/jdbc.properties数据源 JNDI 配置模板✅ 首次启动前必配./data-integration/plugins/kettle5-api-plugin/Kettle 自身 API 扩展9.5 新增❌ 不建议动注意macOS 默认解压可能将spoon.sh权限设为只读。执行前务必chmod x ./spoon.sh否则报Permission denied。3. 启动调优绕过 macOS 图形栈陷阱的 spoon.sh 改写指南原生spoon.sh在 macOS 上大概率启动失败根本原因在于Java Swing 应用默认使用Quartz渲染后端而 PDI 9.5 的 UI 组件尤其是Spoon主窗口、Transformation编辑区对AWT线程模型和NSApplication生命周期存在隐式耦合。未加干预时常见现象是 Dock 图标弹出又消失、终端卡在INFO [org.pentaho.di.core.Const] - Spoon - Main window opened.后无响应。3.1 spoon.sh 关键参数注入必须修改打开./spoon.sh或./data-integration/spoon.sh定位到java命令行启动部分通常在文件末尾exec java ...行。在-jar $APP之前插入以下 JVM 参数# 替换原 exec java 行为保留原有 -Xmx 等参数 exec $_PENTAHO_JAVA \ -Xms1024m -Xmx4096m \ -Dfile.encodingUTF-8 \ -Dapple.laf.useScreenMenuBartrue \ -Dcom.apple.macos.use-file-dialog-packagestrue \ -Dcom.apple.macos.useScreenMenuBartrue \ -Dcom.apple.smallTabstrue \ -Dsun.java2d.metalfalse \ -Dawt.useSystemAAFontSettingslcd \ -Dswing.aatexttrue \ -Dkettle.home$BASEDIR \ -Dkettle.plugins.dir$BASEDIR/plugins \ -Djava.library.path$BASEDIR/libswt/osx64 \ -jar $APP $参数逐条解析-Dsun.java2d.metalfalse最关键一行。强制禁用 macOS Metal 渲染后端回退到 OpenGL/Cocoa 混合模式解决 90% 的 UI 冻结-Dapple.laf.useScreenMenuBartrue让菜单栏显示在顶部 macOS 系统栏而非窗口内符合 macOS 交互习惯-Dcom.apple.macos.use-file-dialog-packagestrue启用原生 macOS 文件选择对话框非 Swing 模拟-Djava.library.path...osx64显式指定 SWT 本地库路径避免UnsatisfiedLinkError: no swt-pi-carbon-xxxx in java.library.path-Dkettle.home显式声明 Kettle 工作目录防止插件扫描路径错乱。3.2 验证启动流程与日志定位法修改后执行cd ./data-integration ./spoon.sh若成功启动终端将输出类似INFO [org.pentaho.di.core.Const] - Spoon - Main window opened. INFO [org.pentaho.di.core.Const] - Spoon - Loading plugins... INFO [org.pentaho.di.core.Const] - Spoon - Loading transformations...若失败不要关终端直接按CtrlC中断然后检查最后 20 行错误出现java.lang.UnsatisfiedLinkError: no swt-pi-carbon-...→ 检查-Djava.library.path路径是否存在libswt/osx64/且含swt-pi-carbon-*.jnilib出现java.awt.HeadlessException→ 说明-Djava.awt.headlessfalse缺失已在上述参数中默认包含出现PluginRegistry.init() failed→ 检查./data-integration/plugins/下是否有损坏插件临时重命名整个plugins/目录再试。4. 避坑macOS 用户高频翻车现场与血泪修复清单PDI 9.5 在 macOS 上的坑90% 都集中在「启动即崩」「拖拽失灵」「中文乱码」「连接超时」这四类。以下是我在某高校数据实验室、某跨境电商 BI 团队真实复现并归档的 5 条硬核避坑记录每一条都对应一个具体操作命令或配置项。4.1 现象Spoon 启动后窗口空白Dock 图标持续跳动原因macOS 13Ventura及以上系统对NSApplication的activateIgnoringOtherApps调用限制变严PDI 9.5 的Spoon.getInstance().getShell().setActive()触发安全拦截。解决在spoon.sh的 JVM 参数中追加-Djava.awt.headlessfalse -Dapple.awt.graphics.UseQuartzfalse并确保系统「安全性与隐私」→「辅助功能」中已授权终端应用如 iTerm2 或 Terminal。4.2 现象拖拽「表输入」组件到画布鼠标释放后组件消失原因macOS 的「缩放与字体」设置中启用了「显示器缩放」如「更多空间」模式导致 Swing 的坐标计算偏移DropTarget误判落点在画布外。解决系统设置 → 显示器 → 缩放 → 选择「默认」或在spoon.sh中添加-Dsun.java2d.uiScale1.0强制 UI 缩放为 1:1。4.3 现象MySQL 连接测试通过但执行「表输入」时抛java.sql.SQLException: Unknown system variable query_cache_size原因PDI 9.5 自带的 MySQL JDBC 驱动为mysql-connector-java-5.1.49.jar该版本不兼容 MySQL 8.0 移除的查询缓存变量。解决下载mysql-connector-j-8.0.33.jar注意是j不是java放入./data-integration/lib/删除旧版mysql-connector-java-*.jar重启 Spoon。4.4 现象Excel 输入步骤读取.xlsx文件报org.apache.poi.openxml4j.exceptions.InvalidOperationException: Cant open the specified file: xxx.xlsx原因macOS 文件系统APFS对文件锁处理与 Linux 不同POI 4.1.2PDI 9.5 内置在读取时尝试获取排他锁失败。解决在 Excel 输入步骤的「内容」标签页中勾选Ignore missing files并在「字段」标签页中确认Sheet name填写准确区分大小写更彻底方案将 Excel 文件复制到本地/tmp/目录下再读取。4.5 现象保存.ktr转换文件后再次打开显示「Unknown step type: JsonInput」原因JsonInput步骤属于json-input-plugin但该插件未随 PDI 9.5.0.1-261 默认安装需手动启用。解决访问https://github.com/pentaho/pentaho-kettle/releases/tag/9.5.0.1-261下载json-input-plugin-9.5.0.1-261.zip解压后将json-input-plugin/文件夹整体拷贝至./data-integration/plugins/重启 Spoon。5. 数据源实战在 macOS 上配置 MySQL/PostgreSQL/CSV 三连通验证光能启动不算数ETL 的灵魂在于「连得上、取得出、写得进」。下面以 macOS 本地环境为基准给出三种最常用数据源的零失败配置路径。所有操作均基于spoon.sh启动后的图形界面完成无需命令行敲 SQL。5.1 MySQL 连接从驱动替换到连接测试全流程驱动准备按 4.3 方案确保./data-integration/lib/mysql-connector-j-8.0.33.jar存在且唯一新建数据库连接菜单栏Database→New Connection→ 类型选MySQL关键参数填写Connection name:local_mysql自定义Host name:127.0.0.1不要填 localhostmacOS 下 localhost 可能走 IPv6 导致超时Database name:testPort number:3306Username / Password: 填写你的 MySQL 凭据Extra options: 追加useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue适配 MySQL 8.0 默认 SSL 强制策略测试连接点击Test按钮成功则弹出Connection successful!对话框。提示若测试失败且日志显示Public Key Retrieval is not allowed说明allowPublicKeyRetrievaltrue未生效检查是否漏掉符号或拼写错误。5.2 PostgreSQL 连接绕过 libpq 本地依赖的纯 Java 方案PDI 9.5 自带postgresql-42.3.6.jar完全支持 macOS无需安装libpq新建连接 → 类型选PostgreSQL填写Host name:127.0.0.1Database name:postgresPort number:5432Username / Password: 你的 PG 凭据Connection options:sslmodedisableApplicationNamePDI-9.5禁用 SSL 避免证书链问题Test 成功后在「SQL」标签页执行SELECT version();验证。5.3 CSV 输入处理 macOS 换行符与中文路径的双重陷阱macOS 默认换行符为\r\nCRLF但 CSV 步骤默认按\nLF切分易导致字段错位拖入「CSV 文件输入」步骤 → 双击打开配置「文件」标签页Filename: 点击浏览务必选择绝对路径如/Users/xxx/data/input.csv相对路径在 Spoon 中解析不稳定File Type:CSV「内容」标签页Separator:,Enclosure:若字段含逗号Header:Y首行为列名Format:Mixed自动识别数字/字符串Line separator:\r\n←关键必须手动输入\r\n不能选默认值「字段」标签页点击Get Fields自动识别列名与类型。注意若 CSV 文件由 Excel for Mac 导出务必在 Excel 中另存为「CSV UTF-8逗号分隔」格式否则可能出现 乱码。6. 进阶技巧用 kitchen.sh 实现 macOS 下的 Headless 自动化调度Spoon 是开发调试利器但生产环境需要无界面、可脚本化的调度能力。kitchen.sh是 PDI 的命令行执行器专为 macOS 的自动化场景设计。它不依赖 GUI纯靠 JVM 启动稳定性远超图形界面。6.1 kitchen.sh 基础语法与参数含义# 语法模板 ./kitchen.sh \ -file/path/to/job.kjb \ # 作业文件路径.kjb -levelBasic \ # 日志级别Nothing/Minimal/Basic/Detailed/Debug/Rowlevel/Errors -param:INPUT_PATH/tmp/data \ # 传递参数给作业 -param:OUTPUT_DBlocal_mysql \ -logfile/tmp/kitchen.log \ # 日志输出路径必须绝对路径 -loglevelBasic关键参数说明-file必须是绝对路径相对路径在 headless 模式下解析失败-logfile日志文件路径也必须绝对且确保目录可写/tmp/最安全-param支持多组格式为-param:KEYVALUE作业中用${KEY}引用-level与-loglevel区别前者控制控制台输出粒度后者控制日志文件记录粒度建议一致。6.2 实战用 cron 每日凌晨 2 点执行数据同步作业假设你有一个作业sync_orders.kjb需每天同步订单数据到 MySQL编写执行脚本run_sync.sh#!/bin/bash # 设置 PDI 根目录根据你的解压路径调整 PDI_HOME/Users/xxx/pdi-ce-9.5.0.1-261 # 切换到 kitchen.sh 目录 cd $PDI_HOME/data-integration # 执行作业日志按日期分割 LOG_FILE/tmp/sync_orders_$(date \%Y\%m\%d).log ./kitchen.sh \ -file/Users/xxx/jobs/sync_orders.kjb \ -levelBasic \ -param:INPUT_CSV/Users/xxx/data/orders_$(date \%Y\%m\%d).csv \ -param:TARGET_TABLEorders_daily \ -logfile$LOG_FILE \ -loglevelBasic /dev/null 21 # 检查执行状态kitchen.sh 退出码 0成功1失败 if [ $? -eq 0 ]; then echo $(date): sync_orders SUCCESS /tmp/sync_cron.log else echo $(date): sync_orders FAILED /tmp/sync_cron.log fi赋予执行权限并加入 crontabchmod x run_sync.sh # 编辑 crontab确保 PATH 包含 java crontab -e # 添加一行每天凌晨 2 点执行 0 2 * * * /Users/xxx/run_sync.sh提示cron 环境变量与用户 Shell 不同务必在run_sync.sh开头显式设置export JAVA_HOME$(/usr/libexec/java_home -v 11)否则kitchen.sh找不到 JDK。6.3 故障自检当 kitchen.sh 静默失败时三步定位法看日志文件头打开-logfile指定的文件第一行应为INFO [org.pentaho.di.core.Const] - Kitchen - Start of job execution.若无此行说明 JVM 未启动成功查退出码在脚本中echo $?输出 kitchen.sh 退出码0成功1作业执行失败如 SQL 报错2参数错误如-file路径不存在3JVM 启动失败JDK 未找到模拟终端执行在终端中手动运行./kitchen.sh -file...观察实时输出比 cron 日志更详细。从那以后我每次部署 macOS 上的 PDI 自动化任务都强制走一遍JAVA_HOME显式声明 kitchen.sh绝对路径 /tmp/日志目录三件套再没被静默失败坑过。希望帮到你。本文还有配套的精品资源点击获取