2

在 hadoop wiki 中找不到对此的具体引用...

假设我有一份需要 100 个映射器的工作,没有偏差。当我将“map.tasks.maximum”设置为 100 时,hadoop 会等待它们全部完成,然后进行随机播放(复制到减速器),这需要等待网络带宽的时间。

如果我将“map.tasks.maximum”设置为 10,则将有 10 个映射器的 10 代,当每一代完成时,将执行 1/10 数据的洗牌,而下一代映射器已经在工作在接下来的记录中。

这真的会更精简并改善我的工作延迟吗?这甚至是一个有价值的目标吗?这会以集群的吞吐量为代价吗?

4

1 回答 1

2

我怀疑它会改善你的延迟。
我的考虑是:在所有映射器完成之前,任何 reducer 调用都无法完成 - 因为它无法知道最后一个映射器不会发出相同的密钥。所以我不希望在最后一个映射器完成之前完成更多工作
我会尝试做的(没有算法更改)是为洗牌提供更多内存以避免溢出到磁盘。
您还可以尝试压缩映射器和减速器之间的中间数据。
据我所知——数据序列化是成本的重要组成部分——如果你能让它变得更简单,它可能会有所帮助。

于 2012-08-23T08:58:33.580 回答