【发布时间】:2012-05-10 16:50:57
【问题描述】:
当我对 Hadoop 进行一些性能调整时,我遇到了一个非常奇怪的情况。我正在运行一个具有大量中间输出的作业(例如没有组合器的 InvertedIndex 或 WordCount),网络和计算资源都是同质的。根据mapreduce的工作原理,当reduce任务的WAVES较多时,由于map和shuffle之间的重叠较少,整体运行时间应该会变慢,但事实并非如此。事实证明,具有 5 WAVES 减少任务的作业比仅具有 1 个 WAVE 任务的作业快 10%。我检查了日志,结果发现当reduce任务较少时,map任务的执行时间较长,而且当任务较少时,reduce阶段的整体计算时间(不是shuffle或merge)较长。我试图通过将reduce slow-start factor设置为1来排除其他因素,这样map和shuffle之间就没有重叠,我还将它限制为同时执行一个reduce任务,所以没有重叠在 reduce 任务之间,我修改了调度程序以强制 mapper 和 reducer 定位在不同的机器上,这样就不会出现 I/O 拥塞。即使采用上述方法,同样的事情仍然会发生。 (我还将map内存缓冲区设置得足够大,io.sort.factor设置为32甚至更大,io.sort.mb相应地大于320)
我真的想不出任何其他原因导致这个问题,所以任何建议将不胜感激!
以防万一,我遇到的问题是:
0。我正在比较在所有其他相同配置下运行同一作业的 1 个减少任务与 5 个减少任务的性能。 reduce 计算只有一个 tasktracker。
1.我已经强制所有reduce任务按顺序执行,在这两种情况下只有一个tasktracker用于redcue任务,mapred.tasktracker.reduce.tasks.maximum=1,所以在reduce阶段不会有任何并行性
2。我已经设置了 mapred.reduce.slowstart.completed.maps=1 所以在所有地图完成之前没有一个 reducer 会开始提取数据
3.事实证明,拥有一个 reduce 任务比拥有 5 个 SEQUENTIAL 任务要慢!
4.即使我设置了 set mapred.reduce.slowstart.completed.maps=0.05 以允许 map & shuffle 之间的重叠,(因此当只有一个reduce任务时,重叠应该更多并且它应该运行得更快,因为5个reduce任务正在按顺序执行)5-reduce-task 仍然比 1-reduce 任务快,1-reduce 任务的 map 阶段变得更慢!
【问题讨论】:
标签: dictionary hadoop configuration reduce shuffle