Spark的Shuffle过程介绍
Shuffle Writer
Spark丰富了任务类型,有些任务之间数据流转不需要通过Shuffle,但是有些任务之间还是需要通过Shuffle来传递数据,比如wide dependency的group by key。
Spark中需要Shuffle输出的Map任务会为每个Reduce创建对应的bucket,Map产生的结果会根据设置的partitioner得到对应的bucketId,然后填充到相应的bucket中去。每个Map的输出结果可能包含所有的Reduce所需要的数据,所以每个Map会创建R个bucket(R是reduce的个数),M个Map总共会创建M*R个bucket。
Map创建的bucket其实对应磁盘上的一个文件,Map的结果写到每个bucket中其实就是写到那个磁盘文件中,这个文件也被称为blockFile,是Disk Block Manager管理器通过文件名的Hash值对应到本地目录的子目录中创建的。每个Map要在节点上创建R个磁盘文件用于结果输出,Map的结果是直接输出到磁盘文件上的,100KB的内存缓冲是用来创建Fast Buffered OutputStream输出流。这种方式一个问题就是Shuffle文件过多。
针对上述Shuffle过程产生的文件过多问题,Spark有另外一种改进的Shuffle过程:consolidation Shuffle,以期显著减少Shuffle文件的数量。在consolidation Shuffle中每个bucket并非对应一个文件,而是对应文件中的一个segment部分。Job的map在某个节点上第一次执行,为每个reduce创建bucket对应的输出文件,把这些文件组织成ShuffleFileGroup,当这次map执行完之后,这个ShuffleFileGroup可以释放为下次循环利用;当又有map在这个节点上执行时,不需要创建新的bucket文件,而是在上次的ShuffleFileGroup中取得已经创建的文件继续追加写一个segment;当前次map还没执行完,ShuffleFileGroup还没有释放,这时如果有新的map在这个节点上执行,无法循环利用这个ShuffleFileGroup,而是只能创建新的bucket文件组成新的ShuffleFileGroup来写输出。
比如一个Job有3个Map和2个reduce:(1) 如果此时集群有3个节点有空槽,每个节点空闲了一个core,则3个Map会调度到这3个节点上执行,每个Map都会创建2个Shuffle文件,总共创建6个Shuffle文件;(2) 如果此时集群有2个节点有空槽,每个节点空闲了一个core,则2个Map先调度到这2个节点上执行,每个Map都会创建2个Shuffle文件,然后其中一个节点执行完Map之后又调度执行另一个Map,则这个Map不会创建新的Shuffle文件,而是把结果输出追加到之前Map创建的Shuffle文件中;总共创建4个Shuffle文件;(3) 如果此时集群有2个节点有空槽,一个节点有2个空core一个节点有1个空core,则一个节点调度2个Map一个节点调度1个Map,调度2个Map的节点上,一个Map创建了Shuffle文件,后面的Map还是会创建新的Shuffle文件,因为上一个Map还正在写,它创建的ShuffleFileGroup还没有释放;总共创建6个Shuffle文件。
Shuffle Fetcher

Reduce去拖Map的输出数据,Spark提供了两套不同的拉取数据框架:通过socket连接去取数据;使用netty框架去取数据。
每个节点的Executor会创建一个BlockManager,其中会创建一个BlockManagerWorker用于响应请求。当Reduce的GET_BLOCK的请求过来时,读取本地文件将这个blockId的数据返回给Reduce。如果使用的是Netty框架,BlockManager会创建ShuffleSender用于发送Shuffle数据。
并不是所有的数据都是通过网络读取,对于在本节点的Map数据,Reduce直接去磁盘上读取而不再通过网络框架。
Reduce拖过来数据之后以什么方式存储呢?Spark Map输出的数据没有经过排序,Spark Shuffle过来的数据也不会进行排序,Spark认为Shuffle过程中的排序不是必须的,并不是所有类型的Reduce需要的数据都需要排序,强制地进行排序只会增加Shuffle的负担。Reduce拖过来的数据会放在一个HashMap中,HashMap中存储的也是

Spark的Shuffle过程介绍相关推荐

  1. Shuffle过程介绍

    摘要:腾讯分布式数据仓库基于开源软件Hadoop和Hive进行构建,TDW计算引擎包括两部分:MapReduce和Spark,两者内部都包含了一个重要的过程-Shuffle.本文对Shuffle过程进 ...

  2. 剖析Hadoop和Spark的Shuffle过程差异(一)

    一.前言 对于基于MapReduce编程范式的分布式计算来说,本质上而言,就是在计算数据的交.并.差.聚合.排序等过程.而分布式计算分而治之的思想,让每个节点只计算部分数据,也就是只处理一个分片,那么 ...

  3. 大数据开发:剖析Hadoop和Spark的Shuffle过程差异

    一.前言 对于基于MapReduce编程范式的分布式计算来说,本质上而言,就是在计算数据的交.并.差.聚合.排序等过程.而分布式计算分而治之的思想,让每个节点只计算部分数据,也就是只处理一个分片,那么 ...

  4. 【Big Data - Hadoop - MapReduce】通过腾讯shuffle部署对shuffle过程进行详解

    摘要: 通过腾讯shuffle部署对shuffle过程进行详解 摘要:腾讯分布式数据仓库基于开源软件Hadoop和Hive进行构建,TDW计算引擎包括两部分:MapReduce和Spark,两者内部都 ...

  5. 彻底理解MapReduce shuffle过程原理

    MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一 ...

  6. 022 Spark shuffle过程

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

  7. 详细探究Spark的shuffle实现

    Background 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了 ...

  8. [Spark][翻译]Spark 架构: Shuffle过程分析

    为什么80%的码农都做不了架构师?>>>    Spark Architecture: Shuffle Spark架构:Shuffle This is my second artic ...

  9. mapreduce shuffle过程问答

    通过hadoop权威指南学习hadoop,对shuffle过程一直很疑惑,经过查看网上多个帖子,最终 完成此篇问答总结. 1.什么叫shuffle 从map任务输出到reducer任务输入之间的过程就 ...

  10. Hadoop学习笔记—10.Shuffle过程那点事儿

    Hadoop学习笔记-10.Shuffle过程那点事儿 一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduc ...

最新文章

  1. 【最新】南京大学人工智能学院《模式识别》课程PPT
  2. 时钟同步和时钟修正的小技巧
  3. Solr中Field常用属性
  4. Angular 依赖注入机制根据providers定义生成注入实例的框架代码
  5. Java 8功能接口–实现Scala类型的随机思维
  6. mysql部门人员排序设计_MySQL数据库访问性能优化
  7. 解决从github上下载代码仓库慢的问题
  8. oracle+dg常用命令,DG 日常管理命令汇总
  9. iOS UITextField限制输入字数
  10. uni-app 开发微信,支付宝小程序
  11. (9)Redis-Cluster集群理论及实践【下】
  12. 性能高的tftp服务器,tftp服务器软件
  13. 无限增益多路反馈有源滤波器
  14. linux最好的mp4软件,【良心推荐】5款好用的MP4视频编辑器
  15. jQuery过年烟火炫酷背景插件音效
  16. c语言中复合语句不用花括号,【单选题】C语言中,可将一系列语句置于( )从而构成复合语句。 A. 一对尖括号\ \之间 B. 一对圆括号\( )\之间 C. 一对花括号 { } 之间 D....
  17. 十二周四次课(6月11日)
  18. CentOS6.8搭建Sentry环境
  19. AI生成的灌篮高手真人版,爷青回
  20. 一文详解计算机网络经典面试题

热门文章

  1. NLP学习04--长短期记忆网络LSTM
  2. maven配置本地jar包
  3. mysql 表数据压缩_mysql表数据压缩
  4. 计算机中是如何存储图片的,电脑如何保存图片
  5. windows系统c语言编译环境,在Windows平台搭建C语言开发环境
  6. 乌班图服务器应用,Ubuntu下安装Apache
  7. linux新漏洞,「漏洞通告」Linux Kernel 信息泄漏权限提升漏洞(CVE-2020-8835)
  8. linux 定位 踩内存_运维常见问题故障定位,这里总结全了!
  9. python-学生管理系统--2录入学生信息内容以及代码
  10. kafka-windows10中测试使用