reduce 任务是否在所有 map 任务完成后开始?

Do the reduce tasks start after all the map tasks have finished?

例如对于排序示例。它的文件是:

d1 a b c d -> M1

d2 c f k -> M2

d3 c f f -> M3

d4 a b d d -> M4 并且每个文档都转到一个映射任务,然后如果(让我们只讨论 "a")M1 2 和 3 首先完成并减少开始,它将不知道来自 d4 的 a。

那会发生什么? M4 什么时候结束?

reducer 进程(通常)会在 mappers 完成之前启动,但实际的 reduce() 调用不会发生,直到所有 mappers 完成并且中间记录已发送到 reducers。