4

当我对 Hadoop 进行一些性能调整时,我遇到了一个非常奇怪的情况。我正在运行一个具有大量中间输出的作业(例如没有组合器的 InvertedIndex 或 WordCount),网络和计算资源都是同质的。根据 mapreduce 的工作方式,当WAVES更多时对于reduce任务,由于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 拥塞。即使采用上述方法,同样的事情仍然会发生。(我还将映射内存缓冲区设置为足够大,并将 io.sort.factor 设置为 32 甚至更大,并且 io.sort.mb 相应地大于 320)

我真的想不出导致这个问题的任何其他原因,所以任何建议将不胜感激!

以防万一,我遇到的问题是:

0. 我正在比较在所有其他相同配置下运行同一作业的 1 个 reduce 任务与 5 个 reduce 任务的性能。减少计算只有一个任务跟踪器。

1.我强制所有reduce任务顺序执行,在这两种情况下只有一个tasktracker用于redcue任务,mapred.tasktracker.reduce.tasks.maximum=1,所以在reduce阶段不会有任何并行性

2. 我设置了 mapred.reduce.slowstart.completed.maps=1 所以在所有 map 完成之前没有一个 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 阶段变得更慢!

4

4 回答 4

0

如果您只有 1 个 reduce 任务,那么该 reducer 必须等待所有 mapper 完成,并且 shuffle 阶段必须收集所有中间数据以重定向到该一个 reducer。因此,如果只有一个 reducer,map 和 shuffle 时间自然会变大,总时间也会变长。

但是,如果您有更多的 reducer,您的数据会被并行处理,这会使其更快。同样,如果你有太多的 reducer,那么就会有太多的数据被打乱,导致网络流量增加。因此,您必须找到最佳数量的减速器,以达到良好的平衡。

于 2012-05-01T13:09:22.420 回答
0

减少的正确数量似乎是 0.95 或 1.75 * (nodes * mapred.tasktracker.tasks.maximum)。在 0.95 时,所有 reduce 可以立即启动,并在地图完成时开始传输地图输出。在 1.75 时,更快的节点将完成其第一轮 reduce 并启动第二轮 reduce,从而更好地完成负载平衡。

礼貌:

http://wiki.apache.org/hadoop/HowManyMapsAndReduces

设置map任务和reduce任务的数量

(类似的问题与已解决的答案)

希望这可以帮助!

于 2013-06-05T03:42:50.303 回答
0

这不是问题。您拥有的 reduce 任务越多,处理数据的速度就越快。

map阶段的输出被发送到reducers。如果您有两个减速器,负载将分布在两个减速器之间。

在 wordcount 示例中,您将有两个单独的文件,它们之间的计数分开。因此,如果您有很多 reduce 任务,您将不得不手动添加总数,或者运行另一个 map reduce 作业来计算总数。

于 2012-05-01T05:39:31.327 回答
0

正如预期的那样,如果您只有一个 reducer,那么您的作业就会出现单点故障。您的减速器数量应设置为大约 90% 的容量。你可以通过将你的 reduce 槽数乘以你的节点总数来找到你的 reduce 容量。我发现如果适用的话,使用组合器也是一个好习惯。

于 2012-05-01T13:05:29.797 回答