
简介本资源是一份面向1–3年经验研发人员的KettlePentaho Data Integration入门级教学PPT聚焦ETL核心流程与工具实操解决数据同步、清洗与集成中的典型落地难题。内容覆盖ETL概念本质、PDI 9.2环境安装与目录结构解析、转换Transformation与作业Job的核心差异、数据库连接配置、步骤Step与跳Hop的数据流机制、元数据定义及并行处理原理并延伸至Kafka/Avro/Parquet等现代数据源支持与调优要点。压缩包仅含1个859KB的pptx文件结构清晰图文结合每页均对应关键操作逻辑与原理图解便于边学边练。目前已有1465人学习下载适合具备MySQL或Oracle基础、希望快速掌握Kettle核心能力并应用于实际项目的数据开发人员。1. Kettle 9.2 安装不是点下一步就完事一个没配对的 JAVA_HOME 能让 Spoon 启动黑屏三分钟你手头刚下载好 PDI 9.2 的压缩包双击spoon.bat—— 窗口闪一下就没了或者卡在启动界面光标转圈十分钟不动又或者弹出「Error: Could not find or load main class org.pentaho.di.ui.spoon.Spoon」—— 这不是你电脑慢是 Kettle 9.2 对 Java 环境的“洁癖”比前几代更严了。PDI 9.2 是 Pentaho 在 Java 11 生态全面落地后的首个长期支持版本它彻底弃用 Java 8 的反射兼容层也不再兜底处理JAVA_HOME指向 JRE 或路径含空格的玄学问题。很多开发者照着老教程装完 JDK 17、解压即用结果连主界面都进不去白白浪费两小时查日志。这不是工具不行是环境没对齐。本文全程基于Windows 10/11 JDK 11.0.22LTS PDI 9.2.0.0-342实测验证覆盖从零下载、环境校准、目录理解、UI 启动到首例转换跑通的完整链路。适合工作 1–3 年、熟悉 MySQL/Oracle 基本 SQL、但没系统搭过 ETL 工具链的研发同学——你不需要懂 Hadoop 或 Kafka但得知道jdbc:mysql://localhost:3306/test是个啥。装不对后面所有「拖拽字段」「配置跳线」「调优行集缓存」全是空中楼阁。2. 下载与环境准备别急着解压先锁死 JDK 版本和系统位数Kettle 是纯 Java 应用它的启动器spoon.bat、执行器pan.sh/kitchen.bat本质都是 shell 脚本最终靠java -cp ... org.pentaho.di.ui.spoon.Spoon启动。这意味着JDK 版本错一位、位数不匹配、环境变量漏一个斜杠全盘崩。PDI 9.2 官方明确要求 JDK 11最低 11.0.12不支持 JDK 17除非打补丁更不兼容 JDK 8。而国内很多机器预装的是 JDK 17IDEA 自带或 OpenJDK 18某些国产 JDK 套件直接运行必报UnsupportedClassVersionError。2.1 下载 JDK 11.0.22LTS并验证位数提示必须用x64 位 JDK即使你的系统是 Windows 10 家庭版。PDI 9.2 的 SWT 图形库libswt\win64\swt.jar只提供 64 位原生 DLL32 位 JDK 会因UnsatisfiedLinkError: no swt-win32-4942r11 in java.library.path直接崩溃。前往 Adoptium Eclipse Temurin JDK 11 下载页 开源、免商用授权、国内镜像快选择Version:11.0.227Package type:JDK (Full)Operating system:WindowsArchitecture:x64Installer:MSI推荐自动注册环境变量或ZIP手动配置更可控下载完成后安装 MSI 或解压 ZIP 到无中文、无空格路径例如C:\dev\jdk-11.0.227验证是否成功# 打开新命令行重要确保环境变量刷新 C:\ java -version openjdk version 11.0.22 2024-04-16 OpenJDK Runtime Environment Temurin-11.0.227 (build 11.0.227) OpenJDK 64-Bit Server VM Temurin-11.0.227 (build 11.0.227, mixed mode) C:\ where java C:\dev\jdk-11.0.227\bin\java.exe✅ 输出含64-Bit且版本号为11.0.22说明到位。2.2 下载 PDI 9.2.0.0-342 正式版非 nightly官方源已迁至 Hitachi Vantara但 SourceForge 仍托管历史稳定版。务必避开pdi-ce-9.4.x或9.5.x预览版——它们依赖 JDK 17 且 UI 渲染有兼容性问题。正确路径访问 SourceForge Pentaho Files找到文件pdi-ce-9.2.0.0-342.zip大小约 820 MB发布于 2022-07-28不要下pdi-ce-9.2.0.0-342-installer.exeWindows 安装包会强行写注册表且卸载残留多违背“绿色免安装”初衷注意PDI 9.2 的pdi-ce-9.2.0.0-342.zip是唯一被 Pentaho 9.2 文档 Whats New in Pentaho 9.2 列为 GAGeneral Availability的社区版所有功能Kafka、Avro、SSL MongoDB均在此包中完整可用。2.3 解压与路径规范为什么不能放在 C:\Program Files将pdi-ce-9.2.0.0-342.zip解压到全英文、无空格、无特殊字符路径例如C:\etl\pdi-9.2❌ 错误路径C:\Program Files\Pentaho空格导致spoon.bat中%~dp0解析失败、D:\我的ETL工具中文路径触发 JVM 类加载乱码、E:\pdi 9.2空格解压后检查关键目录是否存在这是后续配置的基础C:\etl\pdi-9.2\spoon.batWindows 启动脚本C:\etl\pdi-9.2\lib\swt\win64\swt.jar64 位图形库C:\etl\pdi-9.2\plugins\steps\步骤插件根目录C:\etl\pdi-9.2\samples\transformations\官方示例血泪经验某次我图省事把 PDI 解压到C:\Users\A同学\Desktop\pdi-9.2结果spoon.bat启动时读取C:\Users\A同学\Desktop\pdi-9.2\simple-jndi\jndi.properties失败报FileNotFoundException。原因Windows 用户名含中文cmd默认编码 GBK而 PDI 内部用 UTF-8 读取路径导致A同学变成乱码A??。从此我立下规矩所有开发工具路径必须C:\dev\或C:\etl\开头。2.4 设置 JAVA_HOME 与 PATH两个变量缺一不可仅装对 JDK 不够spoon.bat脚本需要显式读取JAVA_HOME才能定位java.exe和tools.jar用于编译 JS 脚本。PATH 则确保命令行中可直接调用java。以C:\dev\jdk-11.0.227为例在 Windows 系统属性 → 高级 → 环境变量中变量名值JAVA_HOMEC:\dev\jdk-11.0.227结尾不加\binPATH新增一行%JAVA_HOME%\bin✅ 验证方式新开命令行输入echo %JAVA_HOME%→ 应输出C:\dev\jdk-11.0.227java -version→ 应输出 JDK 11.0.22javac -version→ 应输出javac 11.0.22证明tools.jar可用Kettle 的 JS 步骤需此编译注意如果之前装过其他 JDK务必删除旧JAVA_HOME和 PATH 中的旧java.exe路径避免冲突。PDI 9.2 启动时会打印Using JAVA_HOMEC:\dev\jdk-11.0.227这是最可靠的确认信号。3. 目录结构深度解析每个文件夹都是运行时的“器官”PDI 9.2 的目录不是扁平堆砌而是按运行时职责严格分层。理解它等于拿到 Kettle 的“解剖图谱”后续调参、排错、插件开发全靠这张图。下面按真实启动流程顺序拆解从spoon.bat执行开始3.1spoon.bat启动入口与 JVM 参数总控台打开C:\etl\pdi-9.2\spoon.bat你会看到核心启动命令echo off set JAVA_HOMEC:\dev\jdk-11.0.227 set PENTAHO_DI_HOMEC:\etl\pdi-9.2 set OPT-Xms512m -Xmx2048m -XX:MaxMetaspaceSize512m set OPT%OPT% -Dorg.eclipse.swt.browser.DefaultTypemozilla set OPT%OPT% -Dorg.eclipse.swt.browser.IEVersion11001 java %OPT% -cp lib\*;libswt\win64\* org.pentaho.di.ui.spoon.Spoon关键参数说明-Xms512m -Xmx2048m堆内存初始 512MB最大 2GB。小项目可降为-Xms256m -Xmx1024m大同步任务100万行建议升到-Xmx4096m-XX:MaxMetaspaceSize512m元空间上限防止动态类加载如 JS 脚本编译OOM-Dorg.eclipse.swt.browser.*强制使用 IE11 内核渲染 UIWindows解决高 DPI 屏幕模糊问题-cp lib\*;libswt\win64\*类路径包含所有lib\*.jar和libswt\win64\*.jarlibswt必须显式加入否则 UI 白屏提示spoon.bat中的set JAVA_HOME是临时覆盖优先级高于系统环境变量。生产环境建议删掉这行统一走系统JAVA_HOME避免多人协作时路径硬编码。3.2lib/与libswt/Kettle 的“血液”与“神经”lib/存放所有 Java 业务逻辑 JARkettle-core-9.2.0.0-342.jar核心引擎含StepMeta,Trans,Job类kettle-engine-9.2.0.0-342.jar转换/作业执行器Trans.execute()就在这里pentaho-commons-xul-9.2.0.0-342.jarXUL 界面框架已逐步淘汰但 9.2 仍用mysql-connector-java-8.0.28.jarMySQL 驱动注意PDI 9.2 自带 8.0.28不支持 MySQL 8.0 的 caching_sha2_password 认证需手动替换为 8.0.33libswt/win64/存放 SWT 图形库swt.jarswt-win32-4942r11.dllswt-win32-4942r11.dll是 JNI 调用的 Win32 原生库必须与 JDK 位数一致。若用 32 位 JDK此处应为win32/目录但 PDI 9.2 官方未提供故必须用 64 位 JDK。3.3plugins/Kettle 的“可插拔器官”PDI 9.2 的插件体系是模块化设计的典范。每个插件是一个独立目录含plugin.xml描述元信息。关键插件目录目录功能是否默认启用plugins/steps/所有转换步骤CSV 输入、表输入、JavaScript 代码等✅ 是plugins/jobs/所有作业项发送邮件、执行 Shell、检查文件存在等✅ 是plugins/databases/数据库连接驱动Oracle、PostgreSQL、SQL Server✅ 是但 Oracle 需额外放ojdbc8.jarplugins/engines/执行引擎如 Spark 引擎9.2 社区版未启用❌ 否plugins/pur/Pentaho Repository 插件企业版功能❌ 社区版无实战技巧想禁用某个步骤如避免误用危险的Execute SQL Script直接重命名其目录例如plugins/steps/ExecuteSqlScript/→plugins/steps/ExecuteSqlScript.DISABLED重启 Spoon 即消失。3.4simple-jndi/与system/连接池与系统配置中枢simple-jndi/jndi.properties轻量级 JNDI 实现用于配置数据库连接池。PDI 9.2 默认不启用但当你在转换中勾选「Use JNDI」时它会读取此文件。典型配置java.naming.factory.initialorg.osjava.sjd.SimpleContextFactory # 定义名为 MyPool 的连接池 datasources.MyPoolorg.apache.commons.dbcp2.BasicDataSource datasources.MyPool.driverClassNamecom.mysql.cj.jdbc.Driver datasources.MyPool.urljdbc:mysql://localhost:3306/test?useSSLfalseserverTimezoneUTC datasources.MyPool.usernameroot datasources.MyPool.password123456 datasources.MyPool.maxTotal20system/kettle.properties全局配置文件控制 Kettle 行为。9.2 新增关键参数# 启用 Kafka 支持默认 false kettle.kafka.enabledtrue # Avro Schema 缓存路径避免每次解析耗时 kettle.avro.schema.cache.dirC:/etl/pdi-9.2/cache/avro # 日志级别DEBUG 会刷屏生产用 INFO org.pentaho.di.core.ConstINFO注意kettle.properties修改后需重启 Spoon 才生效。simple-jndi配置错误会导致「JNDI lookup failed」但不影响普通 JDBC 连接。4. 启动 Spoon 与首例转换从黑屏到 CSV→Excel 的 5 分钟闭环现在所有前置条件已满足JDK 11.0.22 x64 就位、JAVA_HOME正确、PDI 解压路径干净、spoon.bat未被魔改。是时候见证第一缕 UI 光芒了。4.1 双击spoon.bat启动看懂启动日志里的“心跳信号”不要急着点图标打开命令行cd C:\etl\pdi-9.2然后执行spoon.bat你会看到滚动日志紧盯以下三行它们是健康启动的黄金三角INFO [Spoon] Starting Spoon... INFO [Spoon] Using JAVA_HOMEC:\dev\jdk-11.0.227 INFO [Spoon] Loading plugins... INFO [Spoon] Spoon has detected a high DPI display. Enabling scaling... INFO [Spoon] Spoon is ready!✅ 出现Spoon is ready!且窗口完全渲染菜单栏、工具栏、画布可见说明成功。❌ 若卡在Loading plugins...超过 30 秒大概率是libswt位数不匹配或JAVA_HOME指向了 JRE若报No X11 DISPLAY variable was set说明你在 WSL 里执行了spoon.shWindows 下必须用.bat。提示首次启动会生成C:\etl\pdi-9.2\.kettle\目录存放用户配置kettle.pwd,shared.xml。切勿删除此目录否则下次启动要重新配置数据库连接。4.2 创建第一个转换CSV 输入 → 字段过滤 → Excel 输出目标将C:\etl\data\input.csv内容为id,name,age三列清洗后导出为C:\etl\data\output.xlsx。步骤 1新建转换File → New → Transformation画布清空左侧「核心对象」面板展开「输入」→ 拖拽「CSV 文件输入」到画布双击该步骤配置文件→C:\etl\data\input.csv确保文件存在首行是标题内容→ 勾选「首行包含字段名称」、「分隔符逗号」字段→ 点击「获取字段」自动识别id(Integer),name(String),age(Integer)步骤 2添加「过滤记录」步骤数据清洗从「流程」拖拽「过滤记录」到画布连线CSV 输出跳 → 过滤记录输入跳双击「过滤记录」设置过滤条件→age 18 AND name ! 过滤掉未成年人和空姓名接收 true 的跳→ 命名为adults接收 false 的跳→ 命名为others可选用于调试步骤 3添加「Excel 输出」步骤目标落地从「输出」拖拽「Excel 输出」到画布连线adults跳 → Excel 输入跳双击配置文件→C:\etl\data\output.xlsx内容→ 勾选「创建新工作簿」、「首行写入字段名称」字段→ 点击「获取字段」自动继承上游字段步骤 4运行与验证点击工具栏绿色三角 ▶️或CtrlR观察底部「执行结果」面板2024/05/20 10:30:15 - CSV 文件输入.0 - Finished processing (I1000, O0, R0, W1000, U0, E0) 2024/05/20 10:30:15 - 过滤记录.0 - Finished processing (I1000, O0, R0, W820, U0, E0) 2024/05/20 10:30:15 - Excel 输出.0 - Finished processing (I820, O0, R0, W820, U0, E0)✅W820表示写入 820 行与I1000输入和过滤条件吻合说明逻辑正确。✅ 打开output.xlsx确认有 820 行数据且age列全部 18。关键洞察日志中的I(Input),O(Output),R(Read),W(Write),U(Updated),E(Errors) 是 Kettle 的核心性能指标。W0且E0说明步骤失败IW但业务逻辑不符说明过滤条件写错如用了而非。4.3 调试技巧如何快速定位「数据流断在哪」当转换不按预期运行如 Excel 为空、过滤没生效别盲目重做。用这三招秒级定位启用「步进」模式Step Through右键任一步骤 → 「步进」Kettle 会暂停在该步骤显示当前输入行鼠标悬停字段可看值逐行验证逻辑。查看「日志」而非「执行结果」点击底部「日志」标签页筛选关键词ERROR或WARNING。常见如Unable to parse date 2024-01-01提示日期格式不匹配。插入「检测记录」步骤在可疑跳线上右键 → 「插入检测记录」它会把流经的数据实时打印到日志无需修改逻辑。血泪经验某次我导出 Excel 总是空日志显示W0。插入「检测记录」后发现CSV 文件输入步骤的「分隔符」被误设为;分号而文件是逗号分隔。改回,立刻解决。这种低级错误90% 的新手都踩过。5. 常见问题排查那些让 Spoon 启动失败、转换卡死的 5 个真实坑Kettle 9.2 的报错信息往往藏在日志深处表面现象相似根因却天差地别。以下是我在部署 12 个 ETL 项目中高频遇到且必须立刻处理的 5 个坑按「现象 → 原因 → 解决」结构给出可立即执行的方案。5.1 现象双击spoon.bat无反应或命令行闪退日志无任何输出原因spoon.bat第一行echo off隐藏了错误实际是JAVA_HOME未设置或指向了不存在的路径导致java命令根本未执行。解决用记事本打开spoon.bat删掉第一行echo off保存后再次运行此时会清晰看到错误The system cannot find the path specified.JAVA_HOME路径错java is not recognized as an internal or external commandPATH未包含%JAVA_HOME%\bin按 2.4 节重新配置环境变量重启命令行。5.2 现象Spoon 启动后 UI 卡死鼠标可移动但菜单点击无响应CPU 占用 100%原因Windows 高 DPI 缩放如 125%、150%与 SWT 4942r11 的兼容问题导致 UI 线程死锁。解决右键spoon.bat→ 「属性」→ 「兼容性」→ 「更改高 DPI 设置」勾选「替代高 DPI 缩放行为」→ 下拉选「应用程序」同时在spoon.bat的java命令前添加 JVM 参数set OPT%OPT% -Dsun.java2d.dpiawarefalse set OPT%OPT% -Dprism.allowhidpifalse这两参数强制禁用 Java 2D 和 Prism 的 DPI 感知牺牲一点清晰度换稳定性5.3 现象转换运行时报java.lang.NoClassDefFoundError: org/apache/commons/collections4/MapIterator原因PDI 9.2 依赖commons-collections4-4.4.jar但该 JAR 在lib/目录中被意外删除或损坏常见于手动清理lib/时误删。解决前往 Maven Repository commons-collections4 下载commons-collections4-4.4.jar放入C:\etl\pdi-9.2\lib\目录重启 SpoonJAR 加载是启动时一次性完成的不重启无效5.4 现象连接 MySQL 8.0 时报Could not create connection to database server. Attempted reconnect 3 times. Giving up.日志含caching_sha2_password原因PDI 9.2 自带的mysql-connector-java-8.0.28.jar不支持 MySQL 8.0.4 默认的caching_sha2_password认证插件。解决下载 mysql-connector-java-8.0.33.jar 支持caching_sha2_password替换C:\etl\pdi-9.2\lib\mysql-connector-java-8.0.28.jar为新 JAR重命名旧 JAR 备份勿直接删除在数据库连接配置中JDBC URL 末尾追加?serverTimezoneUTCallowPublicKeyRetrievaltrueuseSSLfalseallowPublicKeyRetrievaltrue是 8.0.33 连接caching_sha2_password的必需参数5.5 现象转换中使用「JavaScript 代码」步骤报javax.script.ScriptException: TypeError: Cannot call method replace of null原因JS 步骤中访问了null字段而 Kettle 的 JavaScript 引擎GraalVM JS对null的容忍度低于老版 Nashorn。解决在 JS 代码开头添加空值防护// 错误写法会崩 var new_name name.replace(/ /g, _); // 正确写法加空值判断 var new_name (name null || name ) ? : name.replace(/ /g, _);或在「字段」选项卡中为name字段设置「默认值」为空字符串确保上游传来的永远不是null。注意以上 5 条每一条都来自真实翻车现场。第 3 条NoClassDefFoundError曾让我花 4 小时逐个比对lib/目录的 JAR MD5第 4 条MySQL 认证是 2023 年后新装 MySQL 8.0 的标配坑。记住Kettle 的报错不是 bug是环境在对你喊话。6. 验证转换是否真正跑通不止看日志 Wxxx还要盯住这 3 个隐藏指标装完、启了、跑了一次转换就以为万事大吉错。ETL 工具的价值不在“能跑”而在“稳跑”“准跑”“快跑”。PDI 9.2 提供了远超日志数字的深度验证能力我把它总结为三个必须检查的隐藏指标——它们不写在文档里但决定了你写的转换能否上生产。6.1 指标一行集RowSet缓存的实际占用与溢出次数Kettle 的并发模型依赖「行集」——步骤间的数据缓存队列。默认大小是 50000 行但如果你的转换中某跳如「表输入」→「JavaScript」处理极慢行集会迅速填满导致上游步骤阻塞Writing paused整体吞吐暴跌。如何验证运行转换时点击顶部菜单「视图」→ 「显示行集监控」在底部面板中找到你关心的跳线如CSV文件输入.0→过滤记录.0观察两列Current Size当前缓存行数理想值 10000Overflow Count溢出次数必须为 00 表示缓存不够数据在排队调优动作若Overflow Count 0右键该跳线 → 「编辑跳线」→ 「高级」→ 将「行集大小」从50000降至10000减小内存占用或升至100000缓解阻塞但吃内存更治本的方法优化下游步骤如 JS 代码加索引、SQL 加 WHERE 条件减少单行处理时间。从那以后我每次写完转换必开「行集监控」跑一次 10 万行测试数据盯着Overflow Count归零才提交。这习惯救了我三次上线事故——有一次Overflow Count12上线后同步延迟从 2 分钟飙到 47 分钟。6.2 指标二数据库连接的实际复用率Connection Reuse RateKettle 默认对每个「表输入」或「表输出」步骤单独建连接频繁开关连接是性能杀手。PDI 9.2 支持连接池复用但需手动开启。如何验证在数据库连接配置对话框中勾选「使用连接池」运行转换打开「视图」→ 「显示数据库连接监控」查看「Active Connections」列表同一数据库应只出现1 个连接而非每个步骤一个关键指标「Reuse Count」列数值越高越好如120表示该连接被复用了 120 次调优动作若「Reuse Count」始终为1说明连接池未生效。检查数据库连接的「连接池」选项卡中「最大连接数」是否 ≥ 2所有使用该连接的步骤「连接名称」是否完全一致区分大小写对高并发作业将「最大连接数」设为10避免连接耗尽。6.3 指标三转换的「实际内存消耗」与 GC 频率Kettle 是内存敏感型应用。-Xmx2048m是底线但若你的转换含大量Group By或Sort RowsGC 频繁会拖垮性能。如何验证启动spoon.bat时添加 JVM 参数set OPT%OPT% -XX:PrintGCDetails -XX:PrintGCTimeStamps -Xloggc:C:/etl/pdi-9.2/logs/gc.log运行转换后打开C:/etl/pdi-9.2/logs/gc.log搜索GC pause单次 GC 停顿时间500ms 需警惕PS Young Generation年轻代回收频率每秒 1 次说明对象创建过快PS Old Generation老年代占用率持续 70% 说明内存泄漏风险调优动作若PS Old Generation占用率高检查转换中是否滥用「记忆所有行」步骤如Unique rows (hash set)改用「Unique rows排序去重」降低内存压力对大数据量将Sort Rows步骤的「临时文件目录」指向 SSD 路径如D:\temp\sort避免磁盘 IO 成瓶颈希望帮到你。本文还有配套的精品资源点击获取