确认oozie使用java操作运行的Java代码是否仅在单个节点上运行

时间:2013-01-09 19:45:52

标签: hadoop mapreduce oozie

我正在使用oozie运行工作流程。它有一个运行任意(非map reduce)代码的java动作。此java代码用于在本地文件系统上创建文件和文件夹。我想确保java动作在hadoop集群的单个节点上运行(我的节点是7个节点)。对我来说,这个java动作总是在同一台机器上运行,最好只在hadoop主节点上运行。可能吗?即使有工作也请分享。

2 个答案:

答案 0 :(得分:2)

Java Action就像map reduce作业一样运行,因此您无法控制群集中的哪个节点。

我不确定oozie是否会尊重这一点。但您可以尝试将可接受的映射器故障数设置为较高的值(例如10),如果执行集群节点不是您想要的,则在Java操作中抛出异常(使用InetAddress获取本地计算机名称) / IP)。

然后希望(但不一定保证),您的操作将在非理想的节点上继续失败,并最终在您选择的节点上成功。

有些黑客攻击,但它可能会起作用(这又取决于你是否可以在整个作业失败之前修改地图任务失败次数 - mapred.map.max.attempts,默认为4)

答案 1 :(得分:0)

任何Oozie作业(简单的Java动作或猪动作或hive动作或..)反过来作为map-reduce作业运行。它是Oozie框架的核心属性。

Oozie工作流是在控制依赖关系DAG(直接非循环图)中排列的动作。

参考:Oozie design Architecture

因此,我希望我们无法将文件保存在群集中的所需节点中。