ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PDI 7.1社区版部署实战:从安装到跑通ETL任务全记录

PDI 7.1社区版部署实战:从安装到跑通ETL任务全记录 简介这是Pentaho Data Integration简称PDI又称Kettle社区版7.1.0.0-12的完整安装压缩包属于2018年发布的7.1分支面向数据集成工程师、ETL开发者和运维人员用于解决跨数据库、文件、接口等多源数据的抽取、清洗、转换与加载难题。压缩包共1928个文件整体约862MB文件类型以1302个jar库文件为主另有200个ktr转换脚本、19个kjb作业脚本、99个xml配置和71个cfg参数文件并包含bat/sh启动脚本、properties属性文件、png图标、txt说明文档等目录结构清晰可支撑从开发调试到生产调度的完整运行环境。已有3426人学习下载是CSDN上较受欢迎的Kettle资源之一。解压后可直接使用Spoon图形化设计器完成数据流、数据库表、脚本组件等转换与作业开发通过Pan与Kitchen命令行工具可实现批量执行和定时调度借助Carte组件还能构建分布式执行集群。包内附带大量示例、插件和文档适合快速上手Kettle、系统学习ETL流程或进行二次开发的用户。 从文件名到跑通任务我折腾 PDI 7.1 社区版的完整记录从文件名到跑通任务我折腾 PDI 7.1 社区版的那几天pdi_ce7.1.0.0-12.zip这个文件老 ETL 工程师看一眼就知道是 Pentaho Data Integration也就是大家常说的 Kettle7.1 的社区版安装包。CE 是 Community Edition 的缩写7.1.0.0-12 是具体的版本号最后面的 12 代表补丁级别。这东西在数据迁移、数据仓库建设、日常报表数据抽取场景里太常见了基本是 Java 技术栈团队做数据集成时会优先考虑的开源方案。这篇文章不打算给你念官方文档而是从一个实际部署者的角度把这个 zip 包从下载到跑通第一个转换任务的完整过程、我踩过的坑、以及一些文档里不会写的经验全部梳理出来。如果你正准备在一台新机器上部署 PDI或者已经被这个包折腾得够呛这篇内容应该能帮你省下不少时间。无论你是刚接触 ETL 的数据新人还是要负责搭建数据同步任务的开发后面写的东西都值得看完。1. 这个压缩包到底是什么文件结构与版本选择逻辑1.1 CE 和 EE 的本质区别以及为什么选社区版很多人拿到pdi_ce7.1.0.0-12.zip会纠结一个问题为什么是 CE不是 EEPentaho 同年还有个商业版Enterprise Edition功能上多了调度中心、可视化监控、元数据管理这些企业级能力但那是要收费的。社区版则是完全开源免费的核心的 ETL 能力——也就是 Spoon 设计器、Pan 执行转换、Kitchen 执行作业——一样都不少。我个人判断对大部分中小团队来说CE 版完全够用。ETL 的本质是把数据从 A 点搬到 B 点中间做清洗、转换、校验这些核心场景社区版都覆盖了。企业版强在管理和运维层面比如任务调度的可视化编排、集群监控但这些完全可以用 Jenkins、Airflow 之类的工具替代甚至直接写 crontab 也行。选社区版不是妥协是务实。需要注意的一点是PDI 7.1 是 2017 年左右发布的版本它的依赖栈比较老后面我会专门讲 JDK 版本的问题。这也是为什么大家在部署的时候经常会遇到各种兼容性报错很多坑其实都是版本错配引起的。1.2 解压后的目录结构哪些文件才是核心把这个 zip 包解压后你会得到一个>java -version如果输出里有1.8.x说明是 JDK 8。如果是11.x、17.x这种就需要先卸载或者安装新的 JDK。另外一定要保证JAVA_HOME环境变量指向 JDK 8 的安装目录PDI 启动脚本会直接读取这个变量来找 Java 运行时。2.2 环境变量配置的两种方式避免启动即失败环境变量配置有系统级和脚本级两种方式。系统级就是常规做法在/etc/profile或~/.bashrc里加export JAVA_HOME/usr/local/java/jdk1.8.0_202 export PATH$JAVA_HOME/bin:$PATH然后source ~/.bashrc让配置生效。但如果你所处的环境不允许修改系统配置比如在公司的公共服务器上你可以在启动脚本里临时指定。修改spoon.sh的顶部加一行export JAVA_HOME/你的JDK8路径这样只对 PDI 生效不影响系统其他程序是比较稳妥的方案。我实际操作中更推荐这种方式因为服务器上同时存在 JDK 8 和 JDK 17 是很常见的情况直接把变量写进脚本里能避免影响其他依赖高版本 JDK 的应用。3. 安装与启动全流程从解压到跑通第一个转换3.1 解压操作与路径选择中文目录名的巨坑拿到pdi_ce7.1.0.0-12.zip之后第一步肯定是解压。Linux 上执行unzip pdi_ce7.1.0.0-12.zip -d /opt/pdi/Windows 上直接右键解压就行。但这里有一个我踩过最深的坑安装路径绝对不能包含中文和空格。PDI 的脚本在处理带中文的路径时会出现编码问题导致启动后无法正常加载资源库或者连接数据库。我身边有个同事把 PDI 放在D:\数据工具\下面结果 Spoon 打开后连 MySQL 一直报连接失败最后把目录改成D:\pdi\就好了。这种问题很隐蔽因为它不是在启动时报错而是在后续使用中莫名其妙出现各种异常。解压完成后建议先检查目录权限。Linux 环境下直接启动脚本可能会遇到权限不足的问题chmod x /opt/pdi/data-integration/*.sh然后就可以尝试启动了。在图形化环境里运行./spoon.sh如果是纯服务器环境可以用./pan.sh或./kitchen.sh跑命令行任务。3.2 Spoon、Pan、Kitchen 分别该怎么用很多新手会把这三个工具搞混我在这里用最简单的方式说明一下Spoon图形化界面用于设计转换和作业。它是你写 ETL 逻辑的主战场像搭积木一样把不同步骤连起来。Pan命令行工具专门执行转换文件.ktr。适合在服务器上批量跑数据抽取任务。Kitchen命令行工具专门执行作业文件.kjb。作业可以包含多个转换、条件判断、邮件通知、文件操作等。举个实际例子你在 Spoon 里做好了一个从 MySQL 抽数据到 Oracle 的转换保存为sync.ktr。在服务器上你可以这样定时执行/opt/pdi/data-integration/pan.sh -file/home/etl/jobs/sync.ktr -levelBasic-levelBasic是日志级别只记录关键信息。如果需要更详细的日志排查问题可以改成-levelDebug。这个参数在后面的问题排查中非常有用。3.3 第一个转换的完整实现读取 CSV 输出到 Excel跑通安装验证的最好方法就是做一个小而完整的转换。我建议从 CSV 输入到 Excel 输出开始因为不涉及数据库驱动配置失败概率最低。在 Spoon 里新建一个转换左侧面板搜索CSV 文件输入拖到画布上。双击配置选择你的 CSV 文件点击获取字段按钮PDI 会自动识别文件中的列名和数据类型。再搜索Excel 输出拖到画布上用一条 Hop 把两个步骤连起来。配置 Excel 输出的文件路径和文件名直接点击运行按钮。如果一切顺利你会在本地看到生成的 Excel 文件。这个转换看起来简单但它验证了安装、路径、文件读写能力基本的 ETL 流程也跑通了。之后不管是接数据库还是调接口都是在这些基础步骤上扩展。4. 实际问题排查那些让你怀疑人生的报错与解决方案4.1 常见异常速查表覆盖 80% 的部署问题我把实际使用中经常遇到的问题整理成了一张表读者可以对照自己的报错信息快速定位报错信息或现象根本原因解决方案could not find EOCD或提示 zip 损坏压缩包下载不完整或损坏重新下载并用sha256sum校验文件哈希Unsupported major.minor version 52.0JDK 版本低于 8升级到 JDK 8不要用 7 或更低版本ClassNotFoundException: org.pentaho...JDK 版本过高或依赖缺失确认使用 JDK 8检查lib目录完整性启动 Spoon 后无响应内存不足或 JVM 参数不合适修改spoon.sh中的PENTAHO_DI_JAVA_OPTIONS增大-Xmx连接 MySQL 报Access denied驱动版本不匹配或账号权限问题下载对应版本的 mysql-connector-java 放入lib目录界面中文乱码编码设置问题在spoon.sh中添加-Dfile.encodingUTF-8这里我特别想展开说的是 EOCD 问题。热搜里排得挺前的导入失败 caused by: invalid zip archive: could not find eocd本质上是压缩包文件不完整。但很多情况下不是下载工具的问题而是服务器网络中断导致文件没拉全。所以我会建议下载后立刻校验md5sum pdi_ce7.1.0.0-12.zip然后和官方提供的 MD5 哈希做比对。这一步很多人会忽略但往往能帮你第一时间排除掉文件本身有问题这个最简单的原因避免后续瞎折腾。4.2 内存参数调整避免大任务直接崩溃PDI 默认的 JVM 内存配置比较保守处理几十万行数据可能没问题但数据量到百万级以上转换跑着跑着就可能报OutOfMemoryError。这种情况不是程序 bug是启动参数需要调整。编辑spoon.sh找到PENTAHO_DI_JAVA_OPTIONS这一行默认值是-Xmx2048m -XX:MaxPermSize256m建议改成-Xmx4096m -XX:MaxPermSize512m -Xss2m如果你处理的是非常大批量的数据可以考虑调整转换里的提交记录数设置Rows in rowset默认 10000 条可以适当调大比如 50000。这能减少频繁的批处理切换提升整体执行效率。我首次用 PDI 从业务库抽取一张 5000 万行的表时就是因为没调 JVM 参数跑了 40 分钟直接内存溢出。后来把内存调大并在数据库端做了分页抽取才顺利解决。这里也给个经验数据量大时优先做增量抽取或分页抽取而不是一次性全量 Load。4.3 数据库驱动版本一个最容易忽略的兼容性问题连接 MySQL 和 Oracle 这类数据库时驱动 jar 包装在lib目录下才会生效。PDI 7.1 自带的 MySQL 驱动只有 5.x 版本如果你连的是 MySQL 8.0会直接报Public Key Retrieval is not allowed或者认证方式相关错误。解决办法是下载 mysql-connector-java 8.x 版本把旧的 mysql-connector-java-5.x.jar 删掉将 8.x 版本放入lib目录后重启 Spoon。另外Oracle 驱动要特别注意版本和 JDK 的兼容性Oracle 11g 对应 ojdbc6Oracle 12c 以上用 ojdbc8。这个问题的隐蔽性在于错误信息表面上看是认证失败或连接超时实际是驱动与数据库版本不匹配。所以遇到数据库连接问题先检查驱动再检查网络和账号顺序别搞反。5. 部署中的实际经验与实用建议5.1 日志级别的选择影响你排查问题的速度PDI 命令行执行时日志级别有Error、Nothing、Minimal、Basic、Detailed、Debug、Rowlevel七种。默认是Basic它只记录执行步骤和错误。如果排查问题Debug级别能看到 SQL 语句和字段映射细节。但Rowlevel慎用那个会打印每一行数据数据量大时日志文件可以跑到几个 GB机器直接卡死。我的习惯是正常跑批用Basic出问题先看日志尾部再用Debug定位具体步骤最后才考虑Rowlevel。日志输出到文件可以这样/opt/pdi/data-integration/pan.sh -file/home/etl/jobs/sync.ktr -levelDetailed -logfile/home/etl/logs/sync.log-logfile参数可以指定日志文件路径避免日志刷屏同时保留可供事后分析的完整记录。5.2 定时任务的正确姿势让 Kitchen 在服务器上稳定运行日常开发中把作业放到服务器上定时执行是最常见的需求。我不建议直接在 Spoon 打开的窗口里挂着跑因为 GUI 一关任务就断了。正确做法是用 Kitchen 在无图形环境下执行。假设你有一个作业文件dw_daily.kjbcrontab 配置如下0 2 * * * /opt/pdi/data-integration/kitchen.sh -file/home/etl/jobs/dw_daily.kjb -levelBasic /home/etl/logs/dw_daily.log 21这个配置表示每天凌晨 2 点执行作业。这里有个细节PDI 的工作目录问题。在 crontab 中执行时工作目录默认是用户主目录而你的作业里如果用了相对路径读取文件就会因为找不到文件而失败。解决方案有两种要么所有路径都写绝对路径要么在脚本开头先cd /opt/pdi/data-integration/并设置KETTLE_HOME。我的建议是建立这样的目录规范所有数据文件放在/home/etl/data/所有作业和转换放在/home/etl/jobs/所有日志放在/home/etl/logs/统一目录结构可以避免路径类问题反复出现。5.3 PDI 7.1 的一些使用心得与后续升级思路用了 PDI 7.1 一年多整体感受是它非常适合中小团队但也有一些明显的短板。比如资源库模式建议直接使用文件资源库而不是数据库资源库因为数据库资源库在多人协作时会出现锁冲突而且文件资源库配合 Git 可以做版本管理这个对团队来说太重要了。另外如果项目对任务调度和监控有更高要求可以考虑引入Apache DolphinScheduler或者Azkaban去调度 PDI 的作业。PDI 本身适合做数据转换但调度和监控不是它的强项引入外部调度器是行业里常见的做法。如果团队开始向大数据平台迁移可以关注 Pentaho 后续版本或者 Kettle 的社区分支。不过升级时要注意作业和转换文件基本可以沿用但数据库驱动和插件需要同步更新最好是先在测试环境完整跑一遍再上生产。6. 最后再分享几个小细节写到这里关于pdi_ce7.1.0.0-12.zip的部署和使用基本已经讲完了。但我觉得还有几个小细节值得单独说说都是我在实际项目管理中积累下来的经验。第一个是保证服务器时区正确。PDI 在处理日期字段时如果服务器时区设置不对会导致数据入库后时间偏移。我之前有过一次凌晨的批处理任务因为服务器时区设成了 UTC 而不是本地时间导致所有日期字段早了 8 个小时这个错误最终靠数据订正脚本才挽回过程相当痛苦。第二个是不要在 Windows 上做生产环境的定时任务。虽然Spoon.bat和Kitchen.bat在 Windows 上可以运行但 Windows 的定时任务机制在稳定性、日志管理和故障自恢复方面都不如 Linux 的 crontab。除非你团队全是 Windows 环境否则生产环境建议统一用 Linux 服务器。第三个是关于备份。使用 PDI 之后的每个作业和转换文件都应该纳入版本控制不仅仅是代码还有数据库连接配置注意密码不能明文提交。可以在 PDI 里使用变量来管理数据库密码比如${DB_PASSWORD}然后在运行时通过环境变量或者参数传入这样既安全又灵活。我在第一次用 PDI 时低估了配置文件管理的重要性后来有一次误操作把连接配置覆盖了整整花了一个下午才找回来。从那之后我的所有.ktr和.kjb文件都统一用 Git 管理数据库密码用变量替代再也没出过类似的幺蛾子。希望这篇文章能帮你顺利跑通 PDI少走我走过的弯路。如果你在实际部署中遇到其他问题欢迎在评论区把报错信息贴出来我们一起讨论解决方案。本文还有配套的精品资源点击获取
返回列表