为什么在Hadoop地图任务上有更多内存使MapReduce作业较慢



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

但是,如果我配置得太低,那么我将使任务失败。我认为在这种情况下,我的内存配置不是必需的...

你能给我解释吗?

在您的环境中可能发生的事情是,当您将mapreduce.map/reduce.memory.mbmapreduce.map/reduce.java.opts配置的值增加到上限时,它实际上减少了执行映射/减少每个任务的容器数量因此,节点最终在所有工作时间内都会导致节奏。

如果您有2个节点,每个节点都有25 GB的免费RAM,并说您将mapreduce.map/reduce.memory.mb配置为4 GB,那么您可能会在每个节点上获得至少6个容器,完全是12个容器。并行运行12个映射器/还原器任务。

如果将mapreduce.map/reduce.memory.mb配置为10 GB,则可能只能在每个节点上获得2个容器,完全是4个容器可以并行执行映射器/还原器任务。因此,映射器/还原器任务主要是由于缺乏自由容器而按顺序进行,因此会导致所有工作完成时间延迟。

,您应该根据您的环境来考虑可用资源和地图/减少容器所需的资源的合理价值。希望这是有道理的。

您可以根据两个因素为映射/减少容器分配内存

  1. 每个数据台上的可用内存
  2. 您拥有的内核总数(VCORS)。

尝试创建相当于您在每个被拘留的内核数量的容器数量。(包括超线)例如,如果您有10个物理核心(包括超线程包括20个内核)

因此,您可以计划的总数是19(其他流程留下1个核心)

假设您在每个数据节点中都有'X'GB RAM,然后是

为其他进程留下一些内存(假设Y GB)(heap),例如,数据台,节点管理器,区域服务器等

现在可用于纱线的内存是x -y = z

映射容器的内存= y/每个节点的容器数量减少容器的内存= y/(2 *每个节点容器数)

最新更新