繁体   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