KettleKettle使用培训使用培训使用培训使用培训部门:部门:EOMS讲师:刘晓源讲师:刘晓源第1页,共38页目录•目的目的•Kettle介绍介绍•Kettle实战实战•使用原则使用原则第2页,共38页目的 了解Kettle的作用与使用第3页,共38页Kettle介绍•目的目的•Kettle介绍介绍–总体介绍总体介绍–家族介绍家族介绍–概念定义概念定义•Kettle实战实战•使用原则使用原则本节目标本节目标:1、知道Kettle是什么,能做什么2、知道Kettle的一些概念第4页,共38页总体介绍 Kettle是一个ETL(Extract-Transform-Load )工具集,它为用户管理来自不同数据库的数据,描述自己要做的数据操作提供图形化的操作界面第5页,共38页总体介绍使用使用Kettle能为我们项目带来以下好处:能为我们项目带来以下好处:•对于业务人员 转换和工作(Job)以步骤流的方式呈现,更加直观,业务人员与开发人员沟通时可以把注意力集中在业务上•对于开发人员 1、图形化界面更加直观,开发人员上手快,加快开发效率。
即使是二次开发,图形化的步骤展现使二次开发人员更快进入开发状态,不用把精力浪费在代码阅读和业务逻辑分析上 2、Kettle的javascript步骤运行开发人员通过编写JavaScript代码实现业务逻辑,并且允许在JavaScript调用java文件来实现复杂数据采集过滤逻辑这样,开发人员只须把注意力放在写业务采集逻辑上就可以了,降低了开发采集的难度 3、Kettle提供方便的调试工具和详细的日志文件,方便开发人员跟踪调试 4、Kettle提供计算I/O、数据库读/写次数工具,方便开发人员在开发完成后观察,以便性能调优第6页,共38页总体介绍要在项目上更好的发挥要在项目上更好的发挥Kettle的优势,还有以下一些问题待解决:的优势,还有以下一些问题待解决:1、调用方式问题:Kettle只提供了简单的调用方式自己本身不提供轮训等工具目前测试通过的只用两种:一种是在图形界面上点运行另一种是在命令行模式输入运行命令如果要实现轮训采集,需要通过Kettle的API实现调用,即需要融合Kettle并且如果涉及到及时采集,除了融合问题,对采集的算法和性能也有很高的要求2、性能问题:由于Kettle只是一个很灵活的采集工具,实现同一个采集的方式可以有很多种,性能的瓶颈还是在采集算法上(后面还有一些提高性能的原则),所以为了更好的使用Kettle,需要整理一些常用的采集算法和采集模板。
3、Kettle本身的问题:Kettle属于开源产品,该产品还在不断的完善中,虽然有一个比较详细的使用文档,但是并不是很详细,很多细节必须上论坛找或更多的只能通过看源代码并且写demo来测试验证而且由于Kettle的实现是基于多线程的,存在一定的线程bug第7页,共38页Kettle介绍•目的目的•Kettle介绍介绍–总体介绍总体介绍–家族介绍家族介绍–概念定义概念定义•Kettle实战实战•使用原则使用原则第8页,共38页KETTLE介绍 Kettle家族目前包括4个产品:Spoon、Pan、CHEF、Kitchen•SPOON 允许你通过图形界面来设计ETL转换过程(Transformation)例如,从EOMS系统抽取信息,并把这些信息存储到一个文本文件里的转换任务如下:第9页,共38页KETTLE介绍第10页,共38页KETTLE介绍•PAN 允许你批量运行由Spoon设计的ETL转换 (例如使用一个时间调度器)Pan是一个后台执行的程序,没有图形界面 •CHEF 允许你创建任务(Job) 任务通过允许每个转换,任务,脚本等等,更有利于自动化更新数据仓库的复杂工作。
任务通过允许每个转换,任务,脚本等等任务将会被检查,看看是否正确地运行了下面是一个Chef的任务图)•KITCHEN 允许你批量运行用允许你批量运行用Chef设计的设计的jobs例如用scheduler)) •KITCHEN 允许你批量使用由Chef设计的任务 (例如使用一个时间调度器)KITCHEN也是一个后台运行的程序第11页,共38页Kettle介绍•目的目的•Kettle介绍介绍–总体介绍总体介绍–家族介绍家族介绍–概念定义概念定义•Kettle实战实战•使用原则使用原则第12页,共38页概念介绍 本节介绍本节介绍Kettle中的两个重要的定义:中的两个重要的定义: Transformation (转换)(转换) 和和 Job(工作),用(工作),用Kettle可以话可以话Transformation 图和图和Job图 Job与Transformation的差别是:Transformation专注于数据的ETL,而Job的范围比较广,可以是Transformation,也可以是Mail、SQL、Shell、FTP等等,甚至可以是另外一个Job。
•Transformation(转换)定义(转换)定义 如右图,如右图,Transformation主要是由主要是由Step 和和Hop组成 Transformation主要包括几个主要包括几个 原型概念:原型概念:Step、、Hop、、 InputStream、、OutputStream、、 Row、、Value下面给出定义下面给出定义–Step(步骤)如右图的“Table Input”,每个Step就是一个元操作–Hop(跳跃线)连接Step的线,代表了数据的流向–InputStream(输入流)输入Step的数据流–OutputStream(输出流)从Step输出的数据流–Row(记录行)InputStream中存在多个Row,Row存在多个Value–Value(值)值,带类型的值,例如String类型的值第13页,共38页概念介绍•Job(工作)定义(工作)定义–Job Entry(工作实体)执行具体的任务(例如调用转换)–Hop连接Job Entry的线可以指定是否有条件的执行例如,根据前一个Job Entry 执行的结果,判断是否执行这条Hop指向的下一个Job Entry 。
第14页,共38页Kettle实战实战•目的目的•Kettle介绍介绍•Kettle实战实战–常用常用Step介绍介绍–检查、调试、运行检查、调试、运行–日志日志–采集采集demo•使用原则使用原则第15页,共38页常用常用Step介绍介绍•生成字段和空操作–生成记录功能:用于生成数据行用途:一般用来模拟数据测试用–空操作 功能:什么都不做 用途:1、汇总数据集(待汇总的数据集必须 结构(字段)一致)2、调试时作为展现数据的节点第16页,共38页常用常用Step介绍介绍•Table Input和Table Outputa1表字段名:a,bA2表字段名:a,c在这个demo中可以看出两点:1、数据流(输入/出流)中的数据字段名与生成该数据流的Step自动获取2、表输出是按照数据流的数据自动匹配并且插入到输出表中的第17页,共38页常用常用Step介绍介绍•字段选择用于筛选数据流中的字段第18页,共38页常用常用Step介绍介绍•获取系统信息 可以通过获取系统信息获取系统的一些信息,以及获取调用转换时传入的参数第19页,共38页。
常用常用Step介绍介绍•Merge Join MergeJoin Step做的连接运算是在内存中运行的它有一个特殊要求:要求做集合的连接key必须已经按相同方式排好序了(无论是用Sql的orderby还是用KETTLE提供的排序记录Step),要不然会出现不可预知的错误,例如右图第20页,共38页常用常用Step介绍介绍修改后的图第21页,共38页Kettle实战实战•目的目的•Kettle介绍介绍•Kettle实战实战–常用常用Step介绍介绍–检查、调试、检查、调试、运行运行–日志日志–采集采集demo•使用原则使用原则第22页,共38页检查、调试、运行•右图红框标出的工具栏– 运行– 预览– 调试– 检查第23页,共38页检查、调试、运行– 检查 检查功能检查出图中的应用级错误(不能检查出逻辑错误)点击 检查按钮后弹出下图:红色的为错误,必须解决黄色的为警告,可能会引起错误,不一定需要解决第24页,共38页检查、调试、运行– 预览 能够看到执行完该步骤后的输出数据(有的可能看不到,例如,需要参数传入的执行步骤)。
一般在个别步骤中也有预览按钮第25页,共38页检查、调试、运行– 调试 调试转换,可以输入参数和设置要观测的步骤从中可以看到每个步骤的输出结果第26页,共38页检查、调试、运行– 运行 运行后可以看到一下结果对部分参数解释一下:读:从输入流读取的记录数写:输出到输出流的记录数输入:从数据库读取的记录数输出:输出到数据库的记录数错误:执行时错误数激活:Step执行的状态时间:执行该步骤的时间速度:该Step处理每行记录用的时间Pri/in/out:显示因为该Step的输入缓存为空,或者输出缓存已满而等待进入休眠的时间 第27页,共38页Kettle实战实战•目的目的•Kettle介绍介绍•Kettle实战实战–常用常用Step介绍介绍–检查、调试、运行检查、调试、运行–日志日志–采集采集demo•使用原则使用原则第28页,共38页日志 在Kettle的日志机制中存储方式分两类,一类是存储在文本日志里,一类是存储在数据库里本节暂时只介绍记录在日志里的情况第29页,共38页日志日志级别:日志级别:可以点击可以点击 记录配置日志级别。
记录配置日志级别Nothing不显示任何输出Error只显示ErrorMinimal只记录必要日志Basic默认日志级别Detailed输出对话级别的日志Debug输出调试级别的日志Row level每一行的操作都会记录日志第30页,共38页Kettle实战实战•目的目的•Kettle介绍介绍•Kettle实战实战–常用常用Step介绍介绍–检查、调试、运行检查、调试、运行–日志日志–采集采集demo•使用原则使用原则第31页,共38页采集demo•采集demo1和采集demo2说明 两个demo实现的业务是一样的,区别是demo2多用了几个step去实现连接功能意在说明两点:1、如果一条sql实现不了的,可以通过Kettle提供的step实现2、Kettle很灵活,所以从性能上考虑,对开发人员的要求也是挺高的,下面一节会给出一些原则第32页,共38页采集demo•采集demo1第33页,共38页采集demo•采集demo2第34页,共38页使用原则•目的目的•Kettle介绍介绍•Kettle实战实战•使用原则使用原则第35页,共38页使用原则使用原则•尽量使用数据库连接池•尽量提高批处理的commit size•尽量使用缓存,缓存尽量大一些(主要是文本文件和数据流)•Kettle 是Java 做的,尽量用大一点的内存参数启动Kettle.•可以使用sql 来做的一些操作尽量用sql Group , merge , stream lookup ,split field 这些操作都是比较慢的,想办法避免他们.,能用sql 就用sql•插入大量数据的时候尽量把索引删掉•尽量避免使用update , delete 操作,尤其是update , 如果可以把update 变成先delete , 后insert .第36页,共38页。
使用原则使用原则•能使用truncate table 的时候,就不要使用delete all row 这种类似sql•合理的分区•如果删除操作是基于某一个分区的,就不要使用delete row 这种方式(不管是delete sql 还是delete 步骤),直接把分区drop 掉,再重新创建•尽量缩小输入的数据集的大小(增量更新也是为了这个目的)•尽量使用数据库原生的方式装载文本文件(Oracle 的sqlloader , mysql 的bulk loader 步骤)•尽量不要用kettle 的calculate 计算步骤,能用数据库本身的sql 就用sql ,不能用sql 就尽量想办法用procedure , 实在不行才是calculate 步骤.•要知道你的性能瓶颈在哪,可能有时候你使用了不恰当的方式,导致整个操作都变慢,观察kettle log 生成的方式来了解你的ETL操作最慢的地方•远程数据库用文件+FTP 的方式来传数据 ,文件要压缩只要不是局域网都可以认为是远程连接)第37页,共38页演讲完毕,谢谢观看!第38页,共38页。