当使用更多节点时,hadoop 没有创建足够的容器

hadoop not creating enough containers when more nodes are used

所以我正在尝试 运行 AWS R3.4xLarge 机器上的一些 hadoop 作业。他们有 16 个 vcores 和 122 GB 可用的 ram。

我的每个映射器都需要大约 8 GB 的 ram 和一个线程,因此这些机器非常适合这项工作。

我已经 mapreduce.memory.mb 设置为 8192, 并且 mapreduce.map.java.opts 设置为 -Xmx6144 这将导致每台机器上大约有 14 个映射器(实际上接近 12 个)运行。

这实际上是 2 个从属设置的情况,其中调度程序显示集群利用率为 90%。

然而,当扩展到 4 个从属时,hadoop 似乎根本不会创建更多的映射器。事实上,它创造的更少。

在我的 2 个从站设置中,我在任何时候都有不到 30 个映射器 运行ning,在四个从站上,我有大约 20 个。机器的利用率不到 50%。

vcores 在那里,物理内存在那里。到底少了什么?为什么 hadoop 不创建更多容器?

事实证明,无论您多么努力地想弄明白,这都是 hadoop 中永远没有意义的事情之一。

yarn-default 中有一个名为 yarn.nodemanager.heartbeat.interval-ms 的设置。 这设置为 1000。显然它控制以毫秒为单位的分配容器之间的最短时间。

这意味着它每秒只创建一个新的地图任务。这意味着容器的数量受限于我拥有的容器数量运行*完成一个容器所需的时间。

通过将此值设置为 50 或更好的 1,我能够获得 hadoop 集群所期望的那种扩展。老实说应该更好地记录下来。