Kettle 小记(1)

1 KETTLE 概述

Kettle是 “KETTLE E.T.T.L. ENVIRONMENT”只取首字母的缩写,这意味着它被设计用来帮助你实现ETTL的需要:抽取、转换、装入和加载数据。中文名称叫水壶,正如该项目的主程序员Matt在一个论坛里说的那样:希望把各种数据放到一个壶里然后以一种指定的格式流出

Kettle 是一款国外开源的 ETL 工具,纯Java编写;使用突破性的元数据驱动方法,提供强大的提取、转换和加载(ETL)功能;绿色无需安装,解压即可;可以运行在Windows、Linux等多个平台;其数据抽取高效稳定。

官网地址

1.1起源

Kettle是一个Java编写的ETL工具,主作者是Matt Casters,2003年就开始了这个项目,最新稳定版为8.2。

2005年12月,Kettle从2.1版本开始进入了开源领域,一直到4.1版本遵守LGPL协议,从4.2版本开始遵守Apache Licence 2.0协议。Kettle在2006年初加入了开源的BI公司Pentaho, 正式命名为:Pentaho Data Integeration,简称“PDI”。自2017年9月20日起,Pentaho已经被合并于日立集团下的新公司: Hitachi Vantara。

总之,Kettle可以简化数据仓库的创建、更新和维护,使用Kettle可以构建一套开源的ETL解决方案。

1.2 架构

Kettle是一个组件化的集成系统,包括如下几个主要部分。

1.2.1 Spoon

图形化界面工具(GUI方式),Spoon通过图形界面来设计Job和Transformation。也可以直接在Spoon图形化界面中运行Job和Transformation。

1.2.2 Pan

Transformation执行器(命令行方式),Pan用于在终端执行Transformation,没有图形界面。

1.2.3 Kitchen

Job执行器(命令行方式),Kitchen用于在终端执行Job,没有图形界面。

1.2.4 Carte

嵌入式Web服务,用于远程执行Job或Transformation,Kettle通过Carte建立集群。

1.2.5 Encr

Kettle用于字符串加密的命令行工具,如:对在Job或Transformation中定义的数据库连接参数进行加密。

1.3 Kettle 使用场景

Kettle的使用场景很多,不仅限于这些:

  • 在应用程序或数据库之间进行数据迁移;
  • 从数据库导出数据到文件;
  • 导入大规模数据到数据库;
  • 数据清洗;
  • 集成应用程序。

1.4 基础结构

1.4.1 Job(作业)

负责将设计好的Transformation组织在一起进而完成某一工作。

通常我们需要把一个大的任务分解成几个逻辑上隔离的Job,当这几个Job都完成了,也就说明这项任务完成了。

1.4.2 Transformation(转换)

定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程。

可以理解为将一个或多个不同的数据源组装成一条数据流水线,然后最终输出到一个地方(文件、数据库等)。

比Job粒度更小一级的容器,我们将任务分解成Job,然后需要将Job分解成一个或多个Transformation,每个Transformation只完成一部分工作。

1.4.3 Step(步骤)

Transformation内部的最小单元,每一个Step完成一个特定的功能。

1.4.4 Job Entry(作业实体)

Job内部的执行单元,每一个Job Entry用于实现特定的功能,如:验证表是否存在,发送邮件等。

可以通过Job来执行另一个Job或者Transformation,也就是说Transformation和Job都可以作为Job Entry。

1.4.5 Data Stream(数据流)

反映数据在 Step 之间的流向,分为输入流和输出流:

  • Input Stream:是进入一个 Step 时行的堆栈;
  • Output Stream:是离开一个 Step 时行的堆栈。
1.4.6 Hop(节点连接)

用于在Transformation中连接Step,或者在Job中连接Job Entry,是一个数据流的图形化表示,实际上就是执行顺序的体现。

  1. Transformation-Hop:主要表示数据的流向,即从输入、过滤等转换操作,最后到输出。
    • 一个 Hop 代表两个 Step 之间的一个或多个数据流;
    • 一个 Hop 总是代表着一个步骤的输出流和一个步骤的输入流。
  2. Job-Hop:可设置执行条件:
    • 无条件执行;
    • 当上一个Job执行结果为True时执行;
    • 当上一个Job执行结果为False时执行。

一个 Hop 总是代表着两个 Job Entry 之间的连接,并且能够被原始的 Job Entry 设置,无条件地执行下一个 Job Entry,直到成功或者失败。

1.4.7 Kettle结构的一些思考

不知道你通过上面的Kettle这种架构有怎么样的理解?或者说有没有学到某种思想?有的话,说明你的理解能力很好,我需要夸夸你:是个懂得思考的好孩子。没有的话,也不用着急,也许你平时一直都在用,只是没有总结而已。

其实就是复杂问题简单化,分而治之的思想。将一个大任务,分解成不同的小任务,再将小任务分解为一个个的小问题,逐一解决,然后逆向思考或者组装,最后完成大任务。

也许你会不以为然,说这都是些废话,我们平时都是这么解决问题的呀。

我要说的是,还真不一定。我就碰到过很多这样的人,他们看似也是按照上面的步骤在解决问题,但是他们的思维或者思路是顺向的。当然不是说他们遇到选择的时候不做判断,一摸眼走到黑。而是说缺少了那么点儿抽象能力,缺点儿想象力。他们总是不能将一些有共性的东西抽象出来,将一些顺序执行的事抽象成同一层级的事等等,让事与事之间是独立的,只在需要时才把它们串联起来。反而只是顺序的执行,让事与事之间紧密结合,无法重复利用。

说了好多,有点儿绕哈!差点儿自己都绕迷糊了,都讲了点儿啥!封装与复用?

所以,好好体会下,Kettle的结构设计吧,思想是不变的,可以借鉴到多处使用。Kettle的整体结构设计完全就采用了“组件化”的产品思维模式,也符合程序员对自己的要求—“不重复造轮子”。

1.4.8 Kettle 结构图

1.4.9 官网呈现图

1.4.10 实际应用呈现图

1.5 文件格式

设计用户设计好的Transformation 和 Job 可以保存在Xml文件中或某一个特定的数据库中。

Transformation 的设计文件以 .ktr 结尾,保存所有配置好的数据库连接、文件相对路径、字段映射关系等信息。

下面是一个调用已经设计好的转换的Transformation文件的开头部分:

<?xml version="1.0" encoding="UTF-8"?>
<transformation>
  <info>
    <name>CCTA&#x968f;&#x8bbf;&#x6570;&#x636e;&#x5bfc;&#x51fa;</name>
    <description/>
    <extended_description/>
    <trans_version/>
    <trans_type>Normal</trans_type>
    <trans_status>0</trans_status>
    <directory>&#x2f;</directory>
    <parameters>
        <parameter>
            <name>password</name>
            <default_value>Di13M&#x40;43</default_value>
            <description>&#x6570;&#x636e;&#x5e93;&#x5bc6;&#x7801;</description>
        </parameter>
</parameters>
复制代码

Job 的设计文件以 .kjb 结尾。

转载于:https://juejin.im/post/5cff457b6fb9a07ec9560421

### Kettle Scheduler 配置方法及最佳实践 Kettle Scheduler 是一款基于 Spring、Spring MVC 和 BeetlSQL 的调度监控平台,用于管理和调度由 Kettle 客户端创建的作业 (Job) 和转换 (Transformation)[^1]。以下是关于 Kettle Scheduler 的配置方法和最佳实践: #### 1. 环境准备 在开始配置之前,确保以下环境已正确安装并运行: - Java JDK 8 或更高版本。 - Maven 构建工具(如果需要从源码编译)。 - 数据库支持:MySQL 或其他兼容数据库。 - Tomcat 或其他支持 Servlet 的应用服务器。 #### 2. 下载与部署 可以从项目地址下载 Kettle Scheduler 的代码或直接获取预构建的 WAR 文件[^1]。将 WAR 文件放置到 Tomcat 的 `webapps` 目录下,并确保 Tomcat 的配置文件中包含以下内容以支持热加载和调试功能[^2]: ```xml <Context path="/kettle-scheduler" docBase="kettle-scheduler" reloadable="true" debug="0" privileged="true"> </Context> ``` #### 3. 数据库配置 编辑 `application.properties` 文件,配置数据库连接信息。例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/kettle_scheduler?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 确保数据库已初始化,可以参考项目文档中的 SQL 脚本完成表结构的创建[^1]。 #### 4. Quartz 配置 Quartz 是 Kettle Scheduler 中的核心调度组件。可以通过修改 `quartz.properties` 文件调整调度器的行为。例如: ```properties org.quartz.threadPool.threadCount=10 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate ``` #### 5. Kettle API 集成 Kettle Scheduler 使用 Kettle 提供的 API 来执行 Job 和 Transformation。确保项目的依赖中包含 Kettle 的相关 JAR 包。例如,在 `pom.xml` 中添加以下依赖项: ```xml <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-engine</artifactId> <version>9.1.0.0-324</version> </dependency> ``` #### 6. 启动与访问 启动 Tomcat 并通过浏览器访问 Kettle Scheduler 的管理界面。默认路径为 `http://localhost:8080/kettle-scheduler`。登录后即可进行作业和转换的调度与监控。 #### 7. 最佳实践 - **性能优化**:根据实际需求调整 Quartz 的线程池大小,避免因线程不足导致任务积压[^1]。 - **日志管理**:启用详细的日志记录以便排查问题,同时定期清理过期日志以节省存储空间。 - **安全性**:配置 HTTPS 访问以保护敏感数据传输,并使用强密码策略加强用户账户的安全性。 - **备份机制**:定期备份数据库Kettle 文件,防止数据丢失。 ```python # 示例:通过 Python 调用 Kettle API 执行一个简单的转换 from subprocess import Popen, PIPE command = [ "pan.bat", "-file=/path/to/your/transformation.ktr", "-level=Basic" ] process = Popen(command, stdout=PIPE, stderr=PIPE) stdout, stderr = process.communicate() if process.returncode == 0: print("Transformation executed successfully.") else: print(f"Error occurred: {stderr.decode('utf-8')}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值