1.4 Kettle 数据同步工具详细教程

工具介绍

一、概述

Kettle,又名 Pentaho Data Integration(PDI),是一个开源的数据集成工具,最初由 Pentaho 公司开发。它能够从多种数据源提取、转换并加载(ETL)数据,适用于数据仓库建设、数据迁移和数据同步等场景。
在这里插入图片描述

二、架构

Kettle 的架构主要由以下几个组件组成:

  1. Spoon:图形化设计工具,用于创建和测试 ETL 作业和转换。
  2. Pan:命令行工具,用于执行数据转换。
  3. Kitchen:命令行工具,用于执行作业(Job)。
  4. Carte:轻量级 Web 服务器,用于远程执行和监控 ETL 作业和转换。
三、基本工作流程

Kettle 的工作流程主要分为以下几个步骤:

  1. 数据源连接

    • 通过 Spoon 连接不同的数据源,如数据库、文件、Web 服务等。
  2. 创建转换(Transformation)

    • 转换是数据处理的核心单元,定义了从数据源到目标的数据流。使用 Spoon 创建转换图,通过不同的步骤(Steps)实现数据提取、转换和加载。
  3. 创建作业(Job)

    • 作业是对多个转换的调度和控制,定义了 ETL 过程的执行顺序和依赖关系。
  4. 执行和监控

    • 使用 Spoon 进行本地测试和调试。通过 Pan 和 Kitchen 在生产环境中执行转换和作业。使用 Carte 提供的 Web 界面进行远程监控和管理。
四、使用场景
  1. 数据仓库建设

    • 从多个异构数据源提取数据,进行清洗、转换后加载到数据仓库中。
  2. 数据迁移

    • 将数据从旧系统迁移到新系统,支持不同数据库之间的数据传输。
  3. 数据同步

    • 定期从业务系统抽取数据,并同步到数据分析平台或报表系统。
  4. 数据集成

    • 集成来自多个业务系统的数据,形成统一的视图,支持业务分析和决策。
五、优越点
  1. 图形化界面

    • Spoon 提供直观的图形化设计界面,降低了 ETL 开发的门槛,方便快速构建和测试 ETL 流程。
  2. 多种数据源支持

    • 支持多种数据源类型,包括关系型数据库、NoSQL 数据库、文件(CSV、Excel、XML 等)、Web 服务等,具有很强的扩展性。
  3. 丰富的转换和作业步骤

    • 提供了丰富的数据处理步骤,如过滤、聚合、连接、排序、数据清洗等,能够满足复杂的数据处理需求。
  4. 可扩展性

    • 支持通过插件机制扩展功能,用户可以根据需要自定义数据处理逻辑。
  5. 社区支持和文档

    • 作为一个开源项目,Kettle 拥有广泛的社区支持和丰富的文档资源,用户可以方便地获取帮助和分享经验。
  6. 跨平台

    • 基于 Java 开发,支持在多种操作系统(Windows、Linux、macOS)上运行。

安装部署

安装 Pentaho Data Integration (Kettle) 的过程相对简单,但为了确保安装和配置正确,下面是一个详细的步骤指南:

一、前提条件

  1. Java 环境
    • 确保系统上已安装 JDK(Java Development Kit),建议使用 JDK 8 或更高版本。
    • 验证 Java 安装:
      java -version
      

二、下载 Kettle

  1. 访问 Pentaho 官网

    • 访问 Pentaho 社区下载页面,选择最新的 Pentaho Data Integration (PDI) 版本。
  2. 下载 PDI

    • 选择合适的版本(通常是 ZIP 或 TAR.GZ 格式),下载到本地系统。

三、解压文件

  1. 解压 PDI 文件
    • Windows 系统:
      unzip pdi-ce-8.3.0.0-371.zip -d C:\pentaho
      
    • Linux / macOS 系统:
      tar -zxvf pdi-ce-8.3.0.0-371.tar.gz -C /opt
      

四、配置环境变量

为了方便使用,可以将 PDI 的 bin 目录添加到系统的 PATH 环境变量中。

  1. 编辑环境变量

    • Windows:

      1. 右键“计算机”,选择“属性”。
      2. 点击“高级系统设置”。
      3. 在“系统属性”窗口中,点击“环境变量”。
      4. 在“系统变量”中找到 Path,编辑并添加 PDI bin 目录的路径,例如 C:\pentaho\data-integration\bin
    • Linux / macOS:

      nano ~/.bashrc
      

      在文件末尾添加:

      export PENTAHO_HOME=/opt/data-integration
      export PATH=$PATH:$PENTAHO_HOME
      

      保存并退出编辑器,然后使更改生效:

      source ~/.bashrc
      

五、启动 Spoon

  1. 启动 Spoon 图形化工具
    • Windows 系统:
      直接双击 Spoon.bat
    • Linux / macOS 系统:
      进入 PDI 目录并运行 Spoon 脚本:
      cd /opt/data-integration
      ./spoon.sh
      

六、安装和配置 JDBC 驱动

如果需要连接特定的数据库,需要下载相应的 JDBC 驱动并将其放置在 PDI 的 lib 目录中。

  1. 下载 JDBC 驱动

    • 例如,对于 MySQL 数据库,从 MySQL 官方网站 下载 JDBC 驱动。
  2. 将驱动放置到 lib 目录

    • 将下载的驱动 JAR 文件复制到 data-integration/lib 目录中。

七、验证安装

  1. 创建测试转换
    • 打开 Spoon 工具。
    • 新建一个转换(Transformation)。
    • 添加输入步骤,例如“CSV 文件输入”。
    • 配置输入文件路径,添加输出步骤,例如“表输出”。
    • 运行转换,确保可以成功执行。

八、常见问题解决

  1. Java 版本问题

    • 如果遇到 Java 版本不兼容的问题,确保使用的是 JDK 而不是 JRE,并且版本符合要求。
  2. 内存设置

    • 在执行大规模数据处理任务时,可以通过修改 spoon.shSpoon.bat 文件中的 JVM 参数来增加内存分配。例如:
      export JAVA_OPTS="-Xms1024m -Xmx4096m"
      

通过以上步骤,可以成功安装和配置 Pentaho Data Integration (Kettle)。该工具的图形化界面 Spoon 使得数据集成任务的设计和执行变得直观且高效。配置 JDBC 驱动后,Kettle 能够连接多种数据源,适用于广泛的数据集成和处理场景。

使用案例

使用 Kettle 同步 MySQL 数据到 Hive 表的案例

本案例将介绍如何使用 Kettle 将 MySQL 数据同步到 Hive 表,包括任务优化、参数传递以及每一步的详细解释。

一、前提条件
  1. 已安装并配置好 Kettle(Pentaho Data Integration)。
  2. 已安装并配置好 MySQL 和 Hive。
  3. 下载并放置好 MySQL 和 Hive 的 JDBC 驱动到 Kettle 的 lib 目录中。
二、创建 ETL 转换和作业
  1. 打开 Spoon

    启动 Spoon 工具:

    ./spoon.sh
    
  2. 创建新转换

    新建一个转换(Transformation),将其保存为 mysql_to_hive.ktr

  3. 参数传递

    在转换中设置参数,以便动态传递数据库连接信息和表名。

    • 点击菜单栏的“编辑”->“设置变量”。
    • 添加以下参数:
      • MYSQL_HOST
      • MYSQL_PORT
      • MYSQL_DB
      • MYSQL_USER
      • MYSQL_PASSWORD
      • MYSQL_TABLE
      • HIVE_DB
      • HIVE_TABLE
  4. 添加步骤

    1. 表输入(Table Input)

      • 添加“表输入”步骤,并命名为 MySQL Input
      • 配置数据库连接:
        • 新建 MySQL 数据库连接,使用以下参数:
          • 主机名:${MYSQL_HOST}
          • 端口:${MYSQL_PORT}
          • 数据库名:${MYSQL_DB}
          • 用户名:${MYSQL_USER}
          • 密码:${MYSQL_PASSWORD}
      • SQL 查询:
        SELECT * FROM ${MYSQL_TABLE}
        
    2. 字段选择(Select Values)

      • 添加“字段选择”步骤,并命名为 Select Fields
      • 连接到 MySQL Input 步骤。
      • 在“字段选择”中,选择需要传输到 Hive 的字段。
    3. 表输出(Table Output)

      • 添加“表输出”步骤,并命名为 Hive Output

      • 配置数据库连接:

        • 新建 Hive 数据库连接,使用以下参数:
          • 主机名:HiveServer2 的主机地址
          • 端口:10000
          • 数据库名:${HIVE_DB}
          • 用户名:Hive 用户名(如有)
          • 密码:Hive 密码(如有)
      • 表名:

        ${HIVE_TABLE}
        
      • 确保“truncate table”选项被选中,以便每次同步时清空目标表。

  5. 保存转换

    保存转换为 mysql_to_hive.ktr

三、创建作业
  1. 创建新作业

    新建一个作业(Job),将其保存为 mysql_to_hive_job.kjb

  2. 添加开始(Start)和作业(Job)步骤

    1. 开始(Start)

      • 添加“开始”步骤。
    2. 设置变量(Set Variables)

      • 添加“设置变量”步骤,并连接到“开始”步骤。
      • 配置以下变量:
        • MYSQL_HOSTlocalhost
        • MYSQL_PORT3306
        • MYSQL_DByour_mysql_database
        • MYSQL_USERyour_mysql_user
        • MYSQL_PASSWORDyour_mysql_password
        • MYSQL_TABLEyour_mysql_table
        • HIVE_DByour_hive_database
        • HIVE_TABLEyour_hive_table
    3. 转换(Transformation)

      • 添加“转换”步骤,并连接到“设置变量”步骤。
      • 选择转换文件 mysql_to_hive.ktr
四、任务优化
  1. 优化 JDBC 驱动

    • 使用最新版本的 MySQL 和 Hive JDBC 驱动,以提高连接性能和稳定性。
  2. 调优转换步骤

    • 在“表输入”步骤中使用分页查询(如 LIMITOFFSET)以减少内存消耗。
    • 使用“字段选择”步骤过滤掉不必要的字段,减少数据传输量。
  3. 并行处理

    • 如果数据量较大,可以在“转换”设置中启用并行处理,设置合适的并行度。
五、代码解释
  • 参数传递:在作业中使用“设置变量”步骤动态传递数据库连接信息,确保灵活性和可维护性。
  • MySQL 输入:使用“表输入”步骤从 MySQL 数据库中提取数据,通过配置参数动态生成 SQL 查询。
  • 字段选择:通过“字段选择”步骤过滤需要同步的字段,提高同步效率。
  • Hive 输出:使用“表输出”步骤将数据加载到 Hive 表中,配置参数确保目标表动态变化。
六、运行和测试
  1. 运行作业

    在 Spoon 中打开 mysql_to_hive_job.kjb,点击“运行”按钮启动作业。

  2. 验证结果

    • 确认 MySQL 数据库中的数据成功同步到 Hive 表。
    • 在 Hive 中执行查询验证数据正确性:
      SELECT * FROM your_hive_table;
      

以上案例详细介绍了如何使用 Kettle 将 MySQL 数据同步到 Hive 表的全过程,包括创建转换和作业、参数传递、任务优化以及每一步的详细配置和解释。通过合理配置和优化,可以确保数据同步的高效性和稳定性。

性能优化

在使用 Kettle(Pentaho Data Integration)进行数据处理和集成时,性能优化是确保高效运行和资源有效利用的关键。以下是一些性能优化策略和技巧:

一、转换和作业优化

  1. 优化数据源查询

    • 过滤数据:在 Table Input 步骤中使用 SQL 过滤条件,减少不必要的数据提取。
      SELECT * FROM your_table WHERE condition
      
    • 分页查询:对于大数据量,使用分页查询(LIMIT 和 OFFSET)减少单次加载的数据量。
  2. 减少数据处理步骤

    • 简化转换逻辑:尽量减少不必要的步骤和复杂的逻辑,只保留必要的转换操作。
    • 合并步骤:合并可以在同一操作中完成的多个步骤,减少步骤之间的数据传输。
  3. 并行处理

    • 调整并行度:在转换设置中调整并行度,通过 Set Number of Copies 参数设置步骤的并行执行数量。
    • 多线程执行:在作业设置中启用并行处理步骤选项,允许多个步骤同时运行。
  4. 优化内存使用

    • 分配足够的 JVM 内存:在 Spoon 启动脚本(spoon.bat 或 spoon.sh)中调整 JVM 内存分配参数,例如:
      export JAVA_OPTS="-Xms1024m -Xmx4096m"
      
    • 合理设置缓存:在转换步骤(如 Sort RowsGroup By)中设置合适的缓存大小,避免频繁的磁盘 I/O。

二、数据库和文件优化

  1. 使用批量处理

    • 批量插入:在 Table Output 步骤中启用批量插入选项,提高数据写入效率。
    • 分批提交:在 Table Output 步骤中设置提交记录数,减少每次提交的记录数量,避免单次提交过多数据。
  2. 索引和分区

    • 数据库索引:确保源数据库表和目标数据库表上的查询和连接字段已建立索引,提高查询和插入性能。
    • 分区表:对大数据表进行分区处理,减少单个分区内的数据量,提高查询和插入效率。

三、网络和硬件优化

  1. 网络优化

    • 网络带宽:确保网络带宽足够,避免数据传输瓶颈。
    • 本地处理:尽量在数据源和目标都在本地网络内处理数据,减少网络延迟。
  2. 硬件优化

    • 硬件资源:确保服务器硬件资源(CPU、内存、磁盘 I/O)充足,以支持大规模数据处理。
    • SSD 存储:使用 SSD 存储设备,减少磁盘 I/O 延迟,提高读写速度。

四、Kettle 配置优化

  1. 调优 Kettle 配置文件

    • kettle.properties:在 Kettle 的配置文件(kettle.properties)中设置优化参数,例如:
      KETTLE_CARTE_OBJECT_TIMEOUT_MINUTES=1440
      KETTLE_COMPATIBILITY_MEMORY_DONT_COMMIT_STREAM=Y
      
  2. 日志级别

    • 减少日志量:在转换和作业设置中调整日志级别,减少详细日志输出,减轻日志记录带来的性能开销。
      KETTLE_LOG_LEVEL=Minimal
      

五、性能监控和调试

  1. 性能监控

    • 使用 Kettle 提供的性能监控工具,监控转换和作业的执行时间、内存使用情况和各步骤的性能指标。
    • 通过性能监控图表(Performance Graphs)识别瓶颈步骤并进行优化。
  2. 性能调试

    • 使用 Kettle 的调试功能,逐步执行转换,检查每个步骤的输入和输出数据,发现并解决性能问题。
    • 通过日志文件分析错误和性能问题,进行有针对性的优化。

示例:优化一个简单的 MySQL 到 Hive 的数据同步转换

-- 在 MySQL 中执行的查询,使用过滤条件减少数据量
SELECT id, name, value FROM source_table WHERE update_time > '2023-01-01';
# Spoon 启动脚本中增加 JVM 内存分配
export JAVA_OPTS="-Xms2048m -Xmx8192m"
# kettle.properties 中的优化配置
KETTLE_CARTE_OBJECT_TIMEOUT_MINUTES=1440
KETTLE_COMPATIBILITY_MEMORY_DONT_COMMIT_STREAM=Y
KETTLE_LOG_LEVEL=Minimal

通过以上各种优化策略,可以显著提升 Kettle 在数据同步和处理中的性能。合理使用并行处理、优化数据源查询、减少不必要的步骤、调优内存使用以及监控和调试性能,是确保高效运行的关键。

总结

Kettle(Pentaho Data Integration)是一个功能强大且易于使用的数据集成工具,适用于多种数据处理和集成场景。其图形化界面和丰富的功能使其成为构建数据仓库、进行数据迁移和数据同步的理想选择。凭借其广泛的数据源支持、可扩展性和社区资源,Kettle 成为企业级数据处理和集成的有力工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串根据给定关键词进行高亮显示

问题 一般使用搜索引擎的时候我们会发现,搜索出来的内容都对我们搜索的关键词进行了高亮显示, 这样我们能很直观的看出是不是我们想要的结果, 最近我也遇到了类似的功能, 因为关于舆情的系统使用到了ES, 一开始心想ES本身就有支持的API实现起来不难, 但我这里的需求还不太一样…

Altera的JTAG电路下载模块为何上下拉电阻,不可不知的秘密

一、FPGA背景信息 当前的FPGA市场上有国际和国产两大体系,国际排名,一直很稳定,国际上前三名Xilinx、Altera、Lattice,国内FPG厂商也在填补空白,低端、中低端市场上发力,替代潮流已在兴起,目前…

【驱动篇】龙芯LS2K0300之单总线驱动

实验过程 实验目的: 在龙芯开发板上面使用单总线驱动DS18B20温度传感器 ① 根据原理图连接DS18B20模块 ② 将i2c0引脚的功能复用为GPIO ③ 注册字符设备,按照DS18B20的读写时序编写读写驱动接口 ④ 编写测试用例解析传感器的数值 原理图 将板子上…

马尔可夫聚类算法

马尔可夫聚类算法(Markov Clustering Algorithm,MCL)是一种用于图聚类的算法,广泛应用于生物信息学、社交网络分析、推荐系统等领域。 其核心思想是模拟随机游走过程,通过迭代地扩散和收缩图上的概率分布来识别图中的…

章十九、JavaVUE —— 框架、指令、声明周期、Vue-cli、组件路由、Element

目录 一、 框架 ● vue.js 框架 ● 特点 ● Vue 安装 二、 第一个vue程序 ● 创建项目 ​编辑 ● 导入 vue.js ● 创建vue对象,设置属性,使用模版渲染到页面 介绍 — Vue.js (vuejs.org) 三、 vue指令 ● v-text ● v-html ● v-…

LeetCode 671.二叉树第二小的结点

这个题我们可以用数组辅助完成,然后进行排序后,再用再进行取值,这是我的代码块: /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/void Preorde…

uniapp scroll-view 虚拟滚动【适合每条数据高度一致】

基本原理 有一万条数据,我们按10条一页来进行分组,会有1000页页面滚动到第10页的位置的时候,10页之后和10页之前是不用被显示的,可以直接隐藏掉如果是数据删除,页面会不流畅,会卡顿一下,且滚动位…

vue-cli搭建

一、vue-cli是什么? vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板;预先定义 好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个 骨架项目,这个骨架项目就是脚手架,…

QT事件处理系统之二:窗口部件的事件拦截,以及事件的传递顺序

1、案例说明 在父窗口中为selfLineEdit窗口安装事件过滤器,这样我们可以在父窗口中首先拦截来自于selfLineEdit本身产生的事件,并且决定该事件最终是否继续传递到selfLineEdit窗口本身。 2、关键代码 selfLineEdit.cpp #include "selfLineEdit.h" #include &l…

ECM和MEMS技术在心肺声学监测中的应用

心肺疾病是全球范围内导致死亡的主要原因。因此,对这些疾病迹象的准确和快速评估对于为患者提供适当的医疗保健至关重要。心血管疾病最重要的迹象之一是心脏周期的异常。大多数呼吸系统疾病则表现为呼吸周期的异常。有多种方法可以监测心脏和肺部的周期。听诊是监测…

pytest测试框架pytest-xdist插件并发执行测试用例

Pytest提供了丰富的插件来扩展其功能,本章介绍下插件pytest-xdist,主要是提供并行测试、分布式测试、循环测试等功能,可以加快测试速度。 pytest-xdist官方显示没有严格的python和pytest版本限制。 pytest-xdist安装 使用pip命令安装: pip…

java内置线程池

线程池常见方法 如何获取线程池对象 缓存线程池 自定义任务对象 public class MyRunnable implements Runnable{private int id;public MyRunnable(int id) {this.id id;}Overridepublic void run() {String name Thread.currentThread().getName();System.out.println(&quo…

DWG转PDF字体研究记录

1.前言 最近需要对PDF中的符合业务规则的文字进行提取,发现有些文字不是文字信息形式存储,而是polyline形式表达,意味着仅仅有形体上的表达,丢失了原本的文字信息。 经过沟通得知,这些PDF是AutoCAD软件导出的&#xf…

Linux 特殊变量 $?

一. 说明 在 Linux 和其他类 Unix 系统中,$? 是一个特殊的变量,用于获取上一个命令的退出状态码。 退出状态码是一个整数值,通常用来表示命令的执行结果。 ⏹退出状态码的含义 0:命令成功执行。0以外的数字:命令执…

STM32 串口通讯

使用STM32的串口通讯,接收串口助手的数据,并且将接收到的数据返回串口,重定义printf功能。 配置引脚信息 由于每次新建工程都需要配置信息,比较麻烦,好在STM32CubeIDE提供了导入.ioc文件的功能,可以帮我们…

华为Mate 70系列,将首发搭载纯血鸿蒙正式版,第四季度登场

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 6月22日消息,华为在HDC 2024上已经宣布,HarmonyOS NEXT开启开发者先锋用户Beta测试。 首批覆盖Mate 60系列、Mate X5系列、MatePad Pro 13.2英寸。 根据官方公布的时间表&…

Sublime Text for Mac v4.0 【注册汉化版】代码编辑器(保姆级教程,简单易懂,轻松上手)

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、Sublime Text 安装出现“软件已损坏,无法打开。要移到废纸篓”问题,解决办法: 2、汉化补丁安装3、输入注册码4、查询使用期限 安装完成!!! 效果 一、下…

【牛客深信服总结】

1.反转链表 2.协议 交换机路由器 3.手写代码,一个二叉树,从根节点到叶子结点算一条路径,打印出所有路径。 4.一些数据结构相关的问题,包括栈和队列的应用,链表和数组的区别,最大堆和最小堆,动态…

OpenCV机器学习-人脸识别

一 基本概念 1 计算机视觉与机器学习的关系 计算机视觉是机器学习的一种应用,而且是最有价的应用。 2 人脸识别 哈尔(haar)级联方法 Harr是专门为解决人脸识别而推出的; 在深度学习还不流行时,Harr已可以商用; 深度学习方法&am…

示例:WPF中如何绑定ContextMenu和Menu

一、目的:开发过程中,有些模块的右键ContextMenu菜单是需要动态显示的,既是根据不同条件显示不同的菜单,很多是通过代码去生成ContextMenu的MenuItem,本文介绍通过绑定的方式去加载ContextMenu,Menu菜单栏的…