apache - 我的 Yarn Map-Reduce 作业花费了大量时间

标签 apache hadoop mapreduce cluster-computing hadoop-yarn

输入文件大小:75GB

映射器数量:2273

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

分割数:2273

输入文件数:867

集群:Apache Hadoop 2.4.0

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

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

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

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。

任何指导表示赞赏。提前致谢。

最佳答案

需要检查的几点:

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

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

  3. 考虑使用组合器。

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

  5. 使用最佳数量的 block 复制。

  6. 适当增加reducer数量。

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

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

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

关于apache - 我的 Yarn Map-Reduce 作业花费了大量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35503870/

相关文章:

arrays - 由于超出VM限制,MapReduce处理失败

java - 我的成绩簿程序无法正确打印到 Excel 文档

java - Apache Velocity + Servlet 3.0

hadoop - logstash 非法状态异常?

hadoop - 编写用于计算记录数的 MApreduce 代码

java - MapReduce中的分割方法

javascript - .htaccess。给出 410 错误并重定向动态 php 页面

Apache + 汤姆猫 : Using mod_proxy instead of AJP

hadoop - pig : Counting the occurence of a grouped column

sql - 如何将查询答案传递给限制函数 Impala