ARTICLE DETAIL

资讯详情

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

Kettle 9.3实战:从安装到自动化数据管道搭建

Kettle 9.3实战:从安装到自动化数据管道搭建 简介这是一份围绕Kettle 9.3官方安装包下载的指引文档同时也整理了ETL工具的核心使用要点适合在Windows、Linux或Unix平台从事数据抽取、转换、加载的运维人员、数据工程师以及刚接触数据集成的新手解决因网络或检索原因难以获取最新安装包的问题。包体只有1个docx文件约14KB文档中直接给出百度云下载链接与提取码并附有Kettle中文名称“水壶”的由来、Spoon图形化设计界面、对MySQL、Oracle、SQL Server等关系型数据库以及MongoDB、Hadoop等非关系型数据源的支持说明还简要提及与Amazon S3、Azure Blob等云计算存储的集成方式。该资源目前已有5719人学习下载适合希望快速获得官方Kettle 9.3并同步了解版本变化的用户。下载后凭链接即可获取安装包文档还梳理了Transformation与Job两种脚本的分工前者完成数据的基础转换后者负责整个工作流的控制同时介绍了9.3版本在性能优化与稳定性方面的改进便于读者在安装前建立整体认知减少自行检索与验证的时间。1. 月末报表做不完Kettle 9.3 把数据搬运变成可视化流水线月初做报表那几天我基本是在跟 SQL 和 Excel 搏斗七个业务系统的数据导出来格式对不上字段对不上编码偶尔还乱。后来换成 Kettle把整套抽取、清洗、入库流程拖成图形化转换和工作流月末半小时自动跑完哪一步挂了日志里清清楚楚。Kettle 9.3 是目前比较省心的一个版本纯 Java 编写Windows、Linux、Unix 都能跑适合刚接手 ETL 任务的数据工程师、想摆脱每天手导表格的运营以及正在给团队搭数据管道的人。下面就把从下载安装到第一个转换、再到避坑的完整过程拆开讲。2. Kettle 的底气纯 Java 的 ETL 引擎到底解决了什么问题Kettle 在项目里的正式名称是 Pentaho Data Integration也就是常说的 PDI。开源的能直接拿到发行包。它的设计思路很直接不逼你写一堆胶水代码去对接数据源而是把各种数据动作抽象成步骤在 Spoon 图形界面里拖一拖、连一连就能拼出一条数据管道。有人觉得这东西不够硬核但实际项目里只要有一个环节需要业务同事参与图形化就能省掉大量“帮我改一下过滤逻辑”的沟通成本。2.1 从写代码搬数据到拖控件搬数据Kettle 的定位ETL 三个字母分别对应抽取、转换、加载。传统做法是写脚本连源库、写转换逻辑、写目标库。问题在于每个人写的脚本风格不一样交接的时候基本就是个黑匣子。Kettle 把这三段变成输入步骤负责从 CSV、数据库、接口读数据转换步骤负责过滤、字段选择、聚合、计算输出步骤负责写表、写文件、调接口。每个步骤有独立的配置面板步骤之间用连线表示数据流向。纯 Java 带来的直接收益是只要操作系统上有能跑的 Java 运行时同一个转换文件在不同平台上的行为就一致Windows 上调试好的流程迁到 Linux 服务器不用改逻辑。另外 Kettle 对云存储也算友好转换面板里可以直接拖 Amazon S3、阿里云 OSS 这类输入输出组件跟连普通数据库没有太大区别适合正在把数仓往云上搬的团队。2.2 Transformation 和 Job两种脚本的分工与边界Kettle 里有两种脚本文件新手最容易搞混的就是它们。Transformation 是数据转换负责处理行和列Job 是作业负责控制整个工作流的执行顺序。用仓库发货来比喻Transformation 是流水线上的各道工序Job 是决定流水线几点开机、哪道工序做完了才轮到下一道、出错了要不要返工的那个人。对比项TransformationJob文件后缀.ktr.kjb核心关注点单条数据管道的数据处理多个转换和作业项的调度控制连接方式数据流上游行数据喂给下游控制流上一项成功或失败决定下一项典型用途清洗、字段映射、加载定时跑批、失败重试、邮件告警理解这个边界对排查问题很重要。很多新手在 Job 里把两个转换首尾一连以为数据就顺着流过去了实际上那条线只是执行顺序数据仍然要由各自转换内部的输入输出步骤来承担。2.3 Kettle 9.3 到底更新了什么9.x 这条线已经是非常成熟的版本官方更新日志里能看到的主要内容集中在性能优化、连接器修复和稳定性改进上。我拿到的这个 9.3 包跑全量抽取时内存表现比旧版要稳旧版偶尔跑一半 Spoon 卡死的情况少了很多。新版对 JDK 8 和 JDK 11 的适配比较干净不再有早期版本非得指定某个小版本才能跑的问题。真要选一个版本上手9.3 的优势在于驱动文档和社区问答都比较新踩坑时搜到的解决方案大多能直接对上你的界面。3. 拿到 9.3 安装包之后从解压到 Spoon 启动的完整流程这一份 9.3 的发行包目前放在百度云链接是https://pan.baidu.com/s/1_mBl2UFldNr1mJUO2-tXNQ提取码hghx复制到浏览器打开就能下。压缩包解压完就是标准的>java -version echo $JAVA_HOMEjava -version能看到 1.8.x 或 11.x 就基本没问题。JAVA_HOME如果不打印Kettle 的启动脚本会找不到 JDKWindows 下要去系统环境变量里补一个Linux 下在~/.bashrc里加两条export JAVA_HOME/usr/local/jdk8 export PATH$JAVA_HOME/bin:$PATH配置完记得重新打开终端再验证一次。跳过这一步的人后面多半会遇到 Spoon 闪退或者 Pan 命令报 “Unable to find java” 的错误。3.2 Windows 下的解压与启动步骤把压缩包解压到纯英文目录比如D:\kettle\data-integration避免放到带中文或空格的路径下。然后进目录双击Spoon.bat。首次启动会有一个黑色控制台窗口不断刷日志这是正常的等一两分钟会弹出主界面。如果双击后窗口一闪就消失最直接的办法是在 CMD 里手动执行cd D:\kettle\data-integration Spoon.bat这样报错信息会留在控制台里不会一闪而过。常见原因就两个JAVA_HOME没配置或者 JDK 版本跟 Kettle 要求的位数不匹配。确认这两点之后绝大多数闪退都能解决。3.3 Linux 环境部署无图形界面也能跑Linux 服务器上部署 Kettle最常见的形态是没有桌面环境的远程主机。Spoon 图形界面在这种情况下起不来但 Kettle 自带两个命令行工具可以照样执行转换和作业。部署步骤无非解压、赋权、配环境变量tar -zxf kettle-9.3.tar.gz -C /opt/kettle cd /opt/kettle/data-integration chmod x Spoon.sh Pan.sh Kitchen.sh export JAVA_HOME/usr/local/jdk8 export PATH$JAVA_HOME/bin:$PATH ./Spoon.sh # 有桌面环境时启动图形界面 ./Pan.sh -file:/data/etl/user_csv_to_db.ktr -level:Detailed # 无界面执行转换这里区分一下Pan.sh是转换执行器对应 .ktr 文件Kitchen.sh是作业执行器对应 .kjb 文件。-file参数指定脚本的绝对路径-level指定日志级别。-norep这个参数也经常见到意思是不连接资源库直接用本地文件模式跑日常单机使用保持默认即可。Linux 下还有个容易忽略的点如果服务器内存不大跑大转换前一定要先改 JVM 参数这个在第 5 章避坑部分会详细展开。3.4 目录结构先认清这些文件再动手解压之后不要急着乱点先把>CREATE TABLE ods_user_info ( id BIGINT PRIMARY KEY, name VARCHAR(64), age INT, city VARCHAR(64), load_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP );注意目标表里age是 INTCSV 里脏数据直接灌进去会报错所以中间要加一个过滤步骤这是 ETL 里最日常的清洗动作。在 Spoon 里新建转换从左侧“核心对象”面板拖一个“CSV 文件输入”到画布再拖一个“表输出”。配置 CSV 输入时文件路径填绝对路径编码必须选 UTF-8CSV 文件在 Windows 上经常是 GBK 编码不指定就会乱码这个坑在第 5 章还会重点说。然后配置表输出点击“新建”选 MySQL填主机、端口、库名、用户名密码。这里有个关键点MySQL 8 以上要把驱动 Class 填成com.mysql.cj.jdbc.Driver老版本才是com.mysql.jdbc.Driver填错就报驱动找不到。为了让 CSV 里的脏 age 不影响入库在输入和输出之间再加一个“过滤记录”步骤过滤条件设为age字段是数字然后再接表输出。跑通之后保存为user_csv_to_db.ktr。除了在 Spoon 里点运行命令行执行方式是这样的export JAVA_HOME/usr/local/jdk8 cd /opt/kettle/data-integration ./Pan.sh -file:/data/etl/user_csv_to_db.ktr -level:Basic -param:inputFilePath/data/etl/user_info.csv-param用来传命名参数具体参数名要在转换里提前定义好这个后面 4.3 会说。-level:Basic是基础日志级别只输出主要步骤和 SQL如果调试时想看到每一行数据可以改成-level:Rowlevel但生产环境千万别开日志量会大到把磁盘撑满。4.2 用 Job 把多个转换串成每日任务单条转换解决的是“一条数据管道怎么处理”的问题但实际业务还要求“每天凌晨两点自动跑失败了要通知人”。这就要靠 Job 来控制。新建一个作业拖入 “START” 步骤双击配置执行策略选择定时执行写一个 cron 表达式0 0 2 * * ?。这个表达式的含义是每天凌晨 2 点 0 分 0 秒触发字段依次是秒、分、时、日、月、星期?表示不指定星期几。接着拖入“转换”作业项选择刚才保存的user_csv_to_db.ktr。在转换后面再接一个“成功”步骤和一个“邮件”步骤转换跑成功就写一条日志失败就发告警邮件。整个作业保存为daily_user_sync.kjb命令行用 Kitchen 执行./Kitchen.sh -file:/data/etl/daily_user_sync.kjb -level:Basic -log:/data/etl/logs/daily_user_sync.logLinux 生产环境下配合 crontab 就能实现真正的无人值守0 2 * * * cd /opt/kettle/data-integration ./Kitchen.sh -file:/data/etl/daily_user_sync.kjb -level:Basic /data/etl/logs/cron.log 21crontab 里运行的命令输出量很大如果不重定向到文件时间一长系统会积累大量无主输出而且出了问题连日志都找不到这个习惯最好从一开始就建立。4.3 命名参数与日志级别让流程可维护同一个转换往往要在不同环境间复用。比如每天的文件路径会变表名在不同库不一样。Kettle 的解决办法是命名参数在转换画布空白处右键选择“设置”在“命名参数”标签页里加上inputFilePath然后在步骤配置里用${inputFilePath}引用它。这样 Job 每次执行时传入不同的路径同一个 .ktr 文件就不用改来改去。日志级别的选择直接影响排错效率Kettle 提供几个常用级别日志级别适用场景ErrorOnly只显示错误适合日常巡检Basic记录主要步骤、SQL生产推荐Detailed调试字段映射、连接问题时使用Debug进一步排查性能瓶颈Rowlevel打印每一行数据仅限小数据量调试我的习惯是开发调试用 Detailed确认逻辑没问题后生产环境固定用 Basic并且把输出重定向到带日期的日志文件。Rowlevel 只在数据量几百行时开一下排查完立刻切回去。5. Kettle 9.3 避坑指南常见问题与排错记录这一章把我在使用 Kettle 过程中遇到的典型问题按“现象 → 原因 → 解决”整理出来每一条都是实际踩过的照着排查能省不少时间。5.1 MySQL 8 连接报 Public Key Retrieval is not allowed现象在数据库连接配置里点“测试”提示Public Key Retrieval is not allowed或者直接报驱动类找不到。原因两个原因叠加。一是 MySQL 8 默认使用caching_sha2_password认证方式老的 JDBC 驱动不支持二是连接配置里的驱动类名填成了老版本的com.mysql.jdbc.Driver。解决把 mysql-connector-java 8.x 的 jar 包放到lib目录重启 Spoon驱动类填com.mysql.cj.jdbc.Driver在 JDBC URL 后面追加allowPublicKeyRetrievaltrueuseSSLfalse。这个组合对 MySQL 8 基本是标准配置。5.2 中文乱码源文件编码和数据库编码两头都要查现象CSV 里中文写入数据库后变成问号或者从数据库读出来显示成乱码。原因CSV 文件本身是 UTF-8 编码但 Windows 下 Kettle 默认按系统编码 GBK 读取读出来就已经是乱码数据库连接那边如果没有指定编码写入时也会再错一次。解决CSV 输入步骤里把编码明确指定为 UTF-8数据库连接的 JDBC URL 加上useUnicodetruecharacterEncodingUTF-8。两头都设对了乱码问题基本不会出现。5.3 大表全量抽取直接 OutOfMemoryError现象跑全量同步时执行到一半报内存溢出Spoon 界面卡死有时候直接把整个程序退出。原因Kettle 启动脚本默认把 JVM 堆内存限制在 1024MB几千万行的全量抽取根本不够用。解决编辑Spoon.bat/Spoon.sh找到PENTAHO_DI_JAVA_OPTIONS这一行把堆内存调大比如PENTAHO_DI_JAVA_OPTIONS-Xmx4096m -Xms512m -Dfile.encodingUTF-8注意这个参数同时影响 Spoon 图形界面和 Pan、Kitchen 命令行改完重启才生效。堆内存不是越大越好要留出物理内存给操作系统4GB 是一个比较稳的起步值。5.4 Access 数据库连不上缺 UCanAccess 驱动现象想要直接读取 .mdb 或 .accdb 文件但在新建数据源里找不到 Access 类型。原因Kettle 默认不内置 Access 驱动需要自己装 UCanAccess 驱动包。解决把 ucanaccess 开头的几个 jar 包及依赖一起拷到lib目录重启 Spoon连接 Class 填net.ucanaccess.jdbc.UcanaccessDriver连接 URL 写成jdbc:ucanaccess://D:/data/test.accdb。另外注意如果数据库文件正被 Access 软件打开UCanAccess 会连接失败这是 Access 文件锁机制导致的提前关掉就好。5.5 Spoon 双击闪退版本和路径的兼容性问题现象Windows 下双击Spoon.bat控制台窗口一闪而过界面出不来。原因最常见的是JAVA_HOME没配置或者配置的 JDK 版本太高也有可能是解压路径带了中文或空格。解决在 CMD 里直接执行Spoon.bat报错信息会留在控制台确认 JDK 是 8 或 11解压路径改成纯英文。三步走完闪退绝大多数都能解决。6. 换版本后先做三件事验证环境与自动化跑批的实用小习惯Kettle 这类工具落地最大的风险往往不在功能上而在环境细节上。我每次拿到新版本都会强制走一遍固定的验证流程确认三件事没问题才敢把正式作业迁过去。第一件跑通一条最简链路。新建一个转换CSV 输入接到表输出故意在字段里放一条中文和一条脏数据看写入结果是否正确。这一条链路能同时验证 JDK 版本、JDBC 驱动、文件编码、内存参数四件事比任何配置检查都直接。十分钟的事能省掉后面几小时的排错。第二件定时任务全部改用命令行。Spoon 只做开发和调试生产环境一律用Kitchen.sh或Pan.sh加 crontab。日志文件名带上日期方便回溯。这是一个固定模板#!/bin/bash cd /opt/kettle/data-integration ./Kitchen.sh -file:/data/etl/daily_user_sync.kjb -level:Basic -log:/data/etl/logs/sync_$(date %Y%m%d).log echo exit code: $?$(date %Y%m%d)会自动生成当天日期的日志文件名echo exit code是为了在 crontab 的邮件通知里能直接看到成功还是失败。这个习惯在排查“为什么昨天没跑”这类问题时非常管用。第三件参数集中管理。容易变的路径、数据库连接、表名全部做成命名参数或变量不要写死在转换里。数据库连接在 Spoon 里可以直接导出成 XML 文件换机器时导入就能用比自己重新填一遍靠谱也避免因为某次手滑填错密码导致半夜跑批失败。从那以后我每次拿到新版本都强制先跑一遍 CSV 到 MySQL 的示例链路确认驱动、编码、内存这三件事再往上搭正式作业。Kettle 出问题很少是产品本身不行大多栽在这些看似不起眼的环节上。希望帮到你。本文还有配套的精品资源点击获取
返回列表