Oozie - 有没有办法在整个集群上只执行一个java动作实例?

时间:2016-08-19 16:26:06

标签: hadoop yarn oozie

当我查看我的日志时,我发现我的oozie java操作实际上是在多台计算机上运行。

我认为那是因为他们被包裹在m / r工作中? (这是正确的)

有没有办法在整个集群上只执行一个java动作实例?

1 个答案:

答案 0 :(得分:2)

Java动作在Oozie“启动器”作业中运行,只有一个YARN“地图”容器

诀窍是每个YARN作业都需要应用程序主(AM)容器进行协调。
所以你最终得到2个容器,_0001用于AM,_0002用于Oozie操作,可能在不同的机器上。

要控制每个资源的资源分配,您可以设置以下Action属性来覆盖您的/etc/hadoop/conf/*-site.xml配置和/或硬编码默认值(顺便说一下,这些默认值适用于每个版本和每个发行版) :

  • oozie.launcher.yarn.app.mapreduce.am.resource.mb
  • oozie.launcher.yarn.app.mapreduce.am.command-opts (将最大堆大小与全局内存最大值对齐)
  • oozie.launcher.mapreduce.map.memory.mb
  • oozie.launcher.mapreduce.map.java.opts (...)
  • oozie.launcher.mapreduce.job.queuename (如果你有多个不同优先级的队列)

<小时/> 好吧,实际上,上面的解释并不完全正确......在HortonWorks发行版中,你最终会得到2个容器,正如预期的那样。
但是使用 Cloudera发行版,您通常最终只能使用一个容器,在同一个Linux进程中同时运行AM和操作。

我不知道他们是怎么做到的。也许在某处有一个通用的YARN配置,也许它是Cloudera特有的功能。