在 Oozie 中单独处理行

Posted

技术标签:

【中文标题】在 Oozie 中单独处理行【英文标题】:Process Rows Separately in Oozie 【发布时间】:2015-07-28 08:55:06 【问题描述】:

我有一个包含 2 列的简单输入文件,例如

pkg1 date1
pkg2 date2
pkg3 date3
...
...

我想创建一个 oozie 工作流,它将分别处理每一行。对于每一行,我想一个接一个地运行多个操作(Hive,Pig..),然后处理另一行。 但这比我预想的要困难。我想,我必须以某种方式创建一个循环并遍历它。

您能给我一些架构方面的建议吗?

【问题讨论】:

【参考方案1】:

Oozie 不支持循环/循环,因为它是有向无环图

https://oozie.apache.org/docs/3.3.0/WorkflowFunctionalSpec.html#a2.1_Cycles_in_Workflow_Definitions

此外,没有内置方法(据我所知)将数据从 Hive 读取到 Oozie 工作流程中并使用它来控制 Oozie 工作流程的流程。

您可以有一个单独的 Oozie 工作流程来启动一些自定义流程(例如 Shell 操作),并在该流程中从 Hive 读取数据,并为每个条目启动一个新的、单独的 Oozie 工作流程。

【讨论】:

【参考方案2】:

我完全同意@Mattinbits,您必须使用一些程序代码(shell 脚本、Python 等)来运行循环并触发相应的 Pig/Hive 任​​务。

但是如果您的流程必须等待任务完成后才能启动下一批,协调部分的实现可能会变得有点复杂。我可以想到一种非常邪恶的方式来使用 Oozie 进行协调......

写下一个通用的 Oozie 工作流,它为一组参数运行 Pig/Hive 操作,作为属性传递 写下一个“主模板”Oozie 工作流,它只是将上面的 WF 作为具有虚拟属性值的子工作流运行 将模板分为 3 部分:XML 标头、子工作流调用(带有实际属性值的占位符)和 XML 页脚 然后,您的循环将动态构建实际的“主”工作流程,方法是连接标题、对子工作流程的第一组值调用、第二组值的另一个调用等,然后是页脚——最后将工作流提交到 Oozie 服务器(使用 REST 或命令行界面)

当然,还有其他一些事情需要处理——为子工作流操作生成唯一名称、链接它们、处理错误。平常的东西。

【讨论】:

以上是关于在 Oozie 中单独处理行的主要内容,如果未能解决你的问题,请参考以下文章

hue无法执行批处理作业解决方案

Oozie

SQL 中单引号 和一些特殊字符的处理

哪个是 MFC C++ 中单选组合框的事件处理程序

oozie中管理datax脚本方法实践

oozie说明(本文参考多处,自己留看)