当前位置: 首页 > news >正文

Spring Boot 集成 Kettle

Kettle 简介

Kettle 最初由 Matt Casters 开发,是 Pentaho 数据集成平台的一部分。它提供了一个用户友好的界面和丰富的功能集,使用户能够轻松地设计、执行和监控 ETL 任务。Kettle 通过其强大的功能和灵活性,帮助企业高效地处理大规模数据集成任务。

主要组成部分
  1. Spoon
    • 用途:Spoon 是 Kettle 的图形化设计工具。用户可以使用 Spoon 设计和调试 ETL 转换和作业。
    • 功能:拖放式界面、预览数据、测试 ETL 流程、管理连接、编写脚本等。
  2. Pan
    • 用途:Pan 是一个命令行工具,用于执行由 Spoon 设计的 ETL 转换。
    • 功能:通过命令行执行转换、调度作业、集成到其他自动化流程中。
  3. Kitchen
    • 用途:Kitchen 是一个命令行工具,用于执行由 Spoon 设计的 ETL 作业。
    • 功能:通过命令行执行作业、调度作业、集成到其他自动化流程中。
  4. Carte
    • 用途:Carte 是一个轻量级的 Web 服务器,提供远程执行和监控功能。
    • 功能:远程执行和监控 ETL 转换和作业、查看日志、管理集群等。
  5. Repositories
    • 用途:存储和管理 ETL 转换和作业的地方。
    • 功能:可以使用数据库或文件系统作为存储库,支持版本控制和共享。
主要功能和特点
  1. 数据提取

    • 支持多种数据源,如关系数据库、文件(CSV、Excel、XML 等)、大数据平台(Hadoop、Hive 等)、云存储(Amazon S3、Google Drive 等)、Web 服务和 API 等。
  2. 数据转换

    • 丰富的转换步骤,包括数据清洗、数据聚合、数据过滤、数据排序、数据连接、数据拆分、数据类型转换等。
  3. 数据加载

    • 支持将数据加载到多种目标系统中,如关系数据库、大数据平台、文件系统、云存储等。
  4. 调度和自动化

    • 支持通过命令行工具(Pan 和 Kitchen)和调度器(如 cron 或 Windows 任务计划)进行调度和自动化执行。
  5. 扩展性

    • 提供了插件机制,用户可以编写自定义插件,扩展 Kettle 的功能。
    • 支持 JavaScript 和 Java 进行脚本编写,增强转换和作业的灵活性。
  6. 集群和并行处理

    • 支持集群模式,能够在分布式环境中并行处理大规模数据。
    • 提供了分布式 ETL 执行和负载均衡功能。
  7. 数据质量和数据治理

    • 提供了数据验证、数据一致性检查和数据校验功能,帮助确保数据的质量和一致性。
  8. 实时数据处理

    • 支持实时数据流处理,通过集成 Kafka、MQTT 等流处理平台,实现实时数据的提取、转换和加载。
集成 Kettle

将 Kettle(Pentaho Data Integration, PDI)集成到 Spring Boot 项目中,可以实现 ETL 流程的自动化和集成化处理。以下是详细的集成过程:

准备工作
  1. 下载 Kettle:从 Pentaho 官网下载 Kettle(PDI)的最新版本,并解压到本地目录。
  2. Spring Boot 项目:确保已有一个 Spring Boot 项目,或新建一个 Spring Boot 项目。
引入 Kettle 依赖

在 Spring Boot 项目的 pom.xml 文件中添加 Kettle 所需的依赖。你可以将 Kettle 的 JAR 文件添加到本地 Maven 仓库,或直接在项目中引入这些 JAR 文件。

<dependencies><!-- Spring Boot 依赖 --><!-- Kettle 依赖 --><dependency><groupId>pentaho-kettle</groupId><artifactId>kettle-core</artifactId><version>9.4.0.0-343</version></dependency><dependency><groupId>pentaho-kettle</groupId><artifactId>kettle-engine</artifactId><version>9.4.0.0-343</version></dependency><dependency><groupId>pentaho-kettle</groupId><artifactId>kettle-dbdialog</artifactId><version>9.4.0.0-343</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-vfs2</artifactId><version>2.7.0</version></dependency><!-- 根据需要添加其他 Kettle 依赖 --><!-- 操作数据库数据时添加相应的数据库依赖 --></dependencies>
处理密码加密

resources 目录下创建 kettle-password-encoder-plugins.xml 文件,用于配置密码加密插件:

<password-encoder-plugins><password-encoder-plugin id="Kettle"><description>Kettle Password Encoder</description><classname>org.pentaho.support.encryption.KettleTwoWayPasswordEncoder</classname></password-encoder-plugin></password-encoder-plugins>

kettle-core依赖中org.pentaho.support.encryption.KettleTwoWayPasswordEncoder类实现了TwoWayPasswordEncoderInterface接口,用于处理密码的加密和解密操作。

添加 Spoon 的任务文件

在 Kettle(Pentaho Data Integration,PDI)中,作业(Job)和转换(Transformation)是两种核心的 ETL 组件,它们在设计和功能上有着本质的区别。

转换(Transformation)
  1. 数据处理流程:转换是一个数据处理流程,专注于数据的提取(Extract)、转换(Transform)和加载(Load)。
  2. 行级处理:转换以行级处理数据,每次处理一行数据,并将其传递给下一步骤。
  3. 任务文件为.ktr文件。
作业(Job)
  1. 任务管理和控制流程:作业是一个任务管理和控制流程,负责调度和控制一系列任务的执行顺序。
  2. 步骤级处理:作业以步骤为单位处理任务,每次执行一个步骤,然后根据条件决定执行下一个步骤。
  3. 任务文件为.kjb文件。
区别
  1. 转换处理数据行,作业处理任务步骤。
  2. 转换中的步骤是并行执行的,而作业中的步骤是顺序执行的。
  3. 转换侧重于数据的处理和转换,作业侧重于任务的调度和管理。
  4. 转换主要通过数据流控制,作业提供了丰富的逻辑控制(条件判断、循环、错误处理等)。
  5. 转换适用于复杂的数据处理流程,作业适用于任务调度和控制。

在 Spring Boot 项目的 resources 目录下,创建一个 kettle 目录,并将 Kettle 的任务文件(如 转换1.ktr)复制到该目录中。

编写 Kettle 服务类

创建一个服务类,用于执行 Kettle 转换或作业。

package com.example.kettletest.service.impl;import com.example.kettletest.service.KettleJobService;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.core.util.EnvUtil;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;import java.io.File;
import java.io.IOException;/*** @author 罗森* @date 2024/6/6 13:21*/
@Service
public class KettleJobServiceImpl implements KettleJobService {@Overridepublic void runTaskFile(String taskFileName) {// 初始化 Kettle 环境try {KettleEnvironment.init();EnvUtil.environmentInit();} catch (KettleException e) {throw new RuntimeException(e);}// 执行任务文件if (taskFileName.endsWith(".ktr")) {taskFileKTR(taskFileName);} else if (taskFileName.endsWith(".kjb")) {taskFileKJB(taskFileName);} else {throw new IllegalArgumentException("Unsupported file type: " + taskFileName);}}/*** 针对kjb文件的操作* @param taskFileName*/public void taskFileKJB(String taskFileName) {try {// 获取资源文件路径ClassPathResource resource = new ClassPathResource("kettle/" + taskFileName);File jobFile = resource.getFile();// 加载 KJB 文件JobMeta jobMeta = new JobMeta(jobFile.getAbsolutePath(), null);// 创建作业对象Job job = new Job(null, jobMeta);// 启动作业job.start();// 等待作业完成job.waitUntilFinished();if (job.getErrors() > 0) {System.out.println("There were errors during job execution.");} else {System.out.println("Job executed successfully.");}} catch (IOException | KettleXMLException e) {e.printStackTrace();}}/*** 针对ktr文件的操作* @param taskFileName*/public void taskFileKTR(String taskFileName) {try {// 获取资源文件路径ClassPathResource resource = new ClassPathResource("kettle/" + taskFileName);File transFile = resource.getFile();// 加载 KTR 文件TransMeta transMeta = new TransMeta(transFile.getAbsolutePath());// 创建转换对象Trans trans = new Trans(transMeta);// 启动作业trans.execute(null);// 等待作业完成trans.waitUntilFinished();if (trans.getErrors() > 0) {System.err.println("There were errors during Transformation execution.");} else {System.out.println("Transformation executed successfully!");}} catch (IOException | KettleException e) {e.printStackTrace();}}
}
常见问题解决办法
  1. 运行后报错信息为:Unable to find plugin with ID 'Kettle'. If this is a test, make sure kettle-core tests jar is a dependency. If this is live make sure a kettle-password-encoder-plugins.xml exits in the classpath.

    **解决办法:**在 resources 目录下创建 kettle-password-encoder-plugins.xml 文件。

  2. 运行后报错信息为:ERROR (version 9.4.0.0-343, build 0.0 from 2022-11-08 07.50.27 by buildguy) : A serious error occurred during job execution: 无法找到作业的开始点.

    **解决办法:**为Spoon制作的作业任务增加开始节点。

  3. 运行后报错信息为:Can't run transformation due to plugin missing.

    **解决办法:**此问题通常出现在涉及类似于导出excel文件、json文件时。在初始化 Kettle 环境之前指明相关插件的绝对路径(相关插件通常在Kettle本地解压文件夹中的plugins目录下),新增以下代码:

    StepPluginType.getInstance().getPluginFolders().add(new PluginFolder("E:\Kettle\pdi-ce-9.4.0.0-343\data-integration\plugins", false, true));
    

    将代码中的地址换成您本地的绝对地址。


(END)
by luosen.

相关文章:

Spring Boot 集成 Kettle

Kettle 简介 Kettle 最初由 Matt Casters 开发&#xff0c;是 Pentaho 数据集成平台的一部分。它提供了一个用户友好的界面和丰富的功能集&#xff0c;使用户能够轻松地设计、执行和监控 ETL 任务。Kettle 通过其强大的功能和灵活性&#xff0c;帮助企业高效地处理大规模数据集…...

自学Java-面向对象高级(final、单例类、枚举类、抽象类、接口)

自学Java-面向对象高级&#xff08;final、单例类、枚举类、抽象类、接口&#xff09; 一、final关键字1、认识final关键字2、final修饰变量的注意3、常量 二、单例类&#xff08;设计模式&#xff09;1、设计模式的概念2、单例设计模式3、单例类有很多形式4、懒汉式单例类5、小…...

Hutool - Cache:简单而强大的缓存实现

目录 1. 缓存简介 2. 引入依赖 3. 常见缓存类型及使用示例 3.1 FIFO 缓存&#xff08;先进先出缓存&#xff09; 3.2 LRU 缓存&#xff08;最近最少使用缓存&#xff09; 3.3 定时缓存 4. 缓存的基本操作 5. 总结 1. 缓存简介 在软件开发中&#xff0c;缓存是一种常用的…...

DeepSeek 通过 API 对接第三方客户端 告别“服务器繁忙”

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 上一期分享了如何在本地部署 DeepSeek R1 模型&#xff0c;但通过命令行运行的本地模型&#xff0c;问答的交互也要使用命令行&#xff0c;体验并不是很好。这期分享几个第三方客户端&#xff0c;涵盖了桌…...

Python 基础-循环

目录 简介 break continue 小结 简介 要计算123&#xff0c;我们可以直接写表达式&#xff1a; >>> 1 2 3 6要计算123...10&#xff0c;勉强也能写出来。 但是&#xff0c;要计算123...10000&#xff0c;直接写表达式就不可能了。 为了让计算机能计算成千上…...

Java和SQL测试、性能监控中常用工具

下面我会详细列举一些在Java和SQL测试、调试、性能监控中常用的工具&#xff0c;并结合项目中提到的各个技术点说明如何选择合适的工具和方法。 一、Java项目常用的测试、调试与性能监控工具 单元测试与集成测试&#xff1a;JUnit/TestNG&#xff1a; 用于编写单元测试和集成测…...

SQL 注入攻击详解[基础篇]:Web 应用程序安全漏洞与防御策略

目录 SQL注入的简介 现代 Web 应用程序中的数据库交互与 SQL 注入攻击 数据库管理系统&#xff08;DBMS&#xff09;架构与 SQL 注入 什么是 SQL 注入&#xff1f; SQL 注入的工作原理 SQL 注入的用例与影响 如何预防 SQL 注入&#xff1f; 数据库分类 数据库类型&am…...

【ArcGIS Pro二次开发】(87):样式_Style的用法

.Stylx类型的文件即为样式库文件&#xff0c;保存了符号样式。 1、根据名字获取当前工程中的style //获取当前工程中的所有style var ProjectStyles Project.Current.GetItems<StyleProjectItem>();//根据名字找出指定的style StyleProjectItem style ProjectStyles.F…...

DEX-EE三指灵巧手:扩展AI与机器人研究的边界

DEX-EE三指灵巧手&#xff0c;由Shadow Robot与Google DeepMind合作开发&#xff0c;以其先进技术和设计&#xff0c;正在引领AI与机器人研究的新趋势。其高精度传感器和灵活的机械手指&#xff0c;能够捕捉复杂的环境数据&#xff0c;为强化学习实验提供了可靠支持。 Shadow R…...

简站主题:简洁、实用、SEO友好、安全性高和后期易于维护的wordpress主题

简站主题以其简洁的设计风格、实用的功能、优化的SEO性能和高安全性而受到广泛好评。 简洁&#xff1a;简站主题采用扁平化设计风格&#xff0c;界面简洁明了&#xff0c;提供多种布局和颜色方案&#xff0c;适合各种类型的网站&#xff0c;如个人博客和企业网站。 实用&…...

23种设计模式 - 责任链

模式定义 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;允许多个对象按链式顺序处理请求&#xff0c;直到其中一个对象处理为止。该模式将请求的发送者和接收者解耦&#xff0c;使多个对象都有机会处理请求。 模式结构…...

Flink SQL与Doris实时数仓Join实战教程(理论+实例保姆级教程)

目录 第一章:Regular Joins 深度解析 1.1 核心原理与适用场景 1.2 电商订单 - 商品实时关联案例 1.2.1 数据流设计 1.2.2 Doris 表设计优化 1.2.3 性能调优要点 第二章:Interval Joins 实战应用 2.1 时间区间关联原理 2.2 优惠券使用有效性验证 2.2.1 业务场景说明 …...

算法——舞蹈链算法

一&#xff0c;基本概念 算法简介 舞蹈链算法&#xff08;Dancing Links&#xff0c;简称 DLX&#xff09;是一种高效解决精确覆盖问题的算法&#xff0c;实际上是一种数据结构&#xff0c;可以用来实现 X算法&#xff0c;以解决精确覆盖问题。由高德纳&#xff08;Donald E.…...

【复现DeepSeek-R1之Open R1实战】系列6:GRPO源码逐行深度解析(上)

目录 4 GRPO源码分析4.1 数据类 GRPOScriptArguments4.2 系统提示字符串 SYSTEM_PROMPT4.3 奖励函数4.3.1 accuracy_reward函数4.3.2 verify函数4.3.3 format_reward函数 4.4 将数据集格式化为对话形式4.5 初始化GRPO Trainer 【复现DeepSeek-R1之Open R1实战】系列3&#xff1…...

若依Flowable工作流版本监听器使用方法

1.前言 本文详细介绍如何在若依Flowable工作流版本&#xff08;RuoYi-Vue-Flowable&#xff09;中配置执行监听器和任务监听器。是以我二次开发的代码为基础&#xff0c;介绍如何配置监听器&#xff0c;已解决源码在新增或删除监听器出现的问题&#xff0c;如果需要二次开发的…...

机器视觉--图像的运算(乘法)

一、引言 在图像处理领域&#xff0c;Halcon 是一款功能强大且广泛应用的机器视觉软件库。它提供了丰富的算子和工具&#xff0c;能够满足各种复杂的图像处理需求。图像的乘法运算作为其中一种基础操作&#xff0c;虽然不像一些边缘检测、形态学处理等操作那样被频繁提及&…...

突破反爬困境:从服务端渲染到客户端SPA,爬虫环境的演变与新挑战(一)

声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的&#xff0c;旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…...

matlab下载安装图文教程

【matlab介绍】 MATLAB是一款由美国MathWorks公司开发的专业计算软件&#xff0c;主要应用于数值计算、可视化程序设计、交互式程序设计等高科技计算环境。以下是关于MATLAB的简要介绍&#xff1a; MATLAB是MATrix LABoratory&#xff08;矩阵实验室&#xff09;的缩写&#…...

七、敏捷开发工具:持续集成与部署工具

一、敏捷开发工具——持续集成与部署工具 持续集成(CI)与持续部署(CD)是现代敏捷开发中不可或缺的关键实践。通过自动化构建、测试和部署流程,团队可以快速反馈、提高代码质量,并加速产品交付。为此,持续集成与部署工具应运而生,它们能够帮助开发团队在整个开发周期内…...

重看Spring聚焦BeanDefinition分析和构造

目录 一、对BeanDefinition的理解 &#xff08;一&#xff09;理解元信息 &#xff08;二&#xff09;BeanDefinition理解分析 二、BeanDefinition的结构设计分析 &#xff08;一&#xff09;整体结构体会 &#xff08;二&#xff09;重要接口和类分析 三、构造 BeanDef…...

Docker部署Nginx时SSL证书报错?别慌,可能是挂载路径的‘坑’

Docker部署Nginx时SSL证书路径映射的深度解析与解决方案 当你用Docker部署Nginx并配置SSL证书时&#xff0c;是否遇到过这样的报错&#xff1a;BIO_new_file() failed&#xff0c;明明证书文件存在却提示找不到&#xff1f;这背后隐藏着Docker容器化环境特有的文件系统隔离机制…...

告别WPS保存报错:一份给Python开发者的pywin32与WPS兼容性配置清单

深度解析Python与WPS交互&#xff1a;pywin32兼容性配置全指南 当Python开发者尝试通过pywin32库与WPS进行自动化交互时&#xff0c;经常会遇到各种COM组件错误。这些错误往往源于复杂的版本依赖、系统权限配置和软件设置问题。本文将系统性地梳理pywin32与WPS的兼容性问题&…...

2026最新!3款亲测录音生成会议纪要神器,10分钟出稿免费好用到哭!

上周开3小时季度复盘会&#xff0c;散会老板轻飘飘一句“下班前把纪要发我”&#xff0c;给我整出一身冷汗——之前我自己对着录音逐句抠&#xff0c;1小时录音要整理2小时&#xff0c;错漏一堆专业术语不说&#xff0c;熬到下班都出不了活&#xff1b;前阵子做5个用户访谈&…...

HNU计算机系统期中题库分类(300个)

自用CS期中题库题目分类&#xff08;按ID大类小类&#xff09; 一、计算机组成原理&#xff08;CPU、指令系统、存储器、运算基础&#xff09; 1. CPU结构与功能 ID:9504、ID:9429、ID:9430、ID:9431、ID:9475、ID:9655、ID:9660、ID:9695、ID:9696、ID:9697、ID:9584、ID:9549…...

芬兰语NLP基准测试FinBench v2的技术解析与应用

1. 芬兰语NLP基准测试概述自然语言处理(NLP)基准测试是评估模型性能的关键工具&#xff0c;特别是在低资源语言场景下。芬兰语作为乌拉尔语系的代表语言&#xff0c;其复杂的语法结构和丰富的形态变化为NLP研究提供了独特挑战。FinBench v2是目前最全面的芬兰语评估套件&#x…...

Geopandas统计同覆盖小区

Geopandas统计同覆盖小区def samefugei_updata(distm,agleabs):#distm:同覆盖距离&#xff0c;单位米&#xff1b;agleabs:同覆盖小区经纬度差dis_buffer distmagle_abs agleabsfile_yuan ./原始数据\\工参表.xlsxdirout ./输出结果\\p_yuan pd.read_excel(file_yuan, she…...

PHP 9.0 Fiber + AI Bot推理流水线:单机万级并发下LLM Token流低延迟投递方案(含v8引擎JIT协同优化细节)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;PHP 9.0 异步编程与 AI 聊天机器人对比评测报告 PHP 9.0&#xff08;预发布版&#xff09;引入了原生协程调度器&#xff08;Swoole Core Integration&#xff09;和 async/await 语法糖&#xff0c;标…...

如何5分钟上手QtScrcpy:Android设备跨平台投屏与键鼠控制完全指南

如何5分钟上手QtScrcpy&#xff1a;Android设备跨平台投屏与键鼠控制完全指南 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ra…...

港科夜闻 | 香港科大与泰晤士高等教育合办亚洲大学高峰会2026

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大与泰晤士高等教育&#xff08;THE&#xff09;合办“亚洲大学高峰会2026”&#xff0c;以“推动全球变革&#xff1a;亚洲的领导力”为主题&#xff0c;探讨亚洲高等教育在推动全球创新及应对迫切社会挑战方面的关键…...

3分钟掌握:Winhance中文版如何彻底改变你的Windows体验

3分钟掌握&#xff1a;Winhance中文版如何彻底改变你的Windows体验 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-z…...