美文网首页大数据
Kettle插件架构及扩展

Kettle插件架构及扩展

作者: 阿猫阿狗Hakuna | 来源:发表于2018-11-29 17:52 被阅读5次

    一.插件架构

           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()。


    欢迎关注公众号:


    image.png

    相关文章

      网友评论

        本文标题:Kettle插件架构及扩展

        本文链接:https://www.haomeiwen.com/subject/iwgfcqtx.html