1.MapReduce的核心之shuffle详解
上一篇中我们介绍了MapReduce是什么,以及MapReduce的运行过程,其中在运行过程中主要分为Map端与Reducer端,MapReduce计算模型主要完成了映射与化简,在这其中,有一个最重要的过程那就是其核心——shuffle,shuffle翻译过来也就是混洗。可能大家比较熟知的是JAVA API中的Collections.shuffle(List)方法,这个方法会随机的打乱参数list里的元素顺序。我们先来看看官方给出的MapReduce里面的shuffle,图示如下:
在Hadoop这样的集群中,大部分的Map任务与Reducer任务是在不同的节点上运行的,这就会导致Reducer从不同的Map节点去拷贝输出的数据,这样就可能造成巨大的网络消耗,这种网络消耗是正常的,不可避免,我们能做的只有减少一些不必要的网络消耗。从基本的要求来说,我们希望shuffle为我们解决: