如何在hadoop集群中建议更均衡的容器分配?

qlfbtfca  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(452)

如何在hadoop中更改/建议不同的容器分配给任务?关于aws上的本机hadoop(2.9.1)集群。
我正在aws上运行一个本地hadoop集群(2.9.1)(使用ec2,而不是emr),我希望容器(mappers/reducer)的调度/分配比当前更加平衡。rm似乎在以装箱的方式(数据所在的位置)分配Map器,而对于reducer,它似乎更加平衡。我的设置包括三台复制率为3的机器(所有数据都在每台机器上),我使用mapreduce.job.reduce.slowstart.completedmaps=0运行作业,以便尽可能快地启动shuffle(对我来说,所有容器并发运行很重要,这是必须的条件)。另外,根据我选择的ec2示例和我对Yarn簇的设置,我最多可以运行93个容器(每个31个)。
例如,如果我想要9个reducer,那么(93-9-1=83)83个容器可以留给mappers,一个是留给am。为了找到正确的平衡,所有机器在Map阶段都有相同的“工作”,我已经使用了拆分输入的大小(mapreduce.input.fileinputformat.split.minsize,mapreduce.input.fileinputformat.split.maxsize)。但看起来前31个Map器将被分配到一台机器上,下31个Map器分配到第二台机器上,最后31个Map器分配到最后一台机器上。因此,我可以尝试使用87个Map器,其中31个在机器#1中,另31个在机器#2中,另25个在机器#3中,其余的留给减速器,当机器#1和机器#2被完全占用时,减速器将不得不放置在机器#3中。这样我得到了一个几乎平衡的Map器分配,而不是不平衡的缩减器分配。这不是我想要的。。。

of mappers = size_input / split size [Bytes], split size= max(mapreduce.input.fileinputformat.split.minsize, min(mapreduce.input.fileinputformat.split.maxsize, dfs.blocksize))

tv6aics1

tv6aics11#

我使用的是默认的调度程序(容量),默认情况下 yarn.scheduler.capacity.per-node-heartbeat.maximum-container-assignments 被设置为-1(无穷大),这解释了为什么每个首先响应rm(带有心跳)的节点都在尽可能多地“打包”容器。最后,在hadoop/etc/hadoop/capacity-scheduler.xml中插入上述参数(使用Map器数量的三分之一将导致Map器的平衡调度)并执行以下操作 yarn rmadmin -refreshQueues 重新启动后,rm将授予您在yarn中平衡容器分配的选项。
欲知更多详情,请在这里搜索我的讨论。

相关问题