【发布时间】: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