【问题标题】:How to suggest a more balanced allocation of containers in Hadoop cluster?如何在 Hadoop 集群中建议更平衡的容器分配?
【发布时间】:2019-06-01 02:09:15
【问题描述】:

如何更改/建议为 Hadoop 中的任务分配不同的容器?关于 AWS 上的原生 Hadoop (2.9.1) 集群。

我在 AWS(使用 EC2,而不是 EMR)上运行本机 Hadoop 集群 (2.9.1),我希望容器(映射器/减速器)的调度/分配比目前更加平衡。 似乎 RM 以 Bin Packing 方式(数据所在的位置)分配 Mapper,而对于 reducer,它似乎更加平衡。 我的设置包括三台复制速率为三的机器(所有数据都在每台机器上),我使用 mapreduce.job.reduce.slowstart.completedmaps=0 运行我的作业,以便尽快开始随机播放(这对我来说很重要所有容器同时运行,这是一个必须条件)。 另外,根据我选择的EC2实例和我对YARN集群的设置,我最多可以运行93个容器(每个31个)。

例如,如果我想拥有 9 个 reducer,那么 (93-9-1=83) 可以为映射器留下 83 个容器,一个用于 AM。 我已经玩过拆分输入的大小(mapreduce.input.fileinputformat.split.minsize,mapreduce.input.fileinputformat.split.maxsize),以便找到所有机器都具有相同“工作”的正确平衡地图阶段。 但似乎前 31 个映射器将分配在一台机器上,接下来的 31 个分配给第二个,最后 31 个分配在最后一台机器上。因此,我可以尝试使用 87 个映射器,其中 31 个在机器 #1 中,另外 31 个在机器 #2 中,另外 25 个在机器 #3 中,其余的留给减速器,因为机器 #1 和机器 #2 完全被占用,那么减速器必须放置在机器 #3 中。通过这种方式,我以不平衡的减速器分配为代价获得了几乎平衡的映射器分配。 而这不是我想要的……

# of mappers = size_input / split size [Bytes],

split size= max(mapreduce.input.fileinputformat.split.minsize, min(mapreduce.input.fileinputformat.split.maxsize, dfs.blocksize))

【问题讨论】:

    标签: hadoop hadoop2 shuffle reducers mapper


    【解决方案1】:

    我使用的是默认调度程序(容量),默认情况下 yarn.scheduler.capacity.per-node-heartbeat.maximum-container-assignments 设置为 -1(无穷大),这解释了为什么每个首先响应 RM(使用 Heartbeat)的节点一直在“打包”容器它可以。 总而言之,在 hadoop/etc/hadoop/capacity-scheduler.xml 中插入上述参数(使用映射器数量的三分之一将导致映射器的平衡调度)并在重新启动 RM 后遵循yarn rmadmin -refreshQueues 将授予您选项平衡 YARN 中的容器分配。

    更多详情请搜索我的讨论here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多