【发布时间】:2012-12-24 02:09:18
【问题描述】:
我正在使用 oozie 运行工作流程。它有一个运行任意(非 map reduce)代码的 java 操作。此 java 代码用于在本地文件系统上创建文件和文件夹。我想确保 java 操作在 hadoop 集群的单个节点上运行(我的是 7 个节点)。对我来说,最好是这个 java 操作总是在同一台机器上运行,最好只在 hadoop 主节点上运行。可能吗?即使有解决方法也请分享。
【问题讨论】:
我正在使用 oozie 运行工作流程。它有一个运行任意(非 map reduce)代码的 java 操作。此 java 代码用于在本地文件系统上创建文件和文件夹。我想确保 java 操作在 hadoop 集群的单个节点上运行(我的是 7 个节点)。对我来说,最好是这个 java 操作总是在同一台机器上运行,最好只在 hadoop 主节点上运行。可能吗?即使有解决方法也请分享。
【问题讨论】:
Java Action 就像 map reduce 作业一样运行,因此您无法控制它将在集群中的哪个节点上运行。
我不确定 oozie 是否会尊重这一点。但是您可以尝试将可接受的映射器故障数设置为较高的值(例如 10),然后如果执行集群节点不是您想要的(使用 InetAddress 获取本地计算机名称),则在您的 Java 操作中引发异常/IP)。
然后希望(但不一定保证),您的操作将继续在不理想的节点上失败,并最终在您选择的节点上成功。
有点破解,但它可能会起作用(同样,这取决于您是否可以在整个作业失败之前修改地图任务失败的次数 - mapred.map.max.attempts,默认为 4)
【讨论】:
任何 Oozie 作业(简单的 java 操作或 pig 操作或 hive 操作或..)依次作为 map-reduce 作业运行。它是 Oozie 框架的核心属性。
Oozie 工作流是安排在控制依赖 DAG(有向无环图)中的操作。
所以,我希望我们无法将文件保存在集群中所需的节点中。
【讨论】: