簡體   English   中英

使用Knime定義Oozie工作流程

[英]Use Knime to define an Oozie workflow

我當前的問題是嘗試開發一組Knime節點,這些節點提供與Apache Oozie的集成。 也就是說,我正在嘗試從Knime內部構建,啟動和監視Oozie工作流程。

我已經為線性Oozie工作流程實現了這一點,但是當需要包括分支時,我已經很沮喪了。

作為背景,讓我解釋一下線性工作流程的實現方式:

Knime / Oozie集成

本質上,我的解決方案將每個Oozie動作表示為一個Knime節點。 這些節點中的每個節點都有2種操作模式,根據某些流量變量的內容調用適當的模式。 這兩種模式是必需的,因為我必須執行兩次Oozie部分(從OozieStartAction到OozieStopAction),第一次迭代生成Oozie工作流,第二次啟動並監視它。 同樣,流變量在此循環的迭代之間保持不變。

  • 在一種操作模式中,節點將特定於其代表的Oozie操作的xml內容附加到整個Oozie工作流xml中,然后進行轉發。

  • 另一方面,該節點只是輪詢Oozie以獲取其表示的動作的狀態。

在此工作流中使用以下流變量:

-OOZIE_XML:包含oozie工作流xml

-OOZIE_JOB_ID:通過組合工作流程啟動的正在運行的oozie作業的ID

-PREV_ACTION_NAME:上一個動作的名稱

在上面的示例中,將逐步執行以下操作:

-OozieStartNode運行,看到它具有空白或沒有OOZIE_XML變量,因此它自己創建了一個變量,設置了基本的工作流應用程序並啟動了xml節點。 它還會創建一個PREV_ACTION_NAME流變量,其值為“ start”。

-第一個OozieGenericAction看到它有一個空白的OOZIE_JOB_ID,因此它將一個新動作附加到接收到的OOZIE_XML中的工作流應用節點上,獲得“名稱”屬性等於PREV_ACTION_NAME的節點,並將其過渡設置為剛創建的動作。 然后,PREV_ACTION_NAME被當前操作的名稱覆蓋。

...

-StopOozieAction只需創建一個結束節點,然后將上一個動作的過渡設置到該結點,就像上一個通用動作一樣。

-在第二個迭代中,OozieStart看到它具有XML數據,因此調用了輔助執行模式。 這會將工作流程XML上傳到hdfs中,並使用此工作流程創建一個新的Oozie作業,並將接收到的JobId轉發為OOZIE_JOB_ID。

-以下具有有效OOZIE_JOB_ID的Oozie動作,只需輪詢Oozie以獲取其動作名稱的狀態,並在其相應動作完成運行后結束執行

我面臨的主要問題是在工作流xml程序集中,因為,其中一個,在使用分支時我無法使用prev節點名稱變量。 如果我有一個連接動作,並且有許多節點鏈接到該動作,則上一個節點將覆蓋其他節點,並且節點關系數據將丟失。

有人對我采取這種方式有廣泛的想法嗎?

在遞歸循環中有一個稱為(Previous Acction Name)的列時如何使用變量來列。 對於所有行,將相同的值保持在同一值似乎過大,但是遞歸循環會將其傳遞給其他列。

順便說一句,你看過這些嗎? https://www.knime.org/knime-big-data-connectors

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM