
简介本资源为自编译的Pentaho Kettle 9.5版本pdi-ce-9.5.0.1-261完整程序包面向需要在macOS、Windows或Linux上进行ETL开发的数据工程师与数据分析人员尤其适配macOS M1芯片解压即可使用需配合JDK17运行。压缩包共1078个文件约387.49MB以626个jar核心依赖、196个ktr转换脚本、80个xml配置、19个kjb作业文件为主另含xul界面定义、bat与sh启动脚本、properties配置及少量示例数据文件覆盖Spoon、Kitchen、Pan、Carte等组件的运行所需。该版本延续Kettle 9.4起大幅精简程序包体积的特性并非编译缺失而是新版本的设计调整有条件者也可参照作者CSDN博客自行编译。目前已有2871人学习下载适合希望快速搭建ETL环境、研究Kettle目录结构与组件构成的技术人员参考使用。1. 从 pdi-ce-9.5.0.1-261 说起为什么还有人死磕 Pentaho Kettle 9.5打开数据集成工具的讨论区2024 年还在问「pentaho 下载」「kettle 下载安装教程」的人一点没少。原因很实在大量存量 ETL 作业跑在 Kettle 上而 pdi-ce-9.5.0.1-261 是 Pentaho Data Integration Community Edition 9.5 这条线上一个被反复使用的稳定构建号。它不是一个新潮玩意儿但它是很多团队数据管道里那根不能断的旧水管。这个版本能解决的核心问题很明确把关系库、文件、消息队列之间的数据搬运和清洗用可视化转换Transformation和作业Job编排起来并且能在 Windows 上画流程、在 Linux 上无人值守跑。适合谁一是接手了历史 Kettle 项目、需要把环境重新搭起来的人二是想用 Spoon 图形界面快速验证数据同步逻辑、又不想引入重型调度平台的工程师。这篇笔记就围绕这个构建号把下载、部署、驱动、参数和踩坑讲透。2. 把 pdi-ce-9.5.0.1-261 在本地跑起来下载、解压与首次启动2.1 先搞清楚 pdi-ce 包里到底有什么很多人搜「kettle pdi下载」下完发现是个几百 MB 的压缩包解压出来一堆目录就懵了。pdi-ce-9.5.0.1-261 解压后的根目录通常叫># 建一个专用目录避免和系统其他软件混在一起 mkdir -p /opt/pentaho cd /opt/pentaho # 解压假设压缩包已上传到当前目录 unzip pdi-ce-9.5.0.1-261.zip # 确认解压结果应该能看到># 查看当前 java 版本 java -version # 如果系统有多个 JDK显式指定再启动 Spoon export JAVA_HOME/usr/lib/jvm/java-11-openjdk export PATH$JAVA_HOME/bin:$PATH cd /opt/pentaho/data-integration ./spoon.sh逻辑说明JAVA_HOME决定 Spoon 用哪个 JVM多版本机器上不显式指定就会用到默认那个很容易踩到版本不兼容。参数上如果是在无图形界面的服务器上Spoon 是起不来的服务器端只跑pan.sh和kitchen.sh设计工作放在本地有桌面的机器上做这是最常见的分工方式。提示服务器上不要试图用 X11 转发硬开 Spoon网络一抖界面就断转换跑到一半前功尽弃。设计归设计执行归执行。3. 连接数据库驱动放置、JNDI 配置与 ucanaccess 场景3.1 数据库驱动到底放哪、怎么验证Kettle 连数据库靠 JDBC 驱动驱动 jar 必须放进># 把对应版本的 mysql-connector-java jar 拷进 lib cp mysql-connector-java-8.0.28.jar /opt/pentaho/data-integration/lib/ # 重启 Spoon 或重新执行 pan/kitchen让 classpath 重新加载逻辑说明Kettle 启动时扫描lib目录构建 classpath运行中新增 jar 不会自动生效必须重启进程。参数上要注意驱动版本和数据库服务端版本的匹配MySQL 8 用 5.x 的老驱动常报时区或认证插件错误。验证方式是新建一个数据库连接点「测试」看到成功提示才算通。3.2 用 JNDI 把连接配置从转换里抽出来硬编码连接信息是后期维护的噩梦换个环境要改几十个转换。常见做法是在simple-jndi/jdbc.properties里定义命名连接# simple-jndi/jdbc.properties # 键名就是转换里引用的 JNDI 名称 MySQL_Local/typejavax.sql.DataSource MySQL_Local/drivercom.mysql.cj.jdbc.Driver MySQL_Local/urljdbc:mysql://127.0.0.1:3306/demo?useUnicodetruecharacterEncodingutf8 MySQL_Local/useretl_user MySQL_Local/passwordetl_pass逻辑说明转换里的数据库连接类型选 JNDI名称填MySQL_Local这样开发、测试、生产各放一份jdbc.properties就能切换环境转换文件本身不用动。参数上url里的字符编码参数建议显式写上否则中文乱码排查起来很费时间。密码明文存放是社区版的现实生产环境要靠文件权限兜底chmod 600 jdbc.properties。3.3 ucanaccess 驱动接入 Access 数据库的配置热搜里「kettle ucanaccess 驱动」出现频率不低说明还有不少人在用 Access 做数据源。ucanaccess 不是单个 jar它依赖一串库缺一个就报类找不到。典型做法是把 ucanaccess 及其依赖一起放进lib# ucanaccess 通常需要这几个 jar 同时存在 # ucanaccess-x.x.x.jar # jackcess-x.x.x.jar # commons-langx.jar # commons-logging-x.x.jar # hsqldb-x.x.x.jar cp ucanaccess-*.jar jackcess-*.jar commons-*.jar hsqldb-*.jar /opt/pentaho/data-integration/lib/逻辑说明ucanaccess 通过 JDBC 把 Access 文件当数据库读驱动类一般是net.ucanaccess.jdbc.UcanaccessDriver连接 URL 形如jdbc:ucanaccess:///path/to/file.accdb。参数上Access 文件路径要写绝对路径相对路径在不同工作目录下执行会找不到文件。另外 Access 是单文件库并发写入能力弱ETL 里只读它比较稳要写回 Access 得谨慎评估。注意ucanaccess 依赖版本之间敏感混用不同版本的 jackcess 和 hsqldb 会出现运行时异常建议一次性把成套依赖拷齐别东拼西凑。4. Linux 环境部署 kettle无界面执行与调度参数4.1 用 kitchen 和 pan 跑作业与转换服务器上没有图形界面执行靠命令行。转换用pan.sh作业用kitchen.shcd /opt/pentaho/data-integration # 执行一个转换-file 指定 ktr 文件-level 控制日志级别 ./pan.sh -file/data/etl/sync_user.ktr -levelBasic -logfile/data/etl/logs/sync_user.log # 执行一个作业-file 指定 kjb 文件 ./kitchen.sh -file/data/etl/job/daily_load.kjb -levelDetailed -logfile/data/etl/logs/daily_load.log逻辑说明-level决定日志详细程度Basic适合日常Detailed排查问题时用Debug会输出海量信息只在定位疑难时开。-logfile把日志落盘方便和调度平台的日志聚合对接。参数上-param可以传命名参数覆盖转换里的默认值这是多环境复用的关键./pan.sh -file/data/etl/sync_user.ktr -param:RUN_DATE2024-06-01 -levelBasic4.2 退出码与调度集成调度平台判断一次执行成功与否靠的是进程退出码。Kettle 执行成功返回 0失败返回非 0。常见做法是在 shell 里包一层#!/bin/bash cd /opt/pentaho/data-integration ./kitchen.sh -file/data/etl/job/daily_load.kjb -levelBasic -logfile/data/etl/logs/daily_load.log RC$? if [ $RC -ne 0 ]; then echo ETL job failed with code $RC # 这里接告警比如发邮件或调监控接口 exit $RC fi echo ETL job finished OK逻辑说明$?捕获上一条命令的退出码非 0 就触发告警。参数上要注意Kettle 里某些步骤即使内部报错作业如果没配错误处理也可能整体返回 0所以不能只信退出码还要扫日志里的ERROR关键字做二次校验。4.3 内存与 JVM 参数调整数据量大时默认堆内存不够会报OutOfMemoryError。调整入口在启动脚本里常见做法是改spoon.sh或pan.sh中的PENTAHO_DI_JAVA_OPTIONS# 在 pan.sh / kitchen.sh 里找到或添加这一行 export PENTAHO_DI_JAVA_OPTIONS-Xms1024m -Xmx4096m -XX:MaxPermSize256m逻辑说明-Xms是初始堆-Xmx是最大堆生产环境建议两者设成一样避免动态扩堆带来的抖动。参数上-Xmx不要超过物理内存的 70%否则和操作系统抢内存反而更慢。JDK 8 之后MaxPermSize已被移除写上去会告警但不影响运行JDK 11 下应改用-XX:MaxMetaspaceSize。提示调大堆内存只是缓解真正吃内存的往往是「排序」和「聚合」步骤的全量加载。能从 SQL 侧先过滤聚合的就别全丢给 Kettle 内存处理。5. 避坑与排查pdi-ce-9.5 上最容易翻车的 5 件事5.1 现象Spoon 启动闪退命令行无报错原因多半是 JDK 版本不匹配或 SWT 图形库与当前桌面环境不兼容日志被吞掉了。解决用./spoon.sh在终端里启动把标准输出和错误都打出来看确认java -version落在 8 或 11Linux 桌面缺 GTK 相关库时补装对应依赖。5.2 现象连接测试报「No suitable driver found」原因驱动 jar 没放进lib或放进了libswt或放进去后没重启进程。解决确认 jar 在style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;" />