简介:本资源是一份面向1–3年经验研发人员的Kettle(Pentaho 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.22(LTS)+ 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 17(IDEA 自带)或 OpenJDK 18(某些国产 JDK 套件),直接运行必报UnsupportedClassVersionError。
2.1 下载 JDK 11.0.22(LTS)并验证位数
提示:必须用x64 位 JDK,即使你的系统是 Windows 10 家庭版。PDI 9.2 的 SWT 图形库(
libswt\win64\swt.jar)只提供 64 位原生 DLL,32 位 JDK 会因UnsatisfiedLinkError: no swt-win32-4942r11 in java.library.path直接崩溃。
前往 Adoptium Eclipse Temurin JDK 11 下载页 (开源、免商用授权、国内镜像快),选择:
- Version:
11.0.22+7 - Package type:
JDK (Full) - Operating system:
Windows - Architecture:
x64 - Installer:
MSI(推荐,自动注册环境变量)或ZIP(手动配置,更可控)
下载完成后,安装 MSI 或解压 ZIP 到无中文、无空格路径,例如:C:\dev\jdk-11.0.22+7
验证是否成功:
# 打开新命令行(重要!确保环境变量刷新) C:\> java -version openjdk version "11.0.22" 2024-04-16 OpenJDK Runtime Environment Temurin-11.0.22+7 (build 11.0.22+7) OpenJDK 64-Bit Server VM Temurin-11.0.22+7 (build 11.0.22+7, mixed mode) C:\> where java C:\dev\jdk-11.0.22+7\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.exe(Windows 安装包,会强行写注册表且卸载残留多,违背“绿色免安装”初衷)
注意:PDI 9.2 的
pdi-ce-9.2.0.0-342.zip是唯一被 Pentaho 9.2 文档( What's New in Pentaho 9.2 )列为 GA(General 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.bat(Windows 启动脚本)C:\etl\pdi-9.2\lib\swt\win64\swt.jar(64 位图形库)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.22+7为例,在 Windows 系统属性 → 高级 → 环境变量中:
| 变量名 | 值 |
|---|---|
JAVA_HOME | C:\dev\jdk-11.0.22+7(结尾不加\bin) |
PATH | 新增一行:%JAVA_HOME%\bin |
✅ 验证方式:新开命令行,输入
echo %JAVA_HOME%→ 应输出C:\dev\jdk-11.0.22+7java -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_HOME=C:\dev\jdk-11.0.22+7,这是最可靠的确认信号。
3. 目录结构深度解析:每个文件夹都是运行时的“器官”
PDI 9.2 的目录不是扁平堆砌,而是按运行时职责严格分层。理解它,等于拿到 Kettle 的“解剖图谱”,后续调参、排错、插件开发全靠这张图。下面按真实启动流程顺序拆解(从spoon.bat执行开始):
3.1spoon.bat:启动入口与 JVM 参数总控台
打开C:\etl\pdi-9.2\spoon.bat,你会看到核心启动命令:
@echo off set JAVA_HOME=C:\dev\jdk-11.0.22+7 set PENTAHO_DI_HOME=C:\etl\pdi-9.2 set OPT="-Xms512m -Xmx2048m -XX:MaxMetaspaceSize=512m" set OPT=%OPT% "-Dorg.eclipse.swt.browser.DefaultType=mozilla" set OPT=%OPT% "-Dorg.eclipse.swt.browser.IEVersion=11001" java %OPT% -cp "lib\*;libswt\win64\*" org.pentaho.di.ui.spoon.Spoon关键参数说明:
-Xms512m -Xmx2048m:堆内存初始 512MB,最大 2GB。小项目可降为-Xms256m -Xmx1024m,大同步任务(>100万行)建议升到-Xmx4096m-XX:MaxMetaspaceSize=512m:元空间上限,防止动态类加载(如 JS 脚本编译)OOM-Dorg.eclipse.swt.browser.*:强制使用 IE11 内核渲染 UI(Windows),解决高 DPI 屏幕模糊问题-cp "lib\*;libswt\win64\*":类路径包含所有lib\*.jar和libswt\win64\*.jar,libswt必须显式加入,否则 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.jar:XUL 界面框架(已逐步淘汰,但 9.2 仍用)mysql-connector-java-8.0.28.jar:MySQL 驱动(注意:PDI 9.2 自带 8.0.28,不支持 MySQL 8.0+ 的 caching_sha2_password 认证,需手动替换为 8.0.33+)
libswt/win64/:存放 SWT 图形库(swt.jar+swt-win32-4942r11.dll)swt-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.jar) |
plugins/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.initial=org.osjava.sjd.SimpleContextFactory # 定义名为 MyPool 的连接池 datasources.MyPool=org.apache.commons.dbcp2.BasicDataSource datasources.MyPool.driverClassName=com.mysql.cj.jdbc.Driver datasources.MyPool.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC datasources.MyPool.username=root datasources.MyPool.password=123456 datasources.MyPool.maxTotal=20system/kettle.properties:全局配置文件,控制 Kettle 行为。9.2 新增关键参数:# 启用 Kafka 支持(默认 false) kettle.kafka.enabled=true # Avro Schema 缓存路径(避免每次解析耗时) kettle.avro.schema.cache.dir=C:/etl/pdi-9.2/cache/avro # 日志级别(DEBUG 会刷屏,生产用 INFO) org.pentaho.di.core.Const=INFO
注意:
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_HOME=C:\dev\jdk-11.0.22+7 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.sh(Windows 下必须用.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:运行与验证
- 点击工具栏绿色三角 ▶️(或
Ctrl+R) - 观察底部「执行结果」面板:
✅2024/05/20 10:30:15 - CSV 文件输入.0 - Finished processing (I=1000, O=0, R=0, W=1000, U=0, E=0) 2024/05/20 10:30:15 - 过滤记录.0 - Finished processing (I=1000, O=0, R=0, W=820, U=0, E=0) 2024/05/20 10:30:15 - Excel 输出.0 - Finished processing (I=820, O=0, R=0, W=820, U=0, E=0)W=820表示写入 820 行,与I=1000(输入)和过滤条件吻合,说明逻辑正确。
✅ 打开output.xlsx,确认有 820 行数据,且age列全部 >18。
关键洞察:日志中的
I(Input),O(Output),R(Read),W(Write),U(Updated),E(Errors) 是 Kettle 的核心性能指标。W=0且E>0说明步骤失败;I=W但业务逻辑不符,说明过滤条件写错(如用了=而非==)。
4.3 调试技巧:如何快速定位「数据流断在哪」?
当转换不按预期运行(如 Excel 为空、过滤没生效),别盲目重做。用这三招秒级定位:
- 启用「步进」模式(Step Through):右键任一步骤 → 「步进」,Kettle 会暂停在该步骤,显示当前输入行(鼠标悬停字段可看值),逐行验证逻辑。
- 查看「日志」而非「执行结果」:点击底部「日志」标签页,筛选关键词
ERROR或WARNING。常见如Unable to parse date '2024-01-01',提示日期格式不匹配。 - 插入「检测记录」步骤:在可疑跳线上右键 → 「插入检测记录」,它会把流经的数据实时打印到日志,无需修改逻辑。
血泪经验:某次我导出 Excel 总是空,日志显示
W=0。插入「检测记录」后发现,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 command(PATH未包含%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 参数:
(这两参数强制禁用 Java 2D 和 Prism 的 DPI 感知,牺牲一点清晰度换稳定性)set OPT=%OPT% "-Dsun.java2d.dpiaware=false" set OPT=%OPT% "-Dprism.allowhidpi=false"
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\目录 - 重启 Spoon(JAR 加载是启动时一次性完成的,不重启无效)
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 末尾追加:
?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
(allowPublicKeyRetrieval=true是 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. 验证转换是否真正跑通:不止看日志 W=xxx,还要盯住这 3 个隐藏指标
装完、启了、跑了一次转换,就以为万事大吉?错。ETL 工具的价值不在“能跑”,而在“稳跑”“准跑”“快跑”。PDI 9.2 提供了远超日志数字的深度验证能力,我把它总结为三个必须检查的隐藏指标——它们不写在文档里,但决定了你写的转换能否上生产。
6.1 指标一:行集(RowSet)缓存的实际占用与溢出次数
Kettle 的并发模型依赖「行集」——步骤间的数据缓存队列。默认大小是 50000 行,但如果你的转换中某跳(如「表输入」→「JavaScript」)处理极慢,行集会迅速填满,导致上游步骤阻塞(Writing paused),整体吞吐暴跌。
如何验证:
- 运行转换时,点击顶部菜单「视图」→ 「显示行集监控」
- 在底部面板中,找到你关心的跳线(如
CSV文件输入.0→过滤记录.0) - 观察两列:
- Current Size:当前缓存行数(理想值 < 10000)
- Overflow Count:溢出次数(必须为 0,>0 表示缓存不够,数据在排队)
调优动作:
- 若
Overflow Count > 0,右键该跳线 → 「编辑跳线」→ 「高级」→ 将「行集大小」从50000降至10000(减小内存占用)或升至100000(缓解阻塞,但吃内存) - 更治本的方法:优化下游步骤(如 JS 代码加索引、SQL 加 WHERE 条件),减少单行处理时间。
从那以后我每次写完转换,必开「行集监控」跑一次 10 万行测试数据,盯着
Overflow Count归零才提交。这习惯救了我三次上线事故——有一次Overflow Count=12,上线后同步延迟从 2 分钟飙到 47 分钟。
6.2 指标二:数据库连接的实际复用率(Connection Reuse Rate)
Kettle 默认对每个「表输入」或「表输出」步骤单独建连接,频繁开关连接是性能杀手。PDI 9.2 支持连接池复用,但需手动开启。
如何验证:
- 在数据库连接配置对话框中,勾选「使用连接池」
- 运行转换,打开「视图」→ 「显示数据库连接监控」
- 查看「Active Connections」列表,同一数据库应只出现1 个连接(而非每个步骤一个)
- 关键指标:「Reuse Count」列,数值越高越好(如
120表示该连接被复用了 120 次)
调优动作:
- 若「Reuse Count」始终为
1,说明连接池未生效。检查:- 数据库连接的「连接池」选项卡中,「最大连接数」是否 ≥ 2
- 所有使用该连接的步骤,「连接名称」是否完全一致(区分大小写)
- 对高并发作业,将「最大连接数」设为
10,避免连接耗尽。
6.3 指标三:转换的「实际内存消耗」与 GC 频率
Kettle 是内存敏感型应用。-Xmx2048m是底线,但若你的转换含大量Group By或Sort Rows,GC 频繁会拖垮性能。
如何验证:
- 启动
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 成瓶颈
希望帮到你。
本文还有配套的精品资源,点击获取