我测试了一个基于mapreduce的算法的可伸缩性。它看起来很好(时间随着还原剂的增加而减少)。但是当reducer达到一定数量(在hadoop集群中是30个)时,作业时间总是显著减少,而不是逐渐减少。可能的原因是什么?
关于我的hadoop工作:(1)光照图阶段。只有几百行输入。每行将生成大约5000个键值对。整个Map阶段不会超过2分钟(2) 重还原阶段。reduce函数中的每个键都将匹配1-2千个值。而reduce阶段的算法计算量很大。一般来说,还原阶段需要大约30分钟才能完成。
时间性能图:
2条答案
按热度按时间798qvoo81#
如果有足够数量的
reducers
每个reduce阶段之间的可用网络io(传输中间结果)减少。由于网络io通常是大多数map-reduce程序的瓶颈。所需网络io的减少将带来显著的改善。
yacmzcpb2#
应该是因为键值对的数量太多。在特定的减速机数量下,它们平均分配到减速机上,这导致所有减速机几乎同时执行任务。否则,合路机可能会继续等待1或2个重载减速机完成任务。