在 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 中单独处理行的主要内容,如果未能解决你的问题,请参考以下文章