Kettle体系结构与源码分析详细全面.docx

上传人:b****7 文档编号:25689258 上传时间:2023-06-11 格式:DOCX 页数:149 大小:2.86MB
下载 相关 举报
Kettle体系结构与源码分析详细全面.docx_第1页
第1页 / 共149页
Kettle体系结构与源码分析详细全面.docx_第2页
第2页 / 共149页
Kettle体系结构与源码分析详细全面.docx_第3页
第3页 / 共149页
Kettle体系结构与源码分析详细全面.docx_第4页
第4页 / 共149页
Kettle体系结构与源码分析详细全面.docx_第5页
第5页 / 共149页
点击查看更多>>
下载资源
资源描述

Kettle体系结构与源码分析详细全面.docx

《Kettle体系结构与源码分析详细全面.docx》由会员分享,可在线阅读,更多相关《Kettle体系结构与源码分析详细全面.docx(149页珍藏版)》请在冰豆网上搜索。

Kettle体系结构与源码分析详细全面.docx

Kettle体系结构与源码分析详细全面

Kettle程序分析

1.简介

ETL是数据抽取(Extract)、转换(Transform)、装载(Load)的过程。

  

Kettle是一款国外开源的ETL工具,有两种脚本文件transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

2.相关概念

Job:

一个作业,由不同逻辑功能的entry组件构成,数据从一个entry组件传递到另一个entry组件,并在entry组件中进行相应的处理。

Transformation:

完成针对数据的基础转换,即一个数据转换过程。

Entry:

实体,即job型组件。

用来完成特定功能应用,是job的组成单元、执行单元。

Step:

步骤,是Transformation的功能单元,用来完成整个转换过程的一个特定步骤。

Hop:

工作流或转换过程的流向指示,从一个组件指向另一个组件,在kettle源工程中有三种hop,无条件流向、判断为真时流向、判断为假时流向。

3.体系结构

kettle平台是整个系统的基础,包括元数据管理引擎、数据集成引擎、UI和插件管理模块。

(1)元数据管理引擎

元数据管理引擎管理ktr、kjb或者元数据库,插件通过该引擎获取基本信息,主要包括TransMeta、JobMeta和StepMeta三个类。

TransMeta类,定义了一个转换(对应一个.ktr文件),提供了保存和加载该文件的方法;

JobMeta类,同样对应于一个工作(对应一个.kjb文件),提供保存和加载方法;

StepMeta类,保存的是Step的一些公共信息的类,每个类的具体的元数据将保存在显示了StepMetaInterface的类里面。

(2)数据集成引擎

数据集成引擎包括Step引擎、Job引擎和数据库访问引擎三大部分,主要负责调用插件,并返回相应信息。

(3)UI

UI显示Spoon这个核心组件的界面,通过xul实现菜单栏、工具栏的定制化,显示插件界面接口元素,其中的TransGraph类和JobGraph类是用于显示转换和Job的类。

●TransGraph类

TransGraph类与显示

选中转换标签后,红框内的编辑区对象对应org.pentaho.di.ui.spoon.trans包中的TransGraph类。

●JobGraph类

JobGraph类与显示

选中Job标签后,红框内的编辑区对象对应org.pentaho.di.ui.spoon.job包中的JobGraph类。

(4)插件管理模块

Kettle是众多“可供插入的地方”(扩展点)和“可以插入的东西”(扩展)共同组成的集合体。

在我们的生活中,电源接线板就是一种“扩展点”,很多“扩展”(也就是电线插头)可以插在它上面。

插件管理引擎主要负责插件的注册,在Kettle中不管是以后的扩展还是系统集成的功能,本质上来讲都是插件,管理方式和运行机制是一致的。

系统集成的功能点也均实现了对应的扩展接口,只是在插接的说明上略有不同。

Kettle的扩展点包括step插件、jobentry插件、Database插件、Partioner插件、debugging插件。

4.功能模块

Kettle的主要包括四大功能模块:

Chef——工作(job)设计工具 (GUI方式);

Kitchen——工作(job)执行器 (命令行方式);

Spoon——转换(transform)设计工具 (GUI方式);

Span——转换(trasform)执行器 (命令行方式)。

(1)Chef—工作(job)设计器

这是一个GUI工具,操作方式主要通过拖拽。

何谓工作?

多个作业项,按特定的工作流串联起来,形成一项工作。

正如:

我的工作是软件开发。

我的作业项是:

设计、编码、测试!

先设计,如果成功,则编码,否则继续设计,编码完成则开始设计,周而复始,作业完成。

1)Chef中的作业项

转换:

指定更细的转换任务,通过Spoon生成,通过Field来输入参数;

SQL:

sql语句执行;

FTP:

下载ftp文件;

邮件:

发送邮件;

检查表是否存在;

检查文件是否存在;

执行shell脚本:

如dos命令。

批处理:

(注意:

windows批处理不能有输出到控制台)。

Job包:

作为嵌套作业使用。

JavaScript执行:

如果有自已的Script引擎,可以很方便的替换成自定义Script,来扩充其功能;

SFTP:

安全的Ftp协议传输;

HTTP方式的上传/下载。

2)工作流

工作流是作业项的连接方式,分为三种:

无条件,成功,失败。

为了方便工作流使用,KETTLE提供了几个辅助结点单元(也可将其作为简单的作业项):

Start单元:

任务必须由此开始。

设计作业时,以此为起点。

OK单元:

可以编制做为中间任务单元,且进行脚本编制,用来控制流程。

ERROR单元:

用途同上。

DUMMY单元:

什么都不做,主要是用来支持多分支的情况。

3)存储方式

支持XML存储,或存储到指定数据库中。

一些默认的配置(如数据库存储位置……),在系统的用户目录下,单独建立了一个.Kettle目录,用来保存用户的这些设置。

4)LogView:

可查看执行日志。

(2)Kitchen—作业执行器

是一个作业执行引擎,用来执行作业。

这是一个命令行执行工具,参数如下:

   -rep     :

Repositoryname   任务包所在存储名

   -user    :

Repositoryusername   执行人

   -pass    :

Repositorypassword   执行人密码

   -job     :

Thenameofthejobtolaunch 任务包名称

   -dir     :

Thedirectory(don'tforgettheleading/or/)

   -file    :

Thefilename(JobXML)tolaunch

   -level   :

Thelogginglevel(Basic,Detailed,Debug,Rowlevel,Error,Nothing) 指定日志级别

   -log     :

Theloggingfiletowriteto 指定日志文件

   -listdir :

Listthedirectoriesintherepository 列出指定存储中的目录结构。

   -listjobs:

Listthejobsinthespecifieddirectory 列出指定目录下的所有任务

   -listrep :

Listthedefinedrepositories 列出所有的存储

   -norep   :

Don'tlogintotherepository 不写日志

(3)Spoon—转换过程设计器

   GUI工作,用来设计数据转换过程,创建的转换可以由Pan来执行,也可以被Chef所包含,作为作业中的一个作业项。

1)Input-Steps:

输入步骤

Textfileinput:

文本文件输入

可以支持多文件合并,有不少参数,基本一看参数名就能明白其意图。

Tableinput:

数据表输入

实际上是视图方式输入,因为输入的是sql语句。

当然,需要指定数据源(数据源的定制方式在后面讲一下)

Getsysteminfo:

取系统信息

就是取一些固定的系统环境值,如本月最后一天的时间,本机的IP地址之类。

GenerateRows:

生成多行。

这个需要匹配使用,主要用于生成多行的数据输入,比如配合Addsequence可以生成一个指定序号的数据列。

XBaseInput

ExcelInput

XMLInput

2)Output-Steps:

 输出步聚

Textfileoutput:

文本文件输出。

这个用来作测试蛮好,呵呵。

很方便的看到转换的输出。

Tableoutput:

输出到目的表。

Insert/Update:

目的表和输入数据行进行比较,然后有选择的执行增加,更新操作。

Update:

同上,只是不支持增加操作。

XMLOutput:

XML输出。

3)Look-up:

查找操作

●DataBase

●Stream

●Procedure

●Databasejoin

4)Transform 转换

●Selectvalues

对输入的行记录数据的字段进行更改 (更改数据类型,更改字段名或删除) 数据类型变更时,数据的转换有固定规则,可简单定制参数。

可用来进行数据表的改装。

●Filterrows

 对输入的行记录进行指定复杂条件的过滤。

用途可扩充sql语句现有的过滤功能。

但现有提供逻辑功能超出标准sql的不多。

●Sortrows

对指定的列以升序或降序排序,当排序的行数超过5000时需要临时表。

●Addsequence

为数据流增加一个序列,这个配合其它Step(Generaterows,rowsjoin),可以生成序列表,如日期维度表(年、月、日)。

●Dummy

不做任何处理,主要用来作为分支节点。

●JoinRows

对所有输入流做笛卡儿乘积。

●Aggregate

聚合,分组处理

●Groupby

分组,用途可扩充sql语句现有的分组,聚合函数。

但我想可能会有其它方式的sql语句能实现。

●JavaScriptvalue

使用mozilla的rhino作为脚本语言,并提供了很多函数,用户可以在脚本中使用这些函数。

●RowNormaliser

该步骤可以从透视表中还原数据到事实表,通过指定维度字段及其分类值,度量字段,最终还原出事实表数据。

●Uniquerows

去掉输入流中的重复行,在使用该节点前要先排序,否则只能删除连续的重复行。

 

●Calculator

提供了一组函数对列值进行运算,用该方式比用户自定义JAVASCRIPT脚本速度更快。

●MergeRows

用于比较两组输入数据,一般用于更新后的数据重新导入到数据仓库中。

●Addconstants:

增加常量值。

●Rowdenormaliser

同Normaliser过程相反。

●Rowflattener

表扁平化处理,指定需处理的字段和扃平化后的新字段,将其它字段做为组合Key进行扃平化处理。

除了上述基本节点类型外还定义了扩展节点类型 

SPLIT FIELDS:

按指定分隔符拆分字段;

EXECUTESQLSCRIPT:

执行SQL语句;

CUBEINPUT:

CUBE输入;

CUBEOUTPUT:

CUBE输出。

(4)Pan—转换的执行工具

命令行执行方式,可以执行由Spoon生成的转换任务。

同样,不支持调度。

参数与Kitchen类似。

(5)其它

●Connection

可以配置多个数据源,在Job或是Trans中使用,这意味着可以实现跨数据库的任务。

支持大多数市面上流行的数据库。

5.概念模型

Kettle的执行分为两个层次:

Job和Transformation。

两个层次的最主要区别在于数据传递和运行方式。

(1)Transformation(转换)

Transformation(转换)是由一系列被称之为step(步骤)的逻辑工作的网络。

转换本质上是数据流。

下图是一个转换的例子,这个转换从文本文件中读取数据,过滤,然后排序,最后将数据加载到数据库。

本质上,转换是一组图形化的数据转换配置的逻辑结构。

 

转换的两个相关的主要组成部分是step(步骤)和hops(节点连接)。

转换文件的扩展名是.ktr。

1)转换机制

每个转换步骤都是ETL数据流里面的一个任务。

转换步骤包括输入、处理和输出。

输入步骤从外部数据源获取数据,例如文件或者数据库;

处理步骤处理数据流,字段计算,流处理等,例如整合或者过滤。

输出步骤将数据写回到存储系统里面,例如文件或者数据库。

转换步骤示例

2)Steps(步骤)

Steps(步骤)是转换的建筑模块,比如一个文本文件输入或者一个表输出就是一个步骤。

每个步骤用于完成某种特定的功能,通过配置一系列的步骤就可以完成你所需要完成的任务。

a) Step类图简介

每个类都有其特定的目的及扮演的角色。

以TableInput为例,下图说明了这4个类的继承体系。

 

StepInterface继承体系

实现StepInterface接口的类,在转换运行时,将是数据实际处理的位置。

每个执行线程都表示一个实现StepInterface的实例。

BaseStep实现了StepInterface是各step具体实现类的基类。

完成了公用的处理函数,如putRow(),但是对于更具体的processRow()在StepBase的子类中。

StepBase的主要成员有

publicArrayList inputRowSets,outputRowSets;

StepBase的子类每次从inputRowSets中取出一行数据,向outputRowSets中写入一行数据。

 

StepDataInterface继承体系

实现StepDataInterface接口的类为数据类,当插件执行时,对于每个执行执行的线程都是唯一的。

保存于step相关的数据信息,比如行的元数据信息。

 

StepMetaInterface继承体系

实现了StepMetaInterface接口的类为元数据类。

它的职责是保存和序列化特定步骤的实例配置,例如保存步骤的名称、字段名称等,如何生成加载xml或者读写数据库。

StepDialogInterface继承体系

实现了StepDialogInterface接口的类为对话框类,该类实现了该步骤与用户交互的界面,它显示一对话框,通过对话框用户可以根据自己的要求进行步骤的设定。

该对话框类与元数据类关系非常密切,对话框里面的配置数据均会保存在元数据类里面。

b)步骤间交互通信类

步骤之间通信机制

RowSet的实现类,负责步骤之间的相互通信,rowset对象即是前一个step的成员也是后一个step的成员,访问是线程安全的。

RowSet实现类内存快照

RowSet类中包含源step,目标step和由源向目标发送的一个rowMeta和一组data。

其中data数据是以行为单位的队列(queArray)。

一个RowSet作为此源step的outputrowsets的一部分。

同时作为目标step的inputRowsets一部分。

源Step每次向队列中写一行数据,目标step每次从队列中读取一行数据。

RowSet实现类

c)行元数据

所有的data均为object对象。

步骤与步骤之间以行为单位进行处理,自然需要知道每行的结构,即行元数据。

行元数据至少需要包括类型、名称,当然还可能包括字段长度、精度等常见内容。

行元数据不仅在执行的时候需要,而且在转换设置的时候同样需要。

每个步骤的行元数据都会保存在.ktr文件或者数据库里面,所以可以根据步骤名称从TransMeta对象中获取行元数据。

行元数据的UML类图结构如下所示,主要有单元格元数据组成行元数据。

在现有的版本中,支持的数据类型有String、Date、BigNumber、Boolean、SerializableType、Binary、Integer、Numberic。

 行元数据UML类图

3)Hops(节点连接)

Hops(节点连接)是数据的通道,用于连接两个步骤,使得元数据从一个步骤传递到另一个步骤。

节点连接决定了贯穿在步骤之间的数据流,步骤之间的顺序不是转换执行的顺序。

当执行一个转换时,每个步骤都以自己的线程启动,并不断的接受和推送数据。

注意:

所有的步骤是同步开启和运行的,所以步骤的初始化的顺序是不可知的。

因为我们不能在第一个步骤中设置一个变量,然后在接下来的步骤中使用它。

在一个转换中,一个步骤可以有多个连接,数据流可以从一个步骤流到多个步骤。

在Spoon中,hops就想是箭,它不仅允许数据从一个步骤流向另一个步骤,也决定了数据流的方向和所经步骤。

如果一个步骤的数据输出到了多个步骤,那么数据既可以是复制的,也可以是分发的。

4)Trans配置及开启

Trans执行时序图

在真正运行trans之前,还需要对运行模式进行一个设置。

设置结果,会传给TransGraph.start(executionConfiguration)。

配置界面如下所示:

执行转换模式设置

实例化Trans的基本流程如下,Trans类是最后真正执行转换的类。

实例化之前需要配置启动项,保持.ktr文件同步,然后实例化Trans类。

最后,开启后台程序,这样不会影响UI的操作,真正的转换在后台执行。

 实例化Trans流程图

5)Trans执行

trans类的执行由execute()负责,主要包含两个步骤:

转换执行前的准备工作和所有线程的开启。

Trans每一个步骤都会对应一个独立的线程,线程之间通过RowSet进行通信交互。

a)执行准备(prepareExecution)

主要完成对通信类的初始化,对步骤的包装初始化。

最后启动各个步骤初始化线程,即调用各个步骤的init()方法。

准备结束之后,步骤之间的通信机制完成了,各个步骤的初始化工作也完成了。

具体的流程如下所示:

准备执行流程图

b)转换处理执行

Trans转换执行引擎类,通过startThreads()启动步骤线程。

为所有步骤添加监听器,在开启监听进程对所有线程进行监听。

具体的步骤如下图所示:

 

启动所有步骤线程

(2)Jobs(工作)

Jobs(工作)是基于工作流模型的,协调数据源、执行过程和相关依赖性的ETL活动。

Jobs(工作)将功能性和实体过程聚合在了一起,由工作节点连接、工作实体和工作设置组成,工作文件的扩展名是.kjb。

下图是一个工作的例子。

 

一个工作中展示的任务有从FTP获取文件、核查一个必须存在的数据库表是否存在、执行一个转换、发送邮件通知一个转换中的错误等。

最终工作的结果可能是数据仓库的更新等。

1)机制

一个job项代表ETL控制流中的一项逻辑任务。

Job项将会顺序执行,每个job项会产生一个结果,能作为别的分支上job项的条件。

2)类图简介

 Jobentry类图结构

3) Job配置及开启

 

Job开启时序图

Job的开启与Trans相类似,配置执行的参数,检查.kjb文件是否发生变化,实例化一个Job对象,开启该线程。

4)Job执行步骤

Job执行步骤

6.kettle数据流图

程序正常工作需要3种类型的文件:

1)配置文件

程序首先是从系统中读取相关的配置文件,用来初始化程序。

然后加载组件库到程序中,组件的加载需要用到相关的XML文件和图标。

2)工作文件

Kjb文件是job的工作文件,ktr文件是transformation的工作文件,要打开或者运行一个job或者transformation,需要存在相应的kjb或ktr文件。

3)数据文件

需要处理的数据。

(1)顶层数据流图

(2)第一层数据流图

(3)第二层数据流图

1)作业执行

2)转换执行

7.插件扩展机制

Kettle并不能做到热插拔,每次添加或者删除插件的时候都需要重启。

安装或删除插件,只需要在plugins文件夹下添加或删除对应的文件即可。

Kettle的扩展点包括step插件、jobentry插件、Database插件、Partioner插件、debugging插件,这里我们重点介绍step、jobentry、database插件。

暴露的扩展点如下表所示:

表1Step扩展接口

Java接口

基类

主要功能

StepMetaInterface

BaseStepMeta

存储step设置信息

验证step设置信息

序列化step设置信息

提供获取step类的方法

StepDialogInterface

BaseStepDialog

step属性信息配置窗口

StepInterface

BaseStep

处理rows

StepDataInterface

BaseStepData

为数据处理提高数据存储

 表2jobentry扩展接口

Java接口

基类

主要功能

JobEntryInterface

JobEntryBase

存储jobentry设置信息

序列化jobentry设置信息

提供获取jobentry类的方法

执行jobentry任务

JobEntryDialogInterface

JobEntryDialog

jobentry属性信息配置窗口

 表3Database扩展接口

Java接口

基类

主要功能

DatabaseInterface

BaseDatabaseMeta

访问各类数据库

(1)插件的建立

Kettle中的插件包含两部分,一是系统本身就已经实现的功能点,在源码目录src中说明,如kettle-steps.xml;二是系统之外开发的插件,在plugins目录对应插件目录下的plugins.xml说明,plugins/steps/S3CsvInput/plugins.xml。

1)系统集成插件定义

表4系统自带插件定义

内容

位置

插件说明信息

src/kettle-steps.xml,所有插件集中说明

插件源码

插件图片

插件说明xml中说明

插件界面文字说明

插件说明信息中包括描述信息、类名(包括package,反射用)、父级目录(Spoon左侧栏目录)、提示信息和图片信息。

Kettle使用国家化方式编程,所以软件中的所有文字描述均由messages_**.properties提供。

系统集成插件说明xml结构如下:

 

2)扩展插件定义

所有新开发的扩展插件,均放在同一的目录下进行管理,插件管理模块会自动去该目录下进行搜索查找。

插件目录结构如下所示:

表5扩展插件定义

内容

位置

插件说明信息

插件源码

*.jar

插件图片

plugins/插件类型/插件名称/

插件依赖包

plugins/插件类型/插件名称/

扩展插件与系统集成插件的说明内容相似,扩展插件增加ID属性和依赖属性,同时他的目录结构、描述信息和提示信息均能进行国际化配置。

扩展插件说明xml结构如下:

(2)插件的注册

Spoon在启动的时候会对所有插件进行注册,并保存在PluginRegistry类里面。

平台通过查找PluginRegistry注册表获取插件信息。

Kettle安装插件需要进行重启,卸载插件也只需简单的删除plugins目录结构下对应的文件即可。

插件注册时序图

 

plugin注册相关的UML类图

(3)插件查找

PluginRegistry提供了插件查找功能,准确的来说是插件信息的查找功能。

以steps在左侧功能栏里面的显示为例,进行插件查找的说明。

提供了getPlugins获取指定插件类型列表、getPlugin获取指定成名插件、getCateories获取目

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1