Kettle插件架構及擴展

一.插件架構

       Kettle採用的是一種插件的架構,開發者可以不用修改Kettle自己的代碼,通過引入獨立開發的代碼即可擴展Kettle的功能。這樣獨立的代碼我們可以成其爲插件。Kettle可以動態的加載並運行這些插件。


以下是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文件來完成,如下圖:



插件有兩個表示屬性:

  • 插件類型:類型由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()。


歡迎關注公衆號:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章