MapReduce实现日记-任务粒度如何把握
通常,我们将map阶段分为M个片段,将Reduce阶段分为R个片段。在理想的情况下,M和R应该远大于工作机器的数量。为了让每一个worker都能执行不同的任务来动态的保持负载均衡。并且在worker发生故障时,能够加快恢复速度,比如已经完成的map任务可以分布在其他所有worker上。
在现实开发中,M和R的大小是有实际限制的,因为master必须作出O(M+R)的决策调度,并在内存中保持O(M*R)的状态。
此外R的数量经常受到用户的限制,因为每个reduce任务的输出最终都是在一个单独的输出文件中。在实际中,我们倾向于选择M的任务,大约在16M到64M的输入数据(这种情况可以确保局部新能优化最有效)。