在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。Spark作为MapReduce框架的一种实现,自然也实现了shuffle的逻辑。

Shuffle

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

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

概念上shuffle就是一个沟通数据连接的桥梁,那么实际上shuffle(partition)这一部分是如何实现的的呢,下面我们就以Spark为例讲一下shuffle在Spark中的实现。

Spark Shuffle进化史

先以图为例简单描述一下Spark中shuffle的整一个流程:

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

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

Apache Spark 的 Shuffle 过程与 Apache Hadoop 的 Shuffle 过程有着诸多类似,一些概念可直接套用,例如,Shuffle 过程中,提供数据的一端,被称作 Map 端,Map 端每个生成数据的任务称为 Mapper,对应的,接收数据的一端,被称作 Reduce 端,Reduce 端每个拉取数据的任务称为 Reducer,Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。

参考:

http://jerryshao.me/architecture/2014/01/04/spark-shuffle-detail-investigation/

https://ihainan.gitbooks.io/spark-source-code/content/section3/index.html

转载于:https://www.cnblogs.com/bonelee/p/6039202.html

spark shuffle内在原理说明相关推荐

  1. Spark Shuffle运行原理

    1.什么是spark shuffle? Shuffle中文意思就是"洗牌",在Spark中Shuffle的目的是为了保证每一个key所对应的value都会汇聚到同一个分区上去聚合和 ...

  2. 【大数据哔哔集20210108】Spark Shuffle 和 Hadoop Shuffle有什么异同?

    Shuffle的本意是洗牌.混洗的意思,把一组有规则的数据尽量打乱成无规则的数据.而在MapReduce中,Shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则"打乱& ...

  3. Spark Shuffle原理解析

    Spark Shuffle原理解析 一:到底什么是Shuffle? Shuffle中文翻译为"洗牌",需要Shuffle的关键性原因是某种具有共同特征的数据需要最终汇聚到一个计算节 ...

  4. 深入理解Spark 2.1 Core (九):迭代计算和Shuffle的原理与源码分析

    Task有两个子类,一个是非最后的Stage的Task,ShuffleMapTask:一个是最后的Stage的Task,ResultTask.它们都覆盖了Task的runTask方法. 我们来看一下S ...

  5. Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理)

    Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理) 参考文章: (1)Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理) (2)https://ww ...

  6. Spark shuffle机制演进史及原理说明(sort-based/hash-based/bypassShuffleManager)

    spark shuffle 演进的历史 Spark 0.8及以前 Hash Based Shuffle Spark 0.8.1 为Hash Based Shuffle引入File Consolidat ...

  7. 深入分析Spark任务调度的原理--Java后端同学入门Spark编程系列

    作者:陌北有棵树,Java人,架构师社区合伙人! 之前写了一篇:<我作为Java后端,分享一下入门Spark编程的经历!> 上篇是Spark入门的第一篇,写了一些关于Spark编程中RDD ...

  8. 022 Spark shuffle过程

    1.官网  http://spark.apache.org/docs/1.6.1/configuration.html#shuffle-behavior Spark数据进行重新分区的操作就叫做shuf ...

  9. Spark Shuffle 解析

    5.Spark Shuffle 解析 5.1 Shuffle 的核心要点 5.1.1 ShuffleMapStage 与 FinalStage 在划分 stage 时,最后一个 stage 称为 Fi ...

最新文章

  1. 为什么不可以使用哈曼顿距离_哈曼卡顿音乐琉璃1代2代评测,不但抓耳,还让你视线也难离开...
  2. 爬虫架构师得逆袭之路
  3. java中使用base64加密解密16进制方法
  4. 力软 java主从表保存_JAVA常用知识总结(十二)——数据库(二)
  5. 风铃发卡网源码-可商用,支持个人码支付,当面付
  6. 演练 制作爱奇异视频播放列表 0929
  7. 利用课间10分钟,打造一个恶劣天气实时预警系统
  8. 高等微積分(高木貞治) 1.4節 例2
  9. [机器学习实战]决策树
  10. python 爬虫抓取网页数据导出excel_如何用excel实现网页爬虫
  11. javaweb网上鞋店
  12. stata 空间杜宾模型_一文读懂空间计量及stata应用(二)(附lr检验、动态空间面板杜宾/滞后模型dofile等)...
  13. adb刷入第三方recovery_PE Plus类原生系统刷入教程(小白基础篇)
  14. Validation 全注解+使用示例+官方文档
  15. 熵增定律:为什么熵增理论让好多人一下子顿悟了
  16. 记录下IDEA导入web项目遇到的web facet问题
  17. android x86启动卡死,[更新]Android-x86启动成功,但是还有点小问题。
  18. 【moeCTF题解-0x04】Crypto
  19. H3C、思科路由器简单配置
  20. 我的世界服务器自定义ui,自定义主菜单CustomMainMenu mod教程

热门文章

  1. win10右键闪退到桌面_【雷粉百科】windows10鼠标点击右键出现卡顿或者转圈
  2. python代码计算矩形面积_学习资料Python语言基础知识笔记以及答案
  3. mysql 自定义函数 时间差_MYSQL自定义函数之返回两个时间的指定类型时差
  4. mysql 新建库在哪找_求助,mysql创建数据库找不到文件在哪问题
  5. mysql编辑工具wf_轻松构建自定义WF设计器
  6. java类库帮助文档,薪资翻倍
  7. 【OpenCV环境配置】Xcode+OpenCV+pkg-config
  8. 【微信小程序企业级开发教程】小程序的配置详解
  9. 全卷积神经网路【U-net项目实战】U-Net网络练习题: Kaggle - 2018 Data Science Bowl
  10. 711 发送请求失败_30秒上手新一代 Http 请求神器 RxHttp