CentOS 8 安装 Kettle 9.1 指南

在 CentOS 8 从零安装 Pentaho Data Integration 9.1:JDK 8 前置、在线下载与离线导入两种方案、环境变量与 JVM 堆配置,附 kitchen/pan 实测验证与 JDK 11 兼容排查。

KettleKettleETLJavaLinux2026/10/12

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。若无法下载,请改用以下替代方式之一,并将安装包置于内网供离线导入:

  1. Hitachi Vantara 官方网站的 Pentaho 产品页/支持门户,以官网实际提供的社区版入口为准(部分入口需注册账号);
  2. 企业内部软件镜像或留存的历史安装包;
  3. 从可信的第三方 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 -Xmx512mPDI 全组件共用的 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 即可。

十一、参考链接

  1. 历史官方下载地址(⚠️ 已失效,仅作版本溯源):https://sourceforge.net/projects/pentaho/files/Pentaho%209.1/client-tools/pdi-ce-9.1.0.0-324.zip
  2. Hitachi Vantara Pentaho 产品主页:https://www.hitachivantara.com/en-us/products/data-pipeline-management-platform/pentaho-data-integration.html
  3. Pentaho 官方文档站:https://help.pentaho.com/Documentation/9.1
  4. 《Kettle 9.1 Carte 集群部署指南》——Carte 内嵌 Web 服务器与集群部署
  5. 《Kettle 9.1 Kitchen 与 Pan 命令详解》——作业/转换执行器全参数说明