你好,我们最近从mr1升级到了yarn。我知道容器是一个抽象的概念,但我不明白一个容器可以生成多少个jvm任务(map、reduce、filter等),或者说容器是否可以在多个map或reduce任务之间重复使用。我在以下博客中阅读到:What is a container in YARN?
"每个mapper和reducer都在自己的容器上运行以保持准确性!"
这意味着如果我查看AM日志,我应该看到分配的容器数量等于map任务(失败|成功)的数量加上reduce任务的数量,这正确吗?
我知道容器的数量会随着应用程序生命周期的变化而改变,基于AM请求、拆分、调度器等。
但有没有一种方法可以为给定的应用程序请求初始的最小容器数量。我认为一种方法是配置公平调度程序队列。但还有其他可以指定它的方法吗?
在MR的情况下,如果我有 mapreduce.map.memory.mb = 3gb
和 mapreduce.map.cpu.vcores=4
。我还有 yarn.scheduler.minimum-allocation-mb = 1024m
和 yarn.scheduler.minimum-allocation-vcores = 1
。
这是否意味着我将获得一个具有4个核心的容器,或者是4个具有一个核心的容器?
此外,不清楚在哪里可以指定 mapreduce.map.memory.mb
和 mapreduce.map.cpu.vcores
。它们应该在客户端节点上设置还是也可以每个应用程序设置?
另外,从RM UI或AM UI中是否有一种方法可以查看分配给给定应用程序的当前容器?
rsrcRequest.setNumContainers(numContainers);
您能确认它是通过编程方式设置的,而不是通过任何参数设置的吗?