为什么hadoop map任务上的内存越多,mapreduce工作就越慢?

时间:2015-05-12 20:04:07

标签: performance hadoop memory mapreduce yarn

我想问。为什么我在mapreduce.map/reduce.memory.mb和mapreduce.map/reduce.java.opts中的mapred-site.xml上配置为比默认值更大的值会让我的工作更慢?

但是如果我把它配置得太低,那么我就会让任务失败。我认为在这种情况下,我在hadoop上的内存配置是不必要的......

你可以给我一个解释吗?

2 个答案:

答案 0 :(得分:1)

在您的环境中可能发生的情况是,当您将mapreduce.map/reduce.memory.mbmapreduce.map/reduce.java.opts配置的值增加到上限时,它实际上减少了每个允许执行Map / Reduce任务的容器数量因此,节点最终导致整个作业时间的缓慢。

如果你有2个节点,每个节点有25 GB的免费ram,并且说你将mapreduce.map/reduce.memory.mb配置为4 GB,那么你可能在每个节点上至少获得6个容器,总共是12个。所以你会有机会并行运行12个mapper / reducer任务。

如果将mapreduce.map/reduce.memory.mb配置为10 GB,那么每个节点上可能只有2个容器,总共4个容器可以并行执行mapper / reducer任务。因此,映射器/减速器任务将主要由于缺少空闲容器而按顺序运行,从而导致所有作业完成时间的延迟。

您应该根据您的环境考虑可用资源和Map / Reduce容器所需的资源量,来证明配置的approprite值。希望这是有道理的。

答案 1 :(得分:1)

您可以根据两个因素为map / reduce容器分配内存

  1. 每个Datanode的可用内存
  2. 您拥有的核心(vcores)总数。
  3. 尝试创建相当于每个被扣留的核心数量的容器数量。 (包括超线程) 例如,如果您有10个物理核心(20个核心,包括超线程)

    所以您可以计划的总数量为19(其他流程留下1个核心)

    假设您在每个数据节点中都有“X”GB Ram,那么

    为其他进程(堆)留下一些内存(假设为Y GB),如Datanode,Node Manager,Region server等

    现在可用于YARN的内存是X -Y = Z

    Map容器​​的内存= Y /每个节点的容器数 用于减少容器的内存= Y /(每个节点2 *个容器数)