`
bit1129
  • 浏览: 1053463 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Spark四十八】Spark Shuffle第二部分:Spark Shuffle概述

 
阅读更多

Spark Shuffle概述

 

1. Spark 提供了两种Shuffle方式 hash-based和sort based。可以通过spark.shuffle.manager参数指定。在Spark1.2中,将shuffle的默认实现设置为了sort based

对于hash based shuffle,

  • Spark使用类似HashMap的数据结构来对 shuffle 来的数据进行 aggregate(相同的K,通过Map来aggregate)
  • 不会对数据进行提前排序。如果用户需要经过排序的数据,那么需要自己调用类似 sortByKey() 的操作

对于sort based shuffle

  • sort based shuffle会对数据进行排序

对于hash based shuffle和sort based shuffle,除了是否排序上的差异之外,还有就是map端产生的文件个数。

hash based shuffle的主要问题就是产生的文件数太多。

 

2. 在 Spark 中,没有像Hadoop Shuffle那样明确的阶段,只有不同的 stage 和一系列的 transformation(),所以 spill, merge, aggregate 等操作需要蕴含在 transformation() 中。

 

3. Spark Shuffle可以分为两个阶段,Shuffle Write和Shuffle Read。map 端划分数据、持久化数据的过程称为 shuffle write,而将 reducer 读入数据、aggregate 数据的过程称为 shuffle read

 

4. Shuffle Write的任务

4.1 在ShuffleMapTask中对finalRDD产出的数据进行写操作。写操作会写到磁盘(而不是存放到内存中),一方面节省内存空间,另一方面也是为了容错。这就解释了相对于内存而言,很大量的数据做shuffle的时候,不会出现内存不够的情况。

4.2 每个Partition处理完(即ShuffleMapTask执行完),需要告知MapOutputTrackerMaster它产出的数据存放在那里,以供Reducer消费。

 

4.3 不同的RDD算子,比如reduceByKey,会使用Map端的combine操作,将数据进行提前combine;而有些算子,如groupByKey,则不使用Map的combine操作。

4.4 对于hash based shuffle,shuffle产生的分区数据不排序,而对于sort based shuffle则会对分区数据进行排序

 

5. Shuffle Read的任务

5.1从MapOutputTrackerMaster上获取属于它处理的Map输出的数据,这里可能涉及fetch remote

5.2 获取到所有的Map产出的数据后,会做一个总aggregate?

 



 

 

 

分享到:
评论

相关推荐

    spark-2.2.0-yarn-shuffle.jar

    spark-2.2.0-yarn-shuffle.jar

    Spark的shuffle调优

    spark.shuffle.blockTransferService netty shuffle过程中,传输数据的方式,两种选项,netty或nio,spark 1.2开始,默认就是netty,比较简单而且性能较高,spark 1.5开始nio就是过期的了,而且spark 1.6中会去除掉 ...

    spark-1.6.1-yarn-shuffle.jar

    spark-1.6.1-yarn-shuffle.jar 下载。spark-1.6.1-yarn-shuffle.jar 下载。spark-1.6.1-yarn-shuffle.jar 下载。

    SparkShuffle.xmind

    SparkShuffle思维导图,xmind

    Spark 的两种核心 Shuffle 详解.pdf

    Spark Shuffle 分为两种:一种是基于 Hash 的 Shuffle;另一种是基于 Sort 的 Shuffle。

    【Spark内核篇04】SparkShuffle解析1

    【Spark内核篇04】SparkShuffle解析1

    Spark-Core学习知识笔记整理

    第二章 Spark开发环境搭建 8 1 Spark运行模式 8 2 Spark环境搭建 8 2.1Scala的安装 8 2.2Spark的单节点配置 9 2.3Spark-Standalone集群配置 9 2.4Spark-on-Yarn模式配置 12 2.5Spark-on-Mesos模式配置 13 2.6Hive-on...

    spark-network-shuffle_2.11-2.1.3-SNAPSHOT.jar

    spark-network-shuffle_2.11-2.1.3-SNAPSHOT.jar

    Spark的Shuffle总结分析

    1.1 shuffle概述 Shuffle就是对数据进行重组,由于分布式计算的特性和要求,在实现细节上更加繁琐和复杂。 在MapReduce框架,Shuffle是连接Map和Reduce之间的桥梁,Map阶段通过shuffle读取数据并输出到对应的Reduce...

    Spark-shuffle机制.pdf

    介绍Spark Shuffle机制

    Spark思维导图之Shuffle.png

    Spark思维导图之Shuffle.png

    【Spark调优篇03】Spark之Shuffle调优1

    思考学习的深度Spark之Shuffle调优调优一:调节map端缓冲区大小在Spark任务运行过程中,如果shuffle的map端处理的数据量比较大,但是map

    Apache Spark Shuffle I/O 在 Facebook 的优化

    我们都知道,Shuffle 操作在 Spark 中是一种昂贵的操作。在 Facebook,单个 Job 的 Shuffle 就可能往磁盘中写入 300TB 的数据;而且 shuffle reads 也是一种低效的操作,这会大大延长作业的整体执行时间,并且消耗...

    Spark性能优化:shuffle调优

    但是也必须提醒大家的是,影响一个Spark作业性能的因素,主要还是代码开发、资源参数以及数据倾斜,shuffle调优只能在整个Spark的性能调优中占到一小部分而已。因此大家务必把握住调优的基本原则,千万不要舍本逐末...

    Spark源码系列(六)Shuffle的过程解析

    Spark大会上,所有的演讲嘉宾都认为shuffle是最影响性能的地方,但是又无可奈何。之前去百度面试hadoop的时候,也被问到了这个问题,直接回答了不知道。这篇文章主要是沿着下面几个问题来开展:shuffle过程的划分?...

    Apache Spark Shuffle I/O 在 Facebook 的优化 [PDF]

    我们都知道,Shuffle 操作在 Spark 中是一种昂贵的操作。在 Facebook,单个 Job 的 Shuffle 就可能往磁盘中写入 300TB 的数据;而且 shuffle reads 也是一种低效的操作,这会大大延长作业的整体执行时间,并且消耗...

    Spark-2.3.1源码解读

    Spark-submit关于参数及部署模式的部分解析 GroupByKey VS ReduceByKey OrderedRDDFunctions那些事 高效使用mappartitions standalone模式下executor调度策略 Spark Sql源码阅读 Spark Sql源码阅读 hive on ...

    spark-3.2.2-bin-3.0.0-cdh6.3.2

    内容概要:由于cdh6.3.2的spark版本为2.4.0,并且spark-sql被阉割,现基于cdh6.3.2,scala2.12.0,java1.8,maven3.6.3,,对spark-3.2.2源码进行编译 应用:该资源可用于cdh6.3.2集群配置spark客户端,用于spark-sql

    七个pdf理解spark系列_4-shuffleDetails

    GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,这是第四个pdf,描述了shuffle的细节,对比了MapReduce与spark的shuffle过程...

    SparkShuffle过程分析:Reduce阶段处理流程

    Spark在Map阶段调度运行的ShuffleMapTask,最后会生成.data和.index文件,可以通过我的这篇文章SparkShuffle过程分析:Map阶段处理流程了解具体流程和详情。同时,在Executor上运行一个ShuffleMapTask,返回了一个...

Global site tag (gtag.js) - Google Analytics