• Shuffle


    Shuffle是MapReduce框架中的一个特定的phase,介于Map phase和Reduce phase之间,当Map的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。

    下面这幅图清晰地描述了MapReduce算法的整个流程,其中shuffle phase是介于Map phase和Reduce phase之间。

    mapreduce running process

    以wordcount为例,map后形成(word, 1)的key-value对,在对这些key-value对进行reduce之前,需要把同样key的对放在一起,这个过程就是shuffle.

    Spark中的shuffle流程:

    spark shuffle process

    • 首先每一个Mapper会根据Reducer的数量创建出相应的bucket,bucket的数量是M×R,其中M是Map的个数,R是Reduce的个数。
    • 其次Mapper产生的结果会根据设置的partition算法填充到每个bucket中去。这里的partition算法是可以自定义的,当然默认的算法是根据key哈希到不同的bucket中去。
    • 当Reducer启动时,它会根据自己task的id和所依赖的Mapper的id从远端或是本地的block manager中取得相应的bucket作为Reducer的输入进行处理。

    这里的bucket是一个抽象概念,在实现中每个bucket可以对应一个文件,可以对应文件的一部分或是其他等。

  • 相关阅读:
    虚拟机黑屏
    ngnix随笔三
    ngnix随笔二
    ngnix随笔一
    HTML(初级)笔记
    学习Java注解
    常用工具类与commons 类库
    SpringBoot缓存使用
    LeetCode:98.验证二叉搜索树
    剑指Offer:面试题07.重建二叉树
  • 原文地址:https://www.cnblogs.com/mustone/p/5284436.html
Copyright © 2020-2023  润新知