CentOS 8 安装 Kettle 9.1 指南
在 CentOS 8 从零安装 Pentaho Data Integration 9.1:JDK 8 前置、在线下载与离线导入两种方案、环境变量与 JVM 堆配置,附 kitchen/pan 实测验证与 JDK 11 兼容排查。
CentOS 8 安装 Kettle 9.1 指南
目标:在 CentOS 8 服务器上从零完成 Pentaho Data Integration(Kettle,下称 PDI)9.1 社区版的安装与验证,覆盖 JDK 8 前置环境、在线下载与离线导入两种安装方案、环境变量与 JVM 内存配置,并给出 kitchen/pan 命令行的实测验证输出。全文命令与回显已在 CentOS 8(x86_64)实测通过。
一、环境信息
- 操作系统:CentOS 8(x86_64)
- PDI 版本:9.1.0.0-324(build date 2020-09-07)
- 安装包:
pdi-ce-9.1.0.0-324.zip(约 1749 MB) - 安装包 SHA256:
0f3c031d6d0a2d6f7eedd918a4f3d44a02006d1c8ccca9b99f7ceded3bb07ad8 - JDK:OpenJDK 1.8.0_312(
java-1.8.0-openjdk) - 安装目录:
/opt/pentaho/data-integration - 运行账户:root(生产环境建议使用专用低权限账户)
- 端口:CLI 工具本身不占端口;Carte 内嵌 Web 服务默认监听 8081(可选组件)
💡 说明:PDI 9.1 社区版(Pentaho Data Integration Community Edition)是 Hitachi Vantara 开源数据集成工具 Kettle 的最后一个独立社区发行版之一,
pdi-ce-<版本>.zip内含 Kitchen(作业执行器)、Pan(转换执行器)、Carte(内嵌 Web 服务器)、Spoon(图形设计器)等全部组件。
二、前置条件
2.1 硬件与系统要求
- CPU:2 核起步(数据量增大时按需扩容)
- 内存:2 GB 起步;本文实测环境按 256–512 MB JVM 堆配置即可跑通验证
- 磁盘:安装目录约需 2.5 GB(压缩包 1.8 GB + 解压后约 1.8 GB,另有临时空间)
- 系统为 CentOS 8 x86_64,具备 root 或 sudo 权限
2.2 安装 JDK 8
PDI 9.1 的启动脚本(kitchen.sh/pan.sh/carte.sh/spoon.sh 共用)与 JDK 11+ 不兼容(详见"九、常见问题"Q1),必须使用 JDK 8:
dnf install -y java-1.8.0-openjdk
安装完成后确认版本:
java -version
实测输出:
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
2.3 安装 unzip 与下载工具
安装包为 zip 格式,且在线方案需要 wget:
dnf install -y unzip wget
2.4 创建安装目录
mkdir -p /opt/pentaho
三、版本选型说明
| 项目 | 说明 |
|---|---|
| 发行版 | PDI Community Edition(社区版,免费开源),企业版为 Pentaho Data Integration EE |
| 本次版本 | 9.1.0.0-324,社区版末期稳定版本,发布于 2020-09-07 |
| JDK 要求 | 仅支持 JDK 8;JDK 11/17 会因启动脚本硬编码 -Djava.endorsed.dirs 而无法启动 |
| 安装包形态 | pdi-ce-<版本>.zip,免编译免安装,解压即用 |
| 主要组件 | kitchen.sh(作业)、pan.sh(转换)、carte.sh(Web 服务/集群)、spoon.sh(GUI) |
💡 说明:社区版后续演进并入 Hitachi Vantara 平台(Pentaho 9.2+ 仅对企业版开放下载)。若需要长期维护版本,请评估企业版或锁定 9.1 社区版自维护。
四、在线安装方案(A:官方压缩包下载)
4.1 下载安装包
PDI 9.1 社区版的历史官方下载地址(SourceForge pentaho 项目):
cd /opt/pentaho
wget https://sourceforge.net/projects/pentaho/files/Pentaho%209.1/client-tools/pdi-ce-9.1.0.0-324.zip
⚠️ 注意(渠道变迁):Hitachi Vantara 已清空 SourceForge 上 pentaho 项目的文件区(现存仅说明文档),上述历史直链可能返回 404。若无法下载,请改用以下替代方式之一,并将安装包置于内网供离线导入:
- Hitachi Vantara 官方网站的 Pentaho 产品页/支持门户,以官网实际提供的社区版入口为准(部分入口需注册账号);
- 企业内部软件镜像或留存的历史安装包;
- 从可信的第三方 Docker Hub 镜像(内含完整 PDI 目录结构)中提取
data-integration目录后重新打包为 zip。
下载完成后校验完整性(以本文实测包为准):
sha256sum pdi-ce-9.1.0.0-324.zip
实测输出:
0f3c031d6d0a2d6f7eedd918a4f3d44a02006d1c8ccca9b99f7ceded3bb07ad8 pdi-ce-9.1.0.0-324.zip
4.2 解压安装
cd /opt/pentaho
unzip -q pdi-ce-9.1.0.0-324.zip
解压后得到 data-integration 目录:
ls /opt/pentaho/data-integration | head -20
实测输出(节选):
ADDITIONAL-FILES
Carte.bat
carte.sh
classes
Data Integration.app
Data Service JDBC Driver
docs
drivers
Encr.bat
encr.sh
import.sh
kitchen.bat
kitchen.sh
lib
libswt
LICENSE.txt
Pan.bat
pan.sh
plugins
(其余行省略)
⚠️ 注意:解压耗时约 1–3 分钟(安装包近 1.8 GB),请耐心等待命令返回。解压后安装目录约 1.8 GB。
4.3 赋予脚本执行权限
zip 包内脚本可能不带执行位,统一补齐:
chmod +x /opt/pentaho/data-integration/*.sh
4.4 配置环境变量
写入 /etc/profile.d/pdi.sh 使全局生效(JAVA_HOME 按 java-1.8.0-openjdk 的实际安装路径,可用 readlink -f $(which java) 确认):
cat > /etc/profile.d/pdi.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0
export PENTAHO_DI_JAVA_OPTIONS="-Xms256m -Xmx512m"
export PATH=$PATH:/opt/pentaho/data-integration
EOF
source /etc/profile.d/pdi.sh
💡 说明:
PENTAHO_DI_JAVA_OPTIONS是 PDI 启动脚本读取的专用 JVM 参数变量,-Xms256m -Xmx512m将 JVM 堆限制在 256–512 MB(小内存服务器推荐值)。JVM 参数验证方法见"七、配置说明"7.3 节。
五、离线安装方案(B:内网离线导入)
适用于服务器无法访问外网的场景。
5.1 在联网机获取安装包并校验
在可联网的机器上按 4.1 节任一方式取得 pdi-ce-9.1.0.0-324.zip,并校验:
sha256sum pdi-ce-9.1.0.0-324.zip
输出应与 4.1 节的 0f3c031d...07ad8 一致。
5.2 传输到内网服务器
scp pdi-ce-9.1.0.0-324.zip root@192.168.1.10:/opt/pentaho/
💡 说明:
192.168.1.10为示例内网服务器地址,请替换为实际目标机 IP。JDK 8 同样需离线准备:在联网机dnf download --resolve java-1.8.0-openjdk下载 rpm 及其依赖,拷入内网后dnf install -y ./java-1.8.0-openjdk*.rpm安装。
5.3 解压安装与环境变量
与在线方案完全一致,逐条执行:
cd /opt/pentaho
unzip -q pdi-ce-9.1.0.0-324.zip
chmod +x /opt/pentaho/data-integration/*.sh
cat > /etc/profile.d/pdi.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0
export PENTAHO_DI_JAVA_OPTIONS="-Xms256m -Xmx512m"
export PATH=$PATH:/opt/pentaho/data-integration
EOF
source /etc/profile.d/pdi.sh
六、多方案对比与选择建议
| 维度 | 方案 A:在线下载 | 方案 B:离线导入 |
|---|---|---|
| 是否需联网 | 需(或经代理) | 不需(仅传输步骤) |
| 获取方式 | 历史官方 URL / 替代渠道直接 wget | 联网机下载后 scp 导入 |
| 版本控制 | 下载即确定(9.1.0.0-324) | 可固定唯一标准包,批量机器一致性好 |
| 适用场景 | 可直连外网的单台/少量服务器 | 内网隔离环境、批量标准化部署 |
| 优缺点 | 简单快捷,但受下载渠道变迁影响 | 稳定可控,多一次传输与校验步骤 |
选择建议:可联网且历史 URL 有效时选方案 A;内网隔离或需批量统一版本选方案 B。两种方案的最终安装结果完全一致。
七、配置说明
7.1 环境变量汇总
| 变量 | 示例值 | 作用 |
|---|---|---|
| JAVA_HOME | /usr/lib/jvm/jre-1.8.0 | 指定 PDI 使用的 JDK;启动脚本据此定位 java |
| PENTAHO_DI_JAVA_OPTIONS | -Xms256m -Xmx512m | PDI 全组件共用的 JVM 参数(堆内存等) |
| KETTLE_HOME | /opt/pentaho/kettle-home | 可选;指定 kettle.properties 等配置的根目录 |
| PATH | 追加 /opt/pentaho/data-integration | 使命令可直接以 kitchen.sh 调用 |
7.2 JVM 内存调整
堆内存通过 PENTAHO_DI_JAVA_OPTIONS 控制,修改方式二选一:
- 全局持久化:编辑
/etc/profile.d/pdi.sh(4.4 节创建),改后source或重新登录生效; - 单次运行:在命令前内联导出,仅影响本次执行:
PENTAHO_DI_JAVA_OPTIONS="-Xms256m -Xmx512m" ./kitchen.sh -file=/opt/pentaho/test_job.kjb
⚠️ 注意:小规格服务器请勿沿用默认大堆配置,256–512 MB 区间可满足常规验证与中小批量作业;
-Xmx过大可能在内存紧张的机器上触发 OOM。
7.3 JVM 参数生效验证
CLI 工具(kitchen/pan)运行结束即退出,进程级验证需在运行期抓取;以常驻的 Carte 为例:
PENTAHO_DI_JAVA_OPTIONS="-Xms256m -Xmx512m" ./carte.sh /opt/pentaho/carte-master.xml &
sleep 30
ps -ef | grep [j]ava | grep -o "Xms[0-9]*m -Xmx[0-9]*m"
实测输出:
Xms256m -Xmx512m
💡 说明:
grep [j]ava的方括号写法用于排除 grep 自身进程,是确认 JVM 参数是否生效的标准手段。
八、安装验证
8.1 确认版本
cd /opt/pentaho/data-integration
./kitchen.sh -version
实测输出:
2026/10/12 12:12:40 - Kitchen - Kettle version 9.1.0.0-324, build 9.1.0.0-324, build date : 2020-09-07 05.09.05
2026/10/12 12:12:40 - Kitchen - Start of run.
ERROR: Kitchen can't continue because the job couldn't be loaded.
⚠️ 注意:9.1 的
kitchen.sh并无真正的-version选项,版本行打印后被当作作业文件名处理,因此随后出现ERROR: ... couldn't be loaded属正常现象,版本信息已在第一行给出。同理pan.sh -version亦如此。
8.2 运行示例转换(pan.sh)
创建测试转换 /opt/pentaho/test_gen_log.ktr(RowGenerator 生成 3 行写入日志):
cat > /opt/pentaho/test_gen_log.ktr <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<transformation>
<info>
<name>gen_log_test</name>
<trans_type>Normal</trans_type>
<directory>/</directory>
<size_rowset>10000</size_rowset>
<created_user>-</created_user>
<created_date>2026/10/12 12:00:00.000</created_date>
<modified_user>-</modified_user>
<modified_date>2026/10/12 12:00:00.000</modified_date>
</info>
<order>
<hop><from>gen</from><to>log</to><enabled>Y</enabled></hop>
</order>
<notepads></notepads>
<step>
<name>gen</name>
<type>RowGenerator</type>
<distribute>Y</distribute>
<copies>1</copies>
<partitioning><method>none</method><schema_name/></partitioning>
<fields>
<field>
<name>msg</name>
<type>String</type>
<nullif>hello-kettle</nullif>
<length>-1</length>
<precision>-1</precision>
<set_empty_string>N</set_empty_string>
</field>
</fields>
<limit>3</limit>
<never_ending>N</never_ending>
<cluster_schema/>
<GUI><xloc>100</xloc><yloc>100</yloc><draw>Y</draw></GUI>
</step>
<step>
<name>log</name>
<type>WriteToLog</type>
<distribute>Y</distribute>
<copies>1</copies>
<partitioning><method>none</method><schema_name/></partitioning>
<log_level>log_level_basic</log_level>
<displayHeader>Y</displayHeader>
<limitRows>N</limitRows>
<limitRowsNumber>0</limitRowsNumber>
<logmessage>msg</logmessage>
<byname>Y</byname>
<cluster_schema/>
<GUI><xloc>300</xloc><yloc>100</yloc><draw>Y</draw></GUI>
</step>
<step_error_handling></step_error_handling>
<slave_transformation>N</slave_transformation>
<attributes/>
</transformation>
EOF
执行转换:
cd /opt/pentaho/data-integration
./pan.sh -file=/opt/pentaho/test_gen_log.ktr -level=Basic
实测输出(节选关键行):
2026/10/12 12:14:06 - log.0 - msg = hello-kettle
2026/10/12 12:14:06 - log.0 - ------------> Linenr 3------------------------------
2026/10/12 12:14:06 - log.0 - ====================
2026/10/12 12:14:06 - Finished processing (I=0, O=0, R=3, W=3, U=0, E=0)
2026/10/12 12:14:06 - Finished!
2026/10/12 12:14:06 - Start=2026/10/12 12:14:06.259, Stop=2026/10/12 12:14:06.313
2026/10/12 12:14:06 - Processing ended after 0 seconds.
2026/10/12 12:14:06 - gen_log_test - Step gen.0 ended successfully, processed 3 lines. ( - lines/s)
2026/10/12 12:14:06 - gen_log_test - Step log.0 ended successfully, processed 3 lines. ( - lines/s)
Finished! 与 R=3, W=3 表明转换读取并写出 3 行,执行成功。
8.3 运行示例作业(kitchen.sh)
创建测试作业 /opt/pentaho/test_gen_log_job.kjb(START → 调用上述转换):
cat > /opt/pentaho/test_gen_log_job.kjb <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<job>
<name>run_ktr_job</name>
<directory>/</directory>
<created_user>-</created_user>
<created_date>2026/10/12 12:00:00.000</created_date>
<modified_user>-</modified_user>
<modified_date>2026/10/12 12:00:00.000</modified_date>
<parameters></parameters>
<slaveservers></slaveservers>
<entries>
<entry>
<name>START</name>
<type>SPECIAL</type>
<start>Y</start>
<dummy>N</dummy>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<intervalSeconds>60</intervalSeconds>
<intervalMinutes>60</intervalMinutes>
<hour>12</hour>
<minutes>0</minutes>
<weekDay>1</weekDay>
<DayOfMonth>1</DayOfMonth>
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>100</xloc>
<yloc>100</yloc>
</entry>
<entry>
<name>run trans</name>
<type>TRANS</type>
<filename>/opt/pentaho/test_gen_log.ktr</filename>
<arg_from_previous>N</arg_from_previous>
<exec_local>Y</exec_local>
<exec_remote>N</exec_remote>
<clear_rows>N</clear_rows>
<wait_until_finished>Y</wait_until_finished>
<parameters><pass_all_parameters>Y</pass_all_parameters></parameters>
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>300</xloc>
<yloc>100</yloc>
</entry>
</entries>
<hops>
<hop>
<from>START</from><to>run trans</to>
<from_nr>0</from_nr><to_nr>0</to_nr><nr>0</nr>
<enabled>Y</enabled><evaluation>Y</evaluation><unconditional>N</unconditional>
</hop>
</hops>
<notepads></notepads>
</job>
EOF
执行作业:
./kitchen.sh -file=/opt/pentaho/test_gen_log_job.kjb -level=Basic
实测输出(节选关键行):
2026/10/12 12:14:30 - run_ktr_job - Start of job execution
2026/10/12 12:14:30 - run_ktr_job - Job execution finished
2026/10/12 12:14:30 - Finished!
2026/10/12 12:14:30 - Start=2026/10/12 12:14:30.058, Stop=2026/10/12 12:14:30.108
2026/10/12 12:14:30 - Processing ended after 0 seconds.
Start of job execution / Job execution finished / Finished! 三行齐全即作业执行成功,安装验证完成。
8.4 libwebkitgtk 警告说明
首次执行 CLI 命令时通常伴随如下警告:
#######################################################################
WARNING: no libwebkitgtk-1.0 detected, some features will be unavailable
Consider installing the package with apt-get or yum.
e.g. 'sudo apt-get install libwebkitgtk-1.0-0'
#######################################################################
💡 说明:该库仅影响 Spoon 图形界面中的部分预览功能,纯 CLI(kitchen/pan/carte)运行不受影响,可忽略。
九、常见问题(FAQ)
Q1:使用 JDK 11/17 时启动即报错?
现象(kitchen/pan/carte/spoon 通用):
-Djava.endorsed.dirs=/usr/lib/jvm/jre-11/jre/lib/endorsed:... is not supported. Endorsed standards and standalone APIs
in modular form will be supported via the concept of upgradeable modules.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
原因:PDI 9.1 启动脚本固定拼接非空的 -Djava.endorsed.dirs 参数,JDK 9+ 已移除对该参数的支持,直接拒绝创建 JVM。解决:安装并使用 JDK 8(见 2.2 节),确保 JAVA_HOME 指向 JDK 8 路径后重试。
Q2:kitchen.sh -version 打印版本后报 ERROR?
-version 在 9.1 中不是真实选项(见 8.1 节),版本行输出后的 ERROR: Kitchen can't continue because the job couldn't be loaded. 属预期现象,不代表安装有问题。
Q3:出现 libwebkitgtk 警告是否必须安装?
纯 CLI 使用可忽略(见 8.4 节)。若需使用 Spoon 图形界面,需另行配置桌面环境与相关图形依赖;服务器场景建议以 CLI 与 Carte 为主。
Q4:同一台机器连续运行多个 kitchen/pan,日志提示不同 Karaf Instance?
属正常现象。每次运行会在 data-integration/system/karaf/caches/ 下生成独立实例缓存(如 kitchen/data-1、data-2),Karaf 端口(8804 起)与 OSGI 端口(9053 起)自动递增避让,互不影响。
Q5:官方下载地址失效怎么办?
见 4.1 节渠道变迁说明:改用 Hitachi Vantara 官方入口、内部镜像或从可信 Docker 镜像提取安装目录重新打包,并以 4.1 节的 SHA256 校验包完整性。
Q6:作业运行中内存不足(OOM)?
降低并行度并调小/调大 PENTAHO_DI_JAVA_OPTIONS 堆参数(见 7.2 节)。排查时用 ps -ef | grep [j]ava 确认实际生效的 -Xmx 值,再结合作业步骤(如排序、大结果集聚合)评估堆需求。
十、卸载与清理
删除安装目录与配置即可,不产生系统服务残留:
rm -rf /opt/pentaho
rm -f /etc/profile.d/pdi.sh
rm -rf /root/.kettle
dnf remove -y java-1.8.0-openjdk
💡 说明:
/root/.kettle为 Kettle 运行期生成的用户配置目录(kettle.properties 等),如在其他用户下运行过,对应删除~/.kettle即可。
十一、参考链接
- 历史官方下载地址(⚠️ 已失效,仅作版本溯源):https://sourceforge.net/projects/pentaho/files/Pentaho%209.1/client-tools/pdi-ce-9.1.0.0-324.zip
- Hitachi Vantara Pentaho 产品主页:https://www.hitachivantara.com/en-us/products/data-pipeline-management-platform/pentaho-data-integration.html
- Pentaho 官方文档站:https://help.pentaho.com/Documentation/9.1
- 《Kettle 9.1 Carte 集群部署指南》——Carte 内嵌 Web 服务器与集群部署
- 《Kettle 9.1 Kitchen 与 Pan 命令详解》——作业/转换执行器全参数说明