我的纱线地图 - 减少工作需要花费大量时间

时间:2016-02-19 11:10:26

标签: apache hadoop mapreduce cluster-computing yarn

输入文件大小:75GB

Mappers数量:2273

缩减器数量:1(如网页用户界面所示)

拆分次数:2273

输入文件数:867

群集:Apache Hadoop 2.4.0

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

1个主节点和4个Datanode。

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

纱线-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 Ram。运行的容器为8. RM Web UI中可用的总内存为32GB。

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

1 个答案:

答案 0 :(得分:1)

要检查几点:

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

  2. 如果不使用,请使用自定义分区程序,该分区程序会将数据统一分布在Reducer之间。

  3. 考虑使用合并器。

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

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

  6. 根据需要增加减速器数量。

  7. 这些将有助于提高性能。尝试分享您的发现!!

    编辑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脚本,执行并查看其行为。