2

我是 Apache Oozie 的新手,据我了解,工作流/协调器作业必须在 xml 文件中预定义。但是,在我的问题中,我需要动态定义工作流程,这取决于我的工作流程中可能有额外操作的输入文件。有没有办法以编程方式做到这一点?

4

2 回答 2

2

我完全同意 Mzf 的回答,但想添加一些内容来回答 jamiet 的问题并创建一个更一般的答案。如果将您的工作流拆分为多个流/案例是有意义的,那么决策控制节点就是要走的路。

但是,有时有必要 - 就像评论中提出的 jamiet 一样 - 您想要调用工作流/操作以对集合进行迭代。这意味着每次运行工作流时,工作流的可能长度可能从仅 1 个操作到 100 个不等,具体取决于集合。这不是您可以使用简单的决策控制节点来表示的。我的一个用例是生成一个工作流来为配置文件中存在的每个表/数据库对执行 sqoop 导入。

我对这个问题的解决方案是让 1 个工作流调用可能带有一些参数的自定义脚本。然后,此脚本构建“动态工作流”的 workflow.xml 文件,其中包含与您的集合对应的操作。构建工作流.xml 后,脚本将调用oozie job指向新创建的工作流.xml 的 job.properties 文件。

于 2017-01-19T10:40:42.700 回答
1

工作流和协调器是预定义的文件 - 这并不意味着您无法控制工作流操作。

如果您的工作流程中有多个案例/流程,您可以添加决策控制节点来控制工作流程中的流程。

例如,假设您说如果我有输入 A,它将执行 ActionA_1、ActionA_2,对于输入案例 B 将执行 ActionB_1、ActionB_2,使用 决策控制节点选择要遵循的执行路径

于 2015-04-18T21:20:13.717 回答