怎样理解MapReduce中shuffle

16次阅读
没有评论

怎样理解 MapReduce 中 shuffle,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

概念解释: 

    shuffle:简单的名称称为 混洗。事实上 shuffle 是一个非常非常简单的概念。简单点来说就是洗牌。

         shuffle:按照固定的规则,就【key,value】而言。

前提

  由于之前一直都是使用的 Hadoop1,并未使用 Hadoop Yarn,所以有关 shuffle 的机制,还请参考最新的底层 API

1:不管是在 Map 端,还是 Reduce 端,不管是 Hadoop MapReduce 还是 Storm。对于数据的内部处理,很多时候都需要

对于是底层的 内存和磁盘做出一个合理的取舍。

 Map 端:

 1:数据并不是简单的把他直接的写到了磁盘,这个过程比较复杂,他利用了缓冲的方式写到了内存,并且出于效率上的考虑,进行了预排序。

    2:每一个默认的 Map 任务都会有一个环形的缓存区。这个缓存区用来持有 Map 的输出,我印象中是 100M 左右,一旦达到的固定的必烈,那么就会把内容写到磁盘之中,在写磁盘的过程之中,Map 输出继续被写入到缓冲区。

                3:在写入到缓存区之前,会将这个数据进行一次分区和排序(这个分区和排序将会按照 reduce 的对应关系来生成)

                 4:关于这个分区的数据将通过 Http 的协议来传递给 Reduce 端。

Reduce 端:

 Reduce 端口的第一个阶段是:copy 阶段,也就是说我们需要把数据从 Map 端口 copy 到 Reduce 端口。如果 Map 的端口输出相当的小,那么就会被复制到 Reduce 端。

          其次:在拉取到数据之后,我们将进入到了:排序的阶段。 sort phase 阶段,更恰当的来说,是一个合并的阶段,因为排序的阶段已经在 Map 端口完成了。只需要在 reduce 端合并就可以了

            对于 MapReduce,之前我也是能实现类 qq 圈子算法,对于算法,我也是整本算法导论的人。而,如今却忘的一干二净。记忆会消失,不需要的事物会遗忘。

看完上述内容,你们掌握怎样理解 MapReduce 中 shuffle 的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!