【问题标题】:My Yarn Map-Reduce Job is taking a lot of time我的 Yarn Map-Reduce 作业花费了很多时间
【发布时间】:2016-05-31 22:35:45
【问题描述】:

输入文件大小:75GB

映射器数量:2273

reducer 数量:1(如网页界面所示)

分割数:2273

输入文件数:867

集群:Apache Hadoop 2.4.0

5 个节点集群,每个 1TB。

1 个主节点和 4 个数据节点。

已经 4 小时了。现在,仍然只完成了 12% 的地图。只是想知道我的集群配置是否有意义或者配置有什么问题?

Yarn-site.xml

         <property>
             <name>yarn.nodemanager.aux-services</name>
             <value>mapreduce_shuffle</value>
             </property>
             <property>
             <name>yarn.nodemanager.aux- services.mapreduce.shuffle.class</name>
             <value>org.apache.hadoop.mapred.ShuffleHandler</value>
             </property>
             <property>
             <name>yarn.resourcemanager.resource- tracker.address</name>
             <value>master:8025</value>
             </property>
             <property>
             <name>yarn.resourcemanager.scheduler.address</name>
             <value>master:8030</value>
             </property>
             <property>
              <name>yarn.resourcemanager.scheduler.address</name>
             <value>master:8030</value>
             </property>
             <property>
             <name>yarn.resourcemanager.address</name>
             <value>master:8040</value>
             </property>
             <property>
             <name>yarn.resourcemanager.hostname</name>
             <value>master</value>
             <description>The hostname of the RM.</description>
             </property>
             <property>
             <name>yarn.scheduler.minimum-allocation-mb</name>
             <value>1024</value>
             <description>Minimum limit of memory to allocate to each container request at the Resource Manager.</description>
             </property>
             <property>
             <name>yarn.scheduler.maximum-allocation-mb</name>
             <value>8192</value>
             <description>Maximum limit of memory to allocate to each container request at the Resource Manager.</description>
             </property>
             <property>
             <name>yarn.scheduler.minimum-allocation-vcores</name>
             <value>1</value>
             <description>The minimum allocation for every container request at the RM, in terms of virtual CPU cores. Requests lower than this won't take effect, and the specified value will get allocated the minimum.</description>
             </property>
             <property>
             <name>yarn.scheduler.maximum-allocation-vcores</name>
             <value>32</value>
             <description>The maximum allocation for every container request at the RM, in terms of virtual CPU cores. Requests higher than this won't take effect, and will get capped to this value.</description>
             </property>
             <property>
             <name>yarn.nodemanager.resource.memory-mb</name>
             <value>8192</value>
             <description>Physical memory, in MB, to be made available to running containers</description>
             </property>
             <property>
             <name>yarn.nodemanager.resource.cpu-vcores</name>
             <value>4</value>
             <description>Number of CPU cores that can be allocated for containers.</description>
             </property>
             <property>
             <name>yarn.nodemanager.vmem-pmem-ratio</name>
             <value>4</value>
             </property> 
             <property>
   <name>yarn.nodemanager.vmem-check-enabled</name>
   <value>false</value>
   <description>Whether virtual memory limits will be enforced for containers</description>
</property>

我使用多个输出的 Map-Reduce 作业。所以reducer会发出多个文件。每台机器都有 15GB 内存。运行的容器数为 8。RM Web UI 中可用的总内存为 32GB。

感谢任何指导。提前致谢。

【问题讨论】:

  • 您能提供有关您正在运行的工作类型的信息吗?还有每台机器上可用的 RAM 是多少。您能否登录到资源管理器 UI 并检查集群可用的总内存以及并行运行的容器数量。我怀疑这项工作正在利用资源。
  • @shivanand pawar :我使用多个输出的 Map-Reduce 工作。所以我会有多个文件。每台机器都有 15GB 内存。运行的容器有 8 个。可用总内存为 32GB。

标签: apache hadoop mapreduce cluster-computing hadoop-yarn


【解决方案1】:

需要检查的几点:

  1. 考虑到您共享的数据,块和拆分大小似乎非常小。尝试将两者都提高到最佳水平。

  2. 如果不使用,请使用自定义分区器,该分区器可将数据均匀分布在 reducer 中。

  3. 考虑使用组合器。

  4. 考虑使用适当的压缩(同时存储映射器结果)

  5. 使用最佳的块复制数。

  6. 酌情增加reducer的数量。

这些将有助于提高性能。试试看,分享你的发现!!

编辑 1: 尝试将成功的地图任务生成的日志与长时间运行的地图任务尝试生成的日志进行比较。 (12% 表示完成了 272 个地图任务)。你会知道它卡在哪里了。

编辑 2: 调整这些参数:yarn.scheduler.minimum-allocation-mb、yarn.scheduler.maximum-allocation-mb、yarn.nodemanager.resource.memory-mb、mapreduce.map .memory.mb、mapreduce.map.java.opts、mapreduce.reduce.memory.mb、mapreduce.reduce.java.opts、mapreduce.task.io.sort.mb、mapreduce.task.io.sort.factor

这些将改善情况。采取试错法。

另请参考: Container is running beyond memory limits

编辑 3: 尝试理解部分逻辑,将其转换为 pig 脚本,执行并查看其行为方式。

【讨论】:

  • 我也想知道为什么会有如此大量的输入拆分而只有 1 个减速器...这是一个自写的 MR 应用程序还是使用 hive/pig 的?
  • 这完全是一个 Map-Reduce 程序,我们根据某些条件扫描数据。我们正在使用多个输出,因此 reducer 将发出多个文件。
  • 我无法对代码进行任何添加或删除。我刚刚设置了集群并尝试在新集群中运行作业。
  • 在成功的map任务日志中可以看到“container kill by the applicationmaster.container kill on request.exit code is 143”。
  • yarn.nodemanager.resource.memory-mb = 8GB yarn.scheduler.minimum-allocation-mb = 1GB yarn.scheduler.maximum-allocation-mb = 8GB mapreduce.map.memory.mb = 4GB mapreduce.reduce.memory.mb = 8GB mapreduce.map.java.opts = 3GB mapreduce.reduce.java.opts = 6GB yarn.app.mapreduce.am.resource.mb = 8GB yarn.app.mapreduce.am.command-选择 = 6GB
猜你喜欢
  • 1970-01-01
  • 2017-05-10
  • 2015-08-02
  • 2021-10-26
  • 2011-06-21
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多