2

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

4

2 回答 2

2

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

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

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

有点 hack,但它可能会起作用(同样,这取决于您是否可以在整个作业失败之前修改 map 任务失败的次数 - mapred.map.max.attempts,默认情况下为 4)

于 2013-01-09T23:30:05.363 回答
0

任何 Oozie 作业(简单的 java 操作或 pig 操作或 hive 操作或..)依次作为 map-reduce 作业运行。它是 Oozie 框架的核心属性。

Oozie 工作流是安排在控制依赖 DAG(直接无环图)中的操作。

参考:Oozie 设计架构

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

于 2013-01-11T06:32:20.013 回答