Hadoop YARN reducer/shuffle stuck



我正在从Hadoop 1迁移到Hadoop 2 YARN。源代码使用 MRV2 jar 重新编译,没有任何兼容性问题。当我尝试在 YARN 下运行作业时,map 工作正常并达到 100%,但减少卡在 ~6,7%。没有性能问题。实际上,我检查了 CPU 使用率,结果发现当 reduce 卡住时,似乎没有计算进行,因为 CPU 大部分是 100% 空闲的。该作业可以在 Hadoop 1.2.1 上成功运行。

我检查了来自资源管理器的日志消息,发现自 map 完成以来,没有分配更多的容器,因此任何容器上都没有运行 reduce。是什么导致了这种情况?

我想知道它是否与yarn.nodemanager.aux-services属性设置有关。按照官方教程(http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html),此属性必须设置为mapreduce_shuffle,这表明MR仍将使用默认的shuffle方法而不是其他shuffle插件(http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/PluggableShuffleAndPluggableSort.html)。我试图不设置此属性,但Hadoop不允许我。

这是userlogs/applicationforlder/containerfolder/syslog的日志,当它即将达到减少的7%时。在那之后,日志不再更新,减少也停止了。

2014-11-26 09:01:04,104 INFO [fetcher#1] org.apache.hadoop.mapreduce.task.reduce.Fetcher: fetcher#1 about to shuffle output of map attempt_1416988910568_0001_m_002988_0 decomp: 129587 len: 129591 to MEMORY
2014-11-26 09:01:04,104 INFO [fetcher#1] org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput: Read 129587 bytes from map-output for attempt_1416988910568_0001_m_002988_0
2014-11-26 09:01:04,104 INFO [fetcher#1] org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl: closeInMemoryFile -> map-output of size: 129587, inMemoryMapOutputs.size() -> 2993, commitMemory -> 342319024, usedMemory ->342448611
2014-11-26 09:01:04,105 INFO [fetcher#1] org.apache.hadoop.mapreduce.task.reduce.Fetcher: fetcher#1 about to shuffle output of map attempt_1416988910568_0001_m_002989_0 decomp: 128525 len: 128529 to MEMORY
2014-11-26 09:01:04,105 INFO [fetcher#1] org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput: Read 128525 bytes from map-output for attempt_1416988910568_0001_m_002989_0
2014-11-26 09:01:04,105 INFO [fetcher#1] org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl: closeInMemoryFile -> map-output of size: 128525, inMemoryMapOutputs.size() -> 2994, commitMemory -> 342448611, usedMemory ->342577136
2014-11-26 09:01:04,105 INFO [fetcher#1] org.apache.hadoop.mapreduce.task.reduce.ShuffleSchedulerImpl: datanode03:13562 freed by fetcher#1 in 13ms
从Hadoop

1迁移到Hadoop 2时,这是一个常见问题吗?在Hadoop 2中,运行map-shuffle-sort-reduce的策略是否发生了变化?是什么导致了这个问题?非常感谢。任何评论都会有所帮助!

主要环境设置:

  • Hadoop版本:2.5.2
  • 具有 8 核 CPU 的 6 节点群集,每个节点上 15 GB 内存

相关属性设置:

  • yarn.scheduler.maxum-allocation-mb: 14336
  • yarn.scheduler.minimum-allocation-mb: 2500
  • yarn.nodemanager.resource.memory-mb: 14336
  • yarn.nodemanager.aux-services: mapreduce_shuffle
  • mapreduce.task.io.sort.factor: 100
  • mapreduce.task.io.sort.mb: 1024

在谷歌搜索后终于解决了这个问题,发现我已经在三个月前发布了这个问题。

这是因为数据倾斜。

相关内容

  • 没有找到相关文章