ARTICLE DETAIL

资讯详情

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

Kettle安装与使用全指南:ETL入门、环境配置、数据库驱动及常见报错解决

Kettle安装与使用全指南:ETL入门、环境配置、数据库驱动及常见报错解决 做数据相关工作的人基本都绕不开 ETL 这三个字母。而 Kettle现在官方叫 Pentaho Data Integration大家还是习惯叫 Kettle应该是最适合入门、也是最常用的可视化 ETL 工具之一。这篇装教程不是简单地让你“下一步下一步”我会把安装前后容易踩的坑、环境变量、数据库驱动、时区报错、内存调整、第一个转换怎么做全部按顺序讲清楚。适合刚接触 ETL、被各种安装问题劝退过的朋友也适合想系统梳理一遍 Kettle 使用流程的初级数据工程师。1. 动手前先搞清楚ETL是什么Kettle解决了什么问题1.1 ETL概念用大白话讲一遍ETL 是 Extract、Transform、Load 三个单词的缩写对应中文就是抽取、转换、加载。我习惯把它理解成“搬数据并加工数据”的流水线Extract抽取从源系统把数据读出来源可以是数据库、Excel、CSV、接口甚至另一个数据仓库。Transform转换清洗、去重、格式调整、字段计算、表关联。这是最花时间的环节也是数据处理的核心价值所在。Load加载把处理好的数据写入目标库通常是数据仓库、数据集市或者业务数据库。如果你没有工具纯靠写代码也能完成这些事比如 Python 脚本或者 SQL 存储过程。但问题在于当数据源一多、逻辑一变、人要交接的时候代码的维护成本和沟通成本会迅速膨胀。Kettle 这类可视化 ETL 工具把整个过程变成了画流程图拖动组件、连线、配置参数逻辑一眼就能看懂出了问题也能快速定位在哪一步。1.2 为什么这么多年了还在用Kettle说实话现在市面上 ETL 工具并不少比如 DataX、StreamSets、NiFi还有各种云厂商自带的同步工具。但 Kettle 依旧有很强的生命力核心原因我个人总结有这几点纯开源免费没有授权费用社区版功能对绝大多数场景完全够用。拖拽式开发门槛低业务人员也能看懂数据处理流程。支持的数据源极其丰富关系型数据库、大数据组件、文件、接口基本都有现成组件。部署轻量解压就能用不像某些大数据平台动辄几个 G 的安装包加一堆依赖。所以无论你是做数仓、做数据迁移、做报表数据加工还是临时倒腾一批数据文件Kettle 都是很顺手的工具。1.3 Kettle版本选择和下载渠道Kettle 版本现在确实有点乱社区里各种版本号满天飞。我实测过几个组合给你一个相对稳妥的建议新手优先选 8.3 版本配 JDK 8这个组合最稳教程最多遇到问题也最容易搜到答案。9.x、10.x 也不是不行但界面和配置有些变化有些老插件不兼容新手容易卡住。版本系列推荐JDK版本适用人群7.x 及以下JDK 8老项目维护不建议新装8.3经典稳定版JDK 8新手首选教程最多9.xJDK 8 或 11需要新特性的场景10.xJDK 11 或 17新项目、愿意折腾的下载地址方面GitHub 上 pentaho/pentaho-kettle 的 Releases 页面是官方渠道文件名一般是 pdi-ce-8.3.0.0-371.zip 这种格式。国内下载慢的话可以用华为云或阿里云的镜像站搜索 pdi速度快很多。注意不要下载那些“一键安装版”“破解版”的第三方包装完容易出各种奇怪问题浪费时间。2. 安装前必须做好的环境准备JDK和系统检查2.1 Kettle和JDK的对应关系选错版本真的会闪退Kettle 是用 Java 写的所以必须先装 JDK而且版本要对上。我见过太多人装了 JDK 17 去跑 Kettle 8.3结果 Spoon.bat 双击闪退还以为是自己电脑有问题。实际上就是版本不匹配——8.3 用的是 JDK 8你给它一个 17部分依赖库直接加载不出来。如果你打算用 8.3安装 JDK 8 就行我推荐 Oracle JDK 8u202 或 OpenJDK 8注意系统是 64 位就装 64 位版本。32 位 JDK 在 64 位系统上运行 Kettle 会报 SWT 相关的错误这个特别坑。2.2 Windows下JDK安装与环境变量配置JDK 安装本身没什么技术含量一路下一步就行但环境变量配置这一步很多人搞错。关键要配置三个值JAVA_HOME变量值填 JDK 的安装路径比如C:\Program Files\Java\jdk1.8.0_202。不要带 bin不要带引号。Path在原有变量值后面追加%JAVA_HOME%\bin。注意 Windows 的变量分隔符是英文分号。CLASSPATH可选但建议配置填写.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。最前面那个点号表示当前目录不要漏。配置完之后必须重启命令行窗口再执行java -version验证。如果显示类似java version 1.8.0_202这样的信息说明 JDK 环境没问题了。java -version我还遇到过一种情况命令行里 java -version 正常但双击 Spoon.bat 还是打不开。这种多半是 Path 里存在多个 Java 版本系统优先解析到了新版本。排查方法是执行where java看解析到的路径是不是你配置的那个。如果是旧路径把 Path 里的旧 JDK 配置删掉只保留一个。2.3 安装路径和系统权限的基本要求Kettle 解压路径务必要避免中文和空格也尽量不要放在桌面桌面路径通常带用户中文名。我之前在客户电脑上见过装到C:\Users\张三\Desktop\kettle的结果启动后各种找不到配置文件的报错。建议直接放D:\kettle\data-integration这类纯英文目录。系统权限方面Windows 下建议右键“以管理员身份运行”Spoon.bat避免因为权限不足导致日志文件或临时文件写入失败。Linux/macOS 则要给脚本赋执行权限chmod x spoon.sh ./spoon.sh3. Kettle本体下载安装与首次启动保姆级步骤3.1 下载后如何解压解压后目录结构要认识拿到 zip 包之后用解压工具解压到你准备好的目录。解压完成后你会看到一个>Spoon.bat这样错误信息会直接打印在命令行里比黑屏猜原因高效得多。绝大多数启动失败的原因无非就是 JDK 版本不对、路径有中文、目录权限不足这三类。3.3 老版本特殊处理找不到启动入口怎么办我之前在帮朋友装一个老版本 Kettle 5.x 的时候发现>jdbc:mysql://localhost:3306/testdb?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8方案二修改 MySQL 全局时区适合服务器不便改连接串的情况登录 MySQL 后执行SET GLOBAL time_zone 08:00;然后再连一次试试。这个方案对服务器上其他应用也生效但注意重启 MySQL 服务后可能失效需要持久化配置就改 MySQL 的 my.cnf 文件。4.3 修改Spoon内存参数避免导入大文件卡死Kettle 默认启动内存其实不大不同版本默认不一样有的只有 512MB一旦你的转换里读取大文件或者关联大表很容易报 OutOfMemoryError。这时候不用重装改一下 Spoon 启动脚本就行。用文本编辑器打开>PENTAHO_DI_JAVA_OPTIONS-Xmx1024m -XX:MaxPermSize256m建议改成一个适合你电脑内存的值比如电脑是 16GB 内存给 Kettle 4GB 是稳妥的PENTAHO_DI_JAVA_OPTIONS-Xmx4096m -Xms1024m -XX:MaxPermSize512m注意不要贪心把 -Xmx 改得比物理内存还大启动直接失败。如果机器内存只有 4GB建议 -Xmx 给 2048m 就够了。另外修改这行之前最好备份一份原文件免得改坏了启动不了又不知道怎么还原。4.4 补充提一下JNDI配置如果你公司里有多套环境、多个项目共用同一套数据库配置手动在每个转换里建连接会很麻烦。Kettle 支持 JNDI 数据源很多人在网上搜“kettle jndi配置”其实就是把数据库连接信息集中到>demo/typejavax.sql.DataSource demo/drivercom.mysql.cj.jdbc.Driver demo/urljdbc:mysql://localhost:3306/testdb?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8 demo/userroot demo/password123456然后在 Kettle 新建数据库连接时连接类型选“JNDI”名称填demo即可。这个适合后续要维护多个流程、统一改连接信息的场景新手可以先了解不急着用。5. 第一个转换实操把Excel数据跑进MySQL跑通完整流程5.1 认识Spoon主界面别一上来就懵第一次打开 Spoon界面看着有点复杂其实核心区域就三块左侧主对象树你创建的转换Transformation和作业Job都在这里类似资源管理器。中间画布区拖拽组件、连线的地方是你主要工作的区域。右侧核心对象面板这里分类放着各种步骤比如输入类、输出类、转换类、流程类等。我开始用的时候最大的误区是试图背下所有组件的名称后来发现根本没必要。你就记住几个常用的CSV文件输入、Excel输入、表输入、表输出、字段选择、排序记录、数据校验。其他用到再搜就行。5.2 创建MySQL数据库连接在新建转换之前先把数据库连接建好。操作路径左侧主对象树右键点击“转换”选择“新建”。画布出现后看左侧或顶部能找到“DB连接”的配置入口不同版本位置略有差异右键或双击新建连接。填写连接配置配置项示例值连接名称mysql_test连接类型MySQL主机名称localhost数据库名称testdb端口号3306用户名root密码你数据库的密码点击“测试”如果之前驱动放对了、时区参数加了这里会显示连接成功。有些版本会在测试时提示是否把密码明文保存在配置文件里按需选即可。5.3 拖拽两个组件完成CSV到MySQL的转换假设现在有一个user_data.csv文件内容大概是用户ID、姓名、年龄、城市目标是把数据写进 MySQL 的t_user表。MySQL 建表语句提前执行CREATE TABLE t_user ( id INT, name VARCHAR(50), age INT, city VARCHAR(50) );回到 Spoon 画布从右侧“输入”分类里找到“CSV文件输入”拖到画布上。再从“输出”分类里找到“表输出”拖到画布上。双击 CSV 文件输入配置点击“浏览”选择文件。在“内容”标签页设置分隔符默认英文逗号、编码文件是 UTF-8 就选 UTF-8。在“字段”标签页定义字段名和类型。这里有个小技巧可以先点击“获取字段”让 Kettle 自动读取一条样例数据然后手动修正类型。连接两个步骤的办法鼠标移到 CSV 输入组件的下沿会出现箭头按住左键拖到表输出组件上松开一条带箭头的连线就成了。连线的方向代表数据流向。双击表输出配置选择数据库连接下拉选刚建的 mysql_test。目标表填t_user。点击“SQL”按钮可以预览建表语句如果表不存在可以在这里直接执行建表。在“映射”标签页把 CSV 的字段对应到数据库字段。5.4 运行、排查、验证一条龙配置完后点工具栏上的绿色运行按钮或按 F9选择“本地执行”Kettle 会开始跑这个转换。运行日志会显示每一行数据的处理情况流程结束后可以看执行结果面板里面有读取行数、写入行数、耗时等信息。如果报错最常见的几种表输出报字段不存在检查 CSV 字段名和目标表字段映射是否一致。报驱动找不到回到第 4.1 节检查 jar 包。报时区错回到 4.2 节加连接参数。中文乱码CSV 输入和表输出两端的编码都统一设置成 UTF-8。跑通之后到数据库里执行SELECT * FROM t_user;看到数据进来了基本就代表你已经会使用 Kettle 的核心流程了。别小看这个简单的案例后续所有复杂的加工逻辑都是在这个基础上叠加组件和连线实现的。6. 从手动到自动作业调度和命令行执行6.1 转换和作业的区别一次搞清楚很多新手会混淆“转换”和“作业”简单理解转换Transformation负责对数据执行具体加工比如读取、过滤、计算、写出。转换里的步骤是并行执行的数据像水管里的水一样流动。作业Job负责编排多个转换的执行顺序比如先跑清洗转换再跑汇总转换失败就发邮件成功就继续下一步。作业里的作业项是串行执行的。你只跑一个数据流的时候用转换就够了。但当你有一套完整的日结流程比如凌晨拉数据、清洗、计算、导出报表那就必须用作业把它们串起来。6.2 创建一个定时作业Start、转换、成功在左侧主对象树“作业”上右键选择“新建作业”。从右侧“通用”分类里拖出三个作业项START作业入口双击可以设置定时触发规则。比如我想每天凌晨 2 点跑就设置按天重复间隔 1 天起始时间 02:00。转换选择你刚刚建好的那个转换文件.ktr。成功表示作业成功结束。用连线把 START 连到转换转换再连到成功保存成.kjb文件。点击运行作业就会按照设定去执行。6.3 命令行执行和Windows计划任务日常工作中我其实很少天天打开 Spoon 图形界面去点运行更常用的是命令行方式配合系统的计划任务实现无人值守。执行转换Pan.bat /file:D:\kettle\jobs\user_data.ktr /level:Basic执行作业Kitchen.bat /file:D:\kettle\jobs\daily_etl.kjb /level:Detailed /logfile:D:\kettle\logs\daily.log常用参数说明/file指定 ktr 或 kjb 文件路径。/level日志级别Basic 只显示概要Debug 用于排查问题Detailed 介于两者之间。/logfile把日志写到文件里不用每次都在控制台翻。Windows 下用“任务计划程序”新建一个基本任务触发器选每天凌晨 2 点操作选“启动程序”程序填Kitchen.bat的完整路径参数填上面的内容。这样你的第一个自动化 ETL 任务就上线了。不过注意命令行执行前同样要确保 JDK 8 环境变量配置正确否则脚本会找不到 Java。我之前就有过一次电脑更新后 Path 被改乱结果计划任务一直执行失败排查半天才意识到是 Java 环境问题。7. 常见问题排查实录Kettle安装使用避坑速查表7.1 启动类问题对照表问题现象根本原因解决办法双击 Spoon.bat 闪退窗口一闪而过JDK 未安装或版本不对打开命令行运行java -version检查装 JDK 8启动报错 Unable to load SWT library32 位 JDK 与 64 位系统不匹配更换 64 位 JDK启动后界面中文乱码系统编码问题修改 Spoon.bat 或数据资源库的编码设置为 UTF-8路径含中文或空格导致启动异常Kettle 对路径兼容性差解压到纯英文目录不要用中文用户名目录启动卡住、转圈很久没反应内存参数过小或杀毒软件拦截调大 -Xmx关闭杀毒软件实时防护7.2 数据库连接与运行类问题对照表问题现象根本原因解决办法java.lang.ClassNotFoundException: com.mysql.jdbc.Driver缺少 MySQL 驱动 jar下载对应驱动放入>
返回列表