当我查看我的日志时,我发现我的 oozie java 操作实际上在多台机器上运行。
我认为这是因为它们被包裹在 m/r 作业中? (这是正确的吗)
有没有办法在整个集群上只执行一个 java 操作实例?
最佳答案
Java 操作在 Oozie“启动器”作业中运行,只有一个 YARN“映射”容器。
诀窍在于每个 YARN 作业都需要一个应用程序主 (AM) 容器 进行协调。
所以你最终有 2 个容器,_0001
用于 AM 和 _0002
用于 Oozie 操作,可能在不同的机器上。
要控制每个资源的分配,您可以设置以下操作属性来覆盖您的 /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 特定的功能。
关于hadoop - Oozie - 有没有办法在整个集群上只执行一个 java 操作实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043780/