一.插件架构
Kettle采用的是一种插件的架构,开发者可以不用修改Kettle自己的代码,通过引入独立开发的代码即可扩展Kettle的功能。这样独立的代码我们可以成其为插件。Kettle可以动态的加载并运行这些插件。
image.png
以下是Kettle现有插件类型:
转换步骤插件
作业项插件
分区方法插件
数据库类型插件
资源库类型插件
视图插件
大数据插件
Kettle内部对象与外部插件在功能上没有任何区别,因为它们使用的是同样的API,只是在运行时加载方式不同。
Kettle内部有一个插件注册系统,负责加载各种内部和外部插件,在Kettle环境初始化后,该系统通过读取以下配置文件来加载内部对象:
kettle-steps.xml:内部转换步骤
kettle-job-entries.xml:内部作业项
kettle-partition-plugins.xml:内部分区类型
kettle-database-types.xml:内部数据库类型
kettle-repositories.xml:内部资源库类型
在加载完成所有的内部对象后,就要搜索可用外部插件。这一步通过浏览代码中的plugins/目录的各个子目录下的.jar文件来完成,如下图:
image.png
插件有两个表示属性:
插件类型:类型由PluginTypeInterface接口定义。其实现类有StepPluginType、JobEntryPluginType等。
插件ID:一个字符串数组,用来唯一标识一个插件。
上文提到Kettle现有插件类型,下面一一介绍:
二.转换步骤插件
源码所在位置org.pentaho.di.trans.steps包下。
转换步骤插件包括四个Java类,分别实现四个接口:
StepMetaInterface:提供步骤元数据并处理并行化。
StepInterface:根据元数据实现具体功能。
StepDataInterface:用来存储步骤临时数据等。
StepDialogInterface:Spoon里的图形界面,用来编辑步骤元数据。
1.StepMetaInterface
此接口负责步骤里所有和元数据相关的任务。
2.StepDataInterface
实现此接口的类用来维护步骤的执行状态,以及存储临时对象。可以把输出行的元数据、数据库连接、输入输出流等存储到这个对象里。
3.StepDialogInterface
实现此接口的类用来提供一个用户界面,用户通过这个界面输入元数据。
4.StepInterface
实现此接口的类读取上个步骤传来的数据行,利用StepMetaInterface对象里定义的元数据,逐行转换和处理上个步骤传来的数据行。通常开发者需要重载以下几个方法:
init():步骤初始化方法,如果没有任何初始化工作,则不用重载这个方法。
dispose():释放资源的方法,例如关闭数据库连接等。
processRow():实际处理数据的地方,只要该方法返回true,转换引擎就会重复调用此方法。
三.作业项插件
作业项插件只需要实现两个接口:
JobEntryInterface:管理作业项元数据及执行作业项。
JobEntryDialogInterface:作业项的对话框类,接收用户输入元数据。
Kettle中的步骤是并行执行的,作业是串行执行的,是根据所定义的先后顺序来执行的。
1.JobEntryInterface
最重要的方法是:
execute():执行作业项并返回结果对象。
四.分区插件
分区方法决定了一行数据属于哪个分区,通过分区插件可以根据业务开发新的分区规则。
要实现分区插件,需实现两个接口:
Partitioner
StepDialogInterface
1.Partitioner
此接口中有一个重要方法需要实现:getPartition()。
作者:阿猫阿狗Hakuna
链接:https://www.jianshu.com/p/09cb0bf81275
共同学习,写下你的评论
评论加载中...
作者其他优质文章