在hadoop wiki中找不到具体的参考资料......
说我的工作需要100个映射器,没有歪斜。 当我将“map.tasks.maximum”设置为100时,hadoop等待它们全部完成,然后随机播放(复制到reducer),这需要时间等待网络带宽。
如果我将“map.tasks.maximum”设置为10,那么将有10代10个映射器,并且当每一代完成时,将执行1/10数据的随机播放,而下一代映射器将执行已经开始研究下一个记录了。
这真的会更精简并改善我的工作延迟吗?这甚至是一个有价值的目标?会不会因为集群的吞吐量而付出代价?
答案 0 :(得分:2)
我怀疑它会改善你的延迟。
我的考虑是:
在所有映射器完成之前,任何reducer调用都无法完成 - 因为它无法知道最后一个映射器不会发出相同的密钥。所以我不希望在最后一个mapper完成之前完成更多的工作
我试图做的事情(没有算法更改)是为洗牌提供更多内存以避免溢出到磁盘。
您还可以尝试在映射器和缩减器之间压缩中间数据。
据我所知 - 数据序列化在这里是成本的重要部分 - 如果你能使它变得简单,它可能会有所帮助。