使用Knime定义Oozie工作流程

时间:2015-02-03 12:07:16

标签: java oozie knime

我目前的问题是尝试开发一组与Apache Oozie集成的Knime节点。即我正试图在Knime内构建,启动和监控Oozie工作流程。

我已经在线性Oozie工作流程中实现了这一功能,但在需要包含分支时却变得非常难过。

作为背景,让我解释一下我为线性工作流程做到这一点的方式:

Knime/Oozie integration

基本上我的解决方案将每个Oozie Action表示为Knime Node。这些节点中的每一个都有2种操作模式,根据某些流量变量的内容调用正确的操作模式。这两种模式是必需的,因为我必须执行Oozie部分(OozieStartAction到OozieStopAction)两次,第一次迭代生成Oozie工作流,第二次迭代启动和监视它。此外,流变量在此循环的迭代之间保持不变。

  • 在一种操作模式中,节点将特定于其所代表的Oozie操作的xml内容附加到整个Oozie工作流xml,然后将其转发。

  • 另一方面,该节点只是轮询Oozie所代表的行动的状态。

此工作流程中使用以下流量变量:

-OOZIE_XML:包含oozie workflow xml

-OOZIE_JOB_ID:使用已组装的工作流程启动的正在运行的oozie作业的ID

-PREV_ACTION_NAME:上一个操作的名称

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

-OozieStartNode运行,看到它有一个空白或没有OOZIE_XML变量,因此它自己创建一个,设置基本的workflow-app并启动xml节点。它还会创建一个PREV_ACTION_NAME流var,其值为" start"。

- 第一个OozieGenericAction看到它有一个空白的OOZIE_JOB_ID,因此它将新动作附加到收到的OOZIE_XML中的workflow-app节点,得到带有" name"的节点。属性等于PREV_ACTION_NAME并将其转换设置为刚刚创建的操作。然后,使用当前操作的名称覆盖PREV_ACTION_NAME。

...

- StopOozieAction只是创建一个结束节点并设置之前操作的转换,就像之前的通用操作一样。

- 在第二次迭代中,OozieStart看到它有XML数据,因此调用了辅助执行模式。这会将工作流XML上载到hdfs并使用此工作流创建新的Oozie作业,并将收到的JobId转发为OOZIE_JOB_ID。

- 以下Oozie Actions,拥有有效的OOZIE_JOB_ID,只需向Oozie推荐其行动名称'状态,一旦他们的相应操作完成运行就结束执行

我面临的主要问题是工作流程xml程序集,因为,在使用分支时,我无法使用prev节点名称变量。如果我有一个链接到它的许多节点的连接操作,一个prev节点将覆盖其他节点,节点关系数据将丢失。

有没有人有什么广泛的想法,我可以采取哪种方式?

1 个答案:

答案 0 :(得分:0)

如何将变量用于列,其中递归循环中的列称为(Previous Acction Name)。对于所有行来说,似乎过度杀戮保持相同的值,但是递归循环会像任何其他列一样传递它。

顺便说一下,你见过这些吗? https://www.knime.org/knime-big-data-connectors