• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Derek-1024

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Kettle简介及使用

1.1 ETL简介

ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种ETL工具的使用,必不可少。

市面上常用的ETL工具有很多,比如Sqoop,DataX,Kettle,Talend等,作为一个大数据工程师,我们最好要掌握其中的两到三种,这里我们要学习的ETL工具是Kettle!

1.2.1 Kettle是什么

Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。

Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。

Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

Kettle(现在已经更名为PDI,Pentaho Data Integration-Pentaho数据集成)。

 

1.2.2 Kettle的两种设计

 

1.2.3 Kettle的核心组件

 

1.2.4 Kettle特点

2.1 Kettle下载

2.2 Kettle安装部署

2.2.1 概述

在实际企业开发中,都是在本地Windows环境下进行kettle的job和Transformation开发的,可以在本地运行,也可以连接远程机器运行

2.2.2 安装

1) 安装jdk,版本建议1.8及以上

2) 下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可

3) 双击Spoon.bat,启动图形化界面工具,就可以直接使用了

2.3 Kettle界面简介

2.3.1 首页

 

2.3.2 转换

2.3.3 作业

 

2.4 Kettle转换初次体验

体验案例:将csv文件用Kettle转换成excel文件

 

 

1) 在Kettle中新建一个转换,然后选择转换下面的“csv文件输入”和“Excel输出”控件

 

2) 双击CSV文件输入文件控件,在弹出的设置框里找到对应的csv文件(尚硅谷大数据技术之Kettle\5.数据\input\01_kettle快速体验.csv),然后点击下面的获取字段按钮,将我们需要的字段加载到kettle中

3)按住键盘SHIFT键,并且点击鼠标左键将两个控件链接起来,链接时选择“主输出步骤”

 

 

 

4)双击Excel输出控件,在弹出的设置框里设置文件输出路径和文件名称,然后点击上面的字段框,依次点击下面的获取字段和最小宽度,获取到输出字段。

 

5)点击左上角的启动按钮,在弹出的设置框里点击启动,执行该转换。

 

6)查看kettle下方执行结果日志以及输出路径的Excel文件内容

 

2.5 Kettle核心概念

2.5.1 可视化编程

Kettle可以被归类为可视化编程语言(Visula Programming Languages,VPL),因为Kettle可以使用图形化的方式定义复杂的ETL程序和工作流。

可视化编程一直是Kettle里的核心概念,它可以让你快速构建复杂的ETL作业和减低维护工作量。它通过隐藏很多技术细节,使IT领域更贴近于商务领域。

Kettle里的代码就是转换和作业。

2.5.2 转换

转换(transaformation)负责数据的输入、转换、校验和输出等工作。Kettle 中使用转换完成数据 ETL 全部工作。转换由多个步骤 (Step) 组成,如文本文件输入,过滤输出行,执行 SQL 脚本等。各个步骤使用跳 (Hop) 来链接。 跳定义了一个数据流通道,即数据由一个步骤流 (跳) 向下一个步骤。在 Kettle 中数据的最小单位是数据行(row),数据流中流动其实是缓存的行集 (RowSet) 。

 

2.5.3 步骤(Step)

步骤(控件)是转换里的基本的组成部分,快速入门的案例中就存在两个步骤,“CSV文件输入”和“Excel输出”。

一个步骤有如下几个关键特性:

①步骤需要有一个名字,这个名字在同一个转换范围内唯一。

②每个步骤都会读、写数据行(唯一例外是“生成记录”步骤,该步骤只写数据)。

③步骤将数据写到与之相连的一个或多个输出跳(hop),再传送到跳的另一端的步骤。

④大多数的步骤都可以有多个输出跳。一个步骤的数据发送可以被设置为分发和复制,分发是目标步骤轮流接收记录,复制是所有的记录被同时发送到所有的目标步骤。

             

2.5.4 跳(Hop)

跳就是步骤之间带箭头的连线,跳定义了步骤之间的数据通路。

 

跳实际上是两个步骤之间的被称之为行集的数据行缓存,行集的大小可以在转换的设置里定义。当行集满了,向行集写数据的步骤将停止写入,直到行集里又有了空间。当行集空了,从行集读取数据的步骤停止读取,直到行集里又有可读的数据行。

 

2.5.5 元数据

每个步骤在输出数据行时都有对字段的描述,这种描述就是数据行的元数据。

通常包含下面一些信息。

①名称:数据行里的字段名是唯一的。

②数据类型:字段的数据类型。

③格式:数据显示的方式,如Integer的#、0.00。

④长度:字符串的长度或者BigNumber类型的长度。

⑤精度:BigNumber数据类型的十进制精度。

⑥货币符号:¥

⑦小数点符号:十进制数据的小数点格式。不同文化背景下小数点符号是不同的,一般是点(.)或逗号(,)。

⑧分组符号:数值类型数据的分组符号,不同文化背景下数字里的分组符号也是不同的,一般是点(.)或逗号(,)或单引号(’)

 

2.5.6 数据类型

数据以数据行的形式沿着步骤移动。一个数据行是零到多个字段的集合,字段包含下面几种数据类型。

①String:字符类型数据

②Number:双精度浮点数。

③Integer:带符号长整型(64位)。

④BigNumber:任意精度数据。

⑤Date:带毫秒精度的日期时间值。

⑥Boolean:取值为true和false的布尔值。

⑦Binary:二进制字段可以包含图像、声音、视频及其他类型的二进制数据。

 

2.5.7 并行

跳的这种基于行集缓存的规则允许每个步骤都是由一个独立的线程运行,这样并发程度最高。这一规则也允许数据以最小消耗内存的数据流的方式来处理。在数据仓库里,我们经常要处理大量数据,所以这种高并发低消耗的方式也是ETL工具的核心需求。

对于kettle的转换,不能定义一个执行顺序,因为所有步骤都以并发方式执行:当转换启动后,所有步骤都同时启动,从它们的输入跳中读取数据,并把处理过的数据写到输出跳,直到输入跳里不再有数据,就中止步骤的运行。当所有的步骤都中止了,整个转换就中止了。

如果你想要一个任务沿着指定的顺序执行,那么就要使用下面所讲的“作业”!

2.5.8 作业

作业 (Job),负责定义一个完成整个工作流的控制,比如将转换的结果发送邮件给相关人员。因为转换(transformation)以并行方式执行,所以必须存在一个串行的调度工具来执行转换,这就是 Kettle中的作业。

 

3.1 作业简介

 

大多数ETL项目都需要完成各种各样的维护工作。例如,如何传送文件;验证数据库表是否存在等等。而这些操作都是按照一定顺序完成。因为转换以并行方式执行,就需要一个可以串行执行的作业来处理这些操作。

 

一个作业包含一个或者多个作业项,这些作业项以某种顺序来执行。作业执行顺序由作业项之间的跳(job hop)和每个作业项的执行结果来决定。

 

3.1.1 作业项

 

作业项是作业的基本构成部分。如同转换的步骤,作业项也可以使用图标的方式图形化展示。但是,作业项和转换步骤有下面几点不同:

 

1. 转换步骤与步骤之间是数据流,作业项之间是步骤流。

 

2. 转换启动以后,所有步骤一起并行启动等待数据行的输入,而作业项是严格按照执行顺序启动,一个作业项执行完以后,再执行下一个作业项。

 

3. 在作业项之间可以传递一个结果对象(result object)。这个结果对象里面包含了数据行,它们不是以数据流的方式来传递的。而是等待一个作业项执行完了,再传递个下一个作业项。

 

4. 因为作业顺序执行作业项,所以必须定义一个起点。有一个叫“开始”的作业项就定义了这个点。一个作业只能定一个开始作业项。

 

3.1.2 作业跳

 

作业的跳是作业项之间的连接线,他定义了作业的执行路径。作业里每个作业项的不同运行结果决定了做作业的不同执行路径。作业跳一共分为下面三种情况:

 

①无条件执行:不论上一个作业项执行成功还是失败,下一个作业项都会执行。这是一种蓝色的连接线,上面有一个锁的图标。

 

 

 

②当运行结果为真时执行:当上一个作业项的执行结果为真时,执行下一个作业项。通常在需要无错误执行的情况下使用。这是一种绿色的连接线,上面有一个对钩号的图标。

 

 

 

③当运行结果为假时执行:当上一个作业项的执行结果为假或者没有成功执行是,执行下一个作业项。这是一种红色的连接线,上面有一个红色的停止图标。

 

 

 

在图标上单击就可以对跳进行设置。

 

3.2 作业初体验

 

作业案例:将3.10.1章节的转换嵌入作业中执行,执行成功或者失败都发送邮件提醒

 

1) 点击左上角的文件,新建一个作业

 

 

 

2) 按照下图设置作业项和作业跳

 

 

 

3) 转换作业项设置,选择要嵌入的转换文件

 

 

 

4) 发送邮件作业项设置,

 

 

 

 

 

5) 分别尝试作业执行成功和失败,查看kettle发送的邮件信息

 

4.1 数据库资源库

 

数据库资源库是将作业和转换相关的信息存储在数据库中,执行的时候直接去数据库读取信息,很容易跨平台使用

 

1)点击右上角connect,选择Other Resporitory

 

 

 

2) 选择Database Repository

 

 

 

3) 建立新连接

 

 

 

 

 

4) 填好之后,点击finish,会在指定的库中创建很多表,至此数据库资源库创建完成

 

 

 

5) 连接资源库,默认账号密码为admin

 

 

 

6) 将之前做过的转换导入资源库

 

(1)选择从xml文件导入

 

 

 

(2)随便选择一个转换

 

 

 

(3)点击保存,选择存储位置及文件名

 

 

 

(4)打开资源库查看保存结果

 

 

 

4.2 文件资源库

 

将作业和转换相关的信息存储在指定的目录中,其实和XML的方式一样,创建方式跟创建数据库资源库步骤类似,只是不需要用户密码就可以访问,跨平台使用比较麻烦

 

1)选择connect

 

 

 

2)点击add后点击Other Repositories

 

 

 

3)选择File Repository

 

 

 

4)填写信息

 

 

 

Kettle调优

 

1、调整JVM大小进行性能优化,修改Kettle根目录下的Spoon脚本。

 

 

 

参数参考:

 

-Xmx2048m:设置JVM最大可用内存为2048M。

 

-Xms1024m:设置JVM促使内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

 

-Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

 

-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

 

2、 调整提交(Commit)记录数大小进行优化,Kettle默认Commit数量为:1000,可以根据数据量大小来设置Commitsize:1000~50000

 

3、尽量使用数据库连接池;

 

4、尽量提高批处理的commit size;

 

5、尽量使用缓存,缓存尽量大一些(主要是文本文件和数据流);

 

6、Kettle是Java做的,尽量用大一点的内存参数启动Kettle;

 

7、可以使用sql来做的一些操作尽量用sql;

 

Group , merge , stream lookup,split field这些操作都是比较慢的,想办法避免他们.,能用sql就用sql;

 

8、插入大量数据的时候尽量把索引删掉;

 

9、尽量避免使用update , delete操作,尤其是update,如果可以把update变成先delete,  后insert;

 

10、能使用truncate table的时候,就不要使用deleteall row这种类似sql合理的分区,如果删除操作是基于某一个分区的,就不要使用delete row这种方式(不管是deletesql还是delete步骤),直接把分区drop掉,再重新创建;

 

11、尽量缩小输入的数据集的大小(增量更新也是为了这个目的);

 

12、尽量使用数据库原生的方式装载文本文件(Oracle的sqlloader, mysql的bulk loader步骤)。

 

posted on 2021-01-14 16:18  Derek-1024  阅读(745)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3