最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

开源ETL工具之Kettle介绍

[复制链接]
跳转到指定楼层
楼主
发表于 2019-11-7 11:35:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
What起源
Kettle是一个Java编写的ETL工具,主作者是Matt Casters,2003年就开始了这个项目,最新稳定版为7.1。 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解决方案。
架构
Kettle是一个组件化的集成系统,包括如下几个主要部分: 1.Spoon:图形化界面工具(GUI方式),Spoon允许你通过图形界面来设计Job和Transformation,可以保存为文件或者保存在数据库中。 也可以直接在Spoon图形化界面中运行Job和Transformation, 2.Pan:Transformation执行器(命令行方式),Pan用于在终端执行Transformation,没有图形界面。 3.Kitchen:Job执行器(命令行方式),Kitchen用于在终端执行Job,没有图形界面。 4.Carte:嵌入式Web服务,用于远程执行Job或Transformation,Kettle通过Carte建立集群。 5.Encr:Kettle用于字符串加密的命令行工具,如:对在Job或Transformation中定义的数据库连接参数进行加密。

基本概念
1.Transformation:定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比Job粒度更小一级的容器,我们将任务分解成Job,然后需要将Job分解成一个或多个Transformation,每个Transformation只完成一部分工作。 2.Step:是Transformation内部的最小单元,每一个Step完成一个特定的功能。 3.Job:负责将Transformation组织在一起进而完成某一工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的Job,当这几个Job都完成了,也就说明这项任务完成了。 4.Job Entry:Job Entry是Job内部的执行单元,每一个Job Entry用于实现特定的功能,如:验证表是否存在,发送邮件等。可以通过Job来执行另一个Job或者Transformation,也就是说Transformation和Job都可以作为Job Entry。 5.Hop:用于在Transformation中连接Step,或者在Job中连接Job Entry,是一个数据流的图形化表示。

在Kettle中Job中的JobEntry是串行执行的,故Job中必须有一个Start的JobEntry;Transformation中的Step是并行执行的。
Why组件对比
目前,ETL工具的典型代表有:
  • 商业软件:Informatica PowerCenter,IBM InfoSphere DataStage,Oracle Data Integrator,Microsoft SQL Server Integration Services等
  • 开源软件:Kettle,Talend,Apatar,Scriptella等
纯java编写,可以跨平台运行,绿色无需安装,数据抽取高效稳定。


相对于传统的商业软件,Kettle是一个易于使用的,低成本的解决方案。
Spoon是基于SWT(SWT使用了本地操作系统的组件库,性能更好,界面更符合本地操作系统的风格)开发的,支持多平台:
  • Microsoft Windows: all platforms since Windows 95, including Vista
  • Linux GTK: on i386 and x86_64 processors, works best on Gnome
  • Apple's OSX: works both on PowerPC and Intel machines
  • Solaris: using a Motif interface (GTK optional)
  • AIX: using a Motif interface
  • HP-UX: using a Motif interface (GTK optional)
  • FreeBSD: preliminary support on i386, not yet on x86_64
Kettle使用场景
  • Migrating data between applications or databases 在应用程序或数据库之间进行数据迁移
  • Exporting data from databases to flat files 从数据库导出数据到文件
  • Loading data massively into databases 导入大规模数据到数据库
  • Data cleansing 数据清洗
  • Integrating applications 集成应用程序
How1.下载
https://community.hds.com/docs/DOC-1009855
也可以自己build,Maven项目架构。
mvn clean package -Drelease -Dmaven.test.skip=true2.安装
安装JRE1.7+(Pan需要在JRE1.7+下运行)。 Kettle免安装,在windows环境下,直接解压到指定目录即可。
3.实践
(1)在Spoon中设计Transformation和Job 运行Transformation和Job有2种方式。 方式一:直接在Spoon中运行。 方式二:在控制台终端运行(可以传递命令行参数),例如:
  • 使用Pan运行Transformation:Pan.bat /file C:\\Users\\chench9\\Desktop\\Tutorial\\hello.ktr
  • 使用Kitchen运行Job:Kitchen.bat /file C:\\Users\\chench9\\Desktop\\Tutorial\\hello.kjb list /norep
(2)运行结果Step Metrics解读
  • Read: the number of rows coming from previous Steps.
  • Written: the number of rows leaving from this Step toward the next.
  • Input: the number of rows read from a file or table.
  • Output: the number of rows written to a file or table.
  • Errors: errors in the execution. If there are errors, the whole row will become red.
(3)Kettle Java API 可以通过Java API的方式,将Kettle与第三方应用程序集成。 Kettle本身不提供对外的REST API,但是有一个Step为REST Client。 引用了Kettle所依赖的lib包之后,可以通过Java API方式在第三方应用中运行Job或Transformation
(4)集群部署 Kettle集群是一个Master/Slave架构。 Kettle集群是通过Carte服务组建的,集群模式主要用于远程执行Job。 本质上来讲Carte就是一个Web服务,其实就是使用了一个嵌入式Jetty容器。 初次调用Carte HTTP服务时用户名/密码: cluster/cluster。
  • 启动master节点
启动master节点很简单,直接启动Carte服务即可,如:sh carte.sh localhost 8080 或者通过配置文件启动Master节点,首先编辑Master配置内容如下:
[AppleScript] 纯文本查看 复制代码
<slave_config>
    <slaveserver>
        <name>master1</name>
        <hostname>moc.bankcomm.com</hostname>
        <port>8080</port>
        <username>cluster</username>
        <password>cluster</password>
        <master>Y</master>
    </slaveserver>
</slave_config>
  • 启动slave节点
在Slave节点上添加配置文件:slave_dyn_8080.xml,编辑内容如下:
[AppleScript] 纯文本查看 复制代码
<slave_config>
    <masters>
        <slaveserver>
            <name>master1</name>
            <hostname>moc.bankcomm.com</hostname>
            <port>8080</port>
            <username>cluster</username>
            <password>cluster</password>
            <master>Y</master>
        </slaveserver>
    </masters>

    <report_to_masters>Y</report_to_masters>
    
    <slaveserver>
        <name>slave1-8080</name>
        <hostname>kettle.slave1</hostname>
        <port>8080</port>
        <username>cluster</username>
        <password>cluster</password>
        <master>N</master>
    </slaveserver>
</slave_config>
启动slave节点:Carte.bat D:\\pdi-ce-8.1-SNAPSHOT\\data-integration\\slave_dyn_8080.xml
(5)Kettle内置的Step https://wiki.pentaho.org/display ... ntegration+Plug-Ins Kettle插件
(6) 总结
  • 使用简单,学习曲线平缓
  • 无需编写SQL就可以实现ETL
注意事项
  • 运行Transformation或Job时,在Spoon中设置的环境变量在重启之后需要重新设置;如果是命令行参数,在终端运行时作为参数传递即可。
  • 在使用Java API调用Job和Transformation时,除了需要引用kettle所依赖的lib包,在代码中初始化Kettle运行时环境之前,需要添加插件。参考:https://stackoverflow.com/questi ... e-to-plugin-missing
  • 在使用Java API运行Job和Transformation时,环境变量可以在2个地方设置:${user.home}/.kettle/kettle.properties,System.setProperty()
  • 在Transformation中类型为command line argument的参数在集成Kettle API的应用中可以通过System.setProperty()设置并传递
kettle的坑
1.集群化部署 (1)不能在<slaveserver>节点中使用<network_interface>替代<hostname>,否则启动时报错:
[AppleScript] 纯文本查看 复制代码
java.lang.NullPointerException
        at org.pentaho.di.core.Const.getIPAddress(Const.java:1775)
        at org.pentaho.di.[url]www.SlaveServerConfig.checkNetworkInterfaceSetting[/url](SlaveServerConfig.java:378)
        at org.pentaho.di.www.SlaveServerConfig.<init>(SlaveServerConfig.java:200)
        at org.pentaho.di.[url]www.Carte.parseAndRunCommand[/url](Carte.java:202)
        at org.pentaho.di.[url]www.Carte.main[/url](Carte.java:162)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
(2)当集群中的slave节点失效之后,master不会更新slave列表。 虽然官方宣称每隔30秒就会检测slave的状态,但是实际部署时发现master并不会更新slave列表。
2.高可用支持 3.如何避坑 4.基于开源版我们可以用来做什么,如何实现定时调度,如何实现高可用 5.开源社区版本与企业版本主要区别是什么? 企业版Kettle不是独立的,而是集成在Pentaho Business Analytics商业套件中,作为ETL组件。在企业版中Kettle多一个Pentaho资源库。
【参考资料】 http://www.pentaho.com/ Pentaho主页 https://github.com/pentaho/pentaho-kettle Kettle源码 https://wiki.pentaho.com/display/EAI/ 文档(最新) https://forums.pentaho.com/ Kettle论坛 《解决方案:使用PDI构建开源ETL解决方案 》

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-25 12:58

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表