输入文件大小:75gb
制图员人数:2273
减速器数量:1(如web ui所示)
分裂数: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条答案
按热度按时间kxkpmulp1#
需要检查的几点:
考虑到您共享的数据,block&split的大小似乎非常小。尝试将两者都提高到最佳水平。
如果没有使用,请使用自定义分区器,它可以将您的数据均匀地分布在缩减器上。
考虑使用组合器。
考虑使用适当的压缩(在存储Map器结果时)
使用最佳的块复制数。
适当增加减速器的数量。
这些将有助于提高性能。试着分享你的发现!!
编辑1:尝试将成功的Map任务生成的日志与长时间运行的Map任务尝试生成的日志进行比较(12%表示完成272个map任务)。你就会知道它卡在哪里了。
编辑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
这些将改善情况。采取试错法。
也refer:container is 超出内存限制运行
编辑3:尝试理解逻辑的一部分,将其转换为pig脚本,执行并查看其行为。