我目前的问题是尝试开发一组与Apache Oozie集成的Knime节点。即我正试图在Knime内构建,启动和监控Oozie工作流程。
我已经在线性Oozie工作流程中实现了这一功能,但在需要包含分支时却变得非常难过。
作为背景,让我解释一下我为线性工作流程做到这一点的方式:
基本上我的解决方案将每个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:上一个操作的名称
在上面的示例中,将逐步执行以下操作:
- 第一个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节点将覆盖其他节点,节点关系数据将丢失。
有没有人有什么广泛的想法,我可以采取哪种方式?
答案 0 :(得分:0)
如何将变量用于列,其中递归循环中的列称为(Previous Acction Name)。对于所有行来说,似乎过度杀戮保持相同的值,但是递归循环会像任何其他列一样传递它。
顺便说一下,你见过这些吗? https://www.knime.org/knime-big-data-connectors