【发布时间】:2015-01-24 12:13:48
【问题描述】:
我正在从 Hadoop 1 迁移到 Hadoop 2 YARN。源代码使用 MRV2 jar 重新编译,没有任何兼容性问题。当我尝试在 YARN 下运行该作业时,map 运行良好并达到 100%,但 reduce 卡在了 ~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% 时的日志。之后日志不再更新,reduce 也停止了。
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 迁移到 2 时的常见问题吗? Hadoop 2 中运行 map-shuffle-sort-reduce 的策略是否发生了变化?是什么导致了这个问题?非常感谢。任何 cmets 都会有所帮助!
主要环境设置:
- Hadoop 版本:2.5.2
- 6 节点集群,8 核 CPU,每个节点 15 GB 内存
相关属性设置:
- yarn.scheduler.maximum-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
【问题讨论】:
-
您的工作设置了哪些自定义设置? mapreduce.map.memory.mb 和 mapreduce.reduce.memory.mb 的值是多少?驱动应用的输出是什么,是卡在6.7%吗?
-
mapreduce.map.memory.mb 和 mapreduce.reduce.memory.mb 没有设置,所以我认为这意味着没有 map/reduce 内存限制。它停留在〜7%。我更新了问题以添加来自 userlogs/container*/syslog 的输出。从日志中我发现reduce在达到7%的reduce时间时刚刚停止运行。
标签: hadoop shuffle reduce hadoop-yarn