shuffle 订阅
曳步舞,又称鬼步舞。它起源于澳大利亚墨尔本。它属于一种力量型舞蹈,是一种拖着脚走的舞步,动作快速有力,音乐强悍有震撼力(主要是电子舞曲,多为Trance, hardstyle,house, hardcore ),舞蹈充满动感活力,极具现场渲染力。曳步舞有很多种风格,各风格的性质不一样,曳步舞的主要风格有:硬派、MAS、AUS、BASS、MARK、自由风等(因国籍与地域不同,很多相同风格的叫法略有不同)。 展开全文
曳步舞,又称鬼步舞。它起源于澳大利亚墨尔本。它属于一种力量型舞蹈,是一种拖着脚走的舞步,动作快速有力,音乐强悍有震撼力(主要是电子舞曲,多为Trance, hardstyle,house, hardcore ),舞蹈充满动感活力,极具现场渲染力。曳步舞有很多种风格,各风格的性质不一样,曳步舞的主要风格有:硬派、MAS、AUS、BASS、MARK、自由风等(因国籍与地域不同,很多相同风格的叫法略有不同)。
信息
起源地
澳大利亚墨尔本
基本步法
奔跑,侧滑,花式
起源时间
20世纪80年代
类似舞种
Jumpstyle Free step、Cwalk
中文名
曳(yè)步舞
主要风格
硬派、MAS、AUS、MARK、BASS
外文名
Shuffle
曳步舞舞蹈历史
曳步舞由于发源地是澳大利亚墨尔本,于是也被叫做:墨尔本曳步舞(MelbourneShuffle)。是20世纪80年代起源于锐舞派对的一种舞步,发源于澳大利亚墨尔本地下派对,基本动作是一个快速切换,流畅完成的两步动作,舞蹈风格适合各种类型的电子音乐,例如:House , Trance ,Techno ,Hard Dance , Hardstyle。MelbourneShuffle这个带前缀地区名词的名称,早期是为了区分Shuffle这个词的多元性,才用Melbourne标前缀词,区分出舞蹈。但是已经没有多少国家地区的舞者在用了。shuffling大多为欧美地区的舞者在用,但是被其他发展好的国家地区不太认同。比如俄罗斯,澳大利亚,马来西亚,就连新兴的韩国和日本有比赛的国家都大多用Shuffle。动作简洁,快速有力,节奏感强,主要表现通过双脚动作快速切换,通过滑行,踢腿,踩踏,转身等动作完成的一种即兴表演,自由度很高,个性十足的舞步。当前,中国国内流行的“广场舞鬼步舞”与曳步舞Shuffle存在本质区别。
收起全文
精华内容
下载资源
问答
  • shuffle

    万次阅读 2019-11-14 14:33:51
    shuffle 输入时key value的 list shuffle 输出是key value的list MapReduce计算任务的步骤 第一步:InputFormat InputFormat到hdfs上读取数据 将数据传给Split 第二步:Split Split将数据金进行逻辑切分 将数据传给RR ...

    混洗
    shuffle 输入时key value的 list
    shuffle 输出是key value的list

    MapReduce计算任务的步骤
    第一步:InputFormat
    InputFormat到hdfs上读取数据
    将数据传给Split
    第二步:Split
    Split将数据金进行逻辑切分
    将数据传给RR
    第三步:RR
    RR:将传入的数据转换成一行一行的数据,输出行首字母偏移量对应的数据
    将数据传给MAP
    第四步:MAP
    MAP:根据业务需求实现自定义代码
    将数据传给Shuffle的partition
    第五步:partition
    partition:按照一定的分区规则,将key value的list进行分区
    将数据传给Shuffle的Sort
    第六步:Sort
    Sort:对分区内的数据进排序
    将数据传给Shuffle的combiner
    第七步:combiner
    combiner:对数据进行局部聚合
    将数据传给Shuffle的Group
    第八步:Group
    Group:将相同key的key提取出来作为唯一的key
    将相同key对应的value获取出来作为value的list
    将数据传给Redduce
    第九步:Reduce
    Reduce:根据业务需求进行最终的合并汇合
    将数据传给outputFormat
    第十步:outputFormat
    outputFormat:将数据写入HDFS

    展开全文
  • Shuffle

    2019-05-21 22:36:18
    WordCount 遇到shuffle的算子,就会拆stage

    WordCount在这里插入图片描述

    遇到shuffle的算子,就会拆stage

    展开全文
  • spark 的shuffle

    2019-11-23 20:00:20
  • Spark Shuffle分为Hash Shuffle和Sort Shuffle。 Hash Shuffle是Spark 1.2之前的默认Shuffle实现,并在Spark 2.0版本中被移除。因此,了解Hash Shuffle的意义更多的在于和Sort Shuffle对比,以及理解为什么Sort ...

    概述

    Spark Shuffle分为Hash Shuffle和Sort Shuffle。
    Hash Shuffle是Spark 1.2之前的默认Shuffle实现,并在Spark 2.0版本中被移除。因此,了解Hash Shuffle的意义更多的在于和Sort Shuffle对比,以及理解为什么Sort Shuffle能够完全取代Hash Shuffle。
    Spark 1.2起默认使用Sort Shuffle,并且Sort Shuffle在map端有三种实现,分别是UnsafeShuffleWriter、BypassMergeSortShuffleWriter、SortShuffleWriter,根据运行时信息自动选择对应的实现。

    Hash Shuffle

    我们将 map 端划分数据、持久化数据的过程称为 shuffle write,而将 reducer 读入数据、aggregate 数据的过程称为 shuffle read。

    shuffle write

    shuffle write 的任务很简单:将数据 partition 好,并持久化。持久化有多个目的:

    1. 减少内存存储空间压力。
    2. 允许稍晚执行reduce阶段的某些任务,比如没有足够多的executor同时执行分配任务,则数据已经持久化到磁盘中,可以稍晚些执行。
    3. 进行容错,即错误发生时,允许计算引擎仅重新执行reduce任务而不必重新启动所有的输入任务。
    4. 进行缓存,在已经执行过shuffle操作的数据上运行新的job(每一个action触发一个job,shuffle文件只会在一个application结束之后才会删除。Spark外部shuffle服务甚至可以运行用户终止进程而不删除shuffle文件),并不会运行shuffle操作之间的任务。由于shuffle文件已经写入磁盘,则可以执行使用shuffle文件进行操作,而不用重新运行之前的阶段。
      在这里插入图片描述
      但是需要注意的是在SparkSQL中不知道什么原因,这种优化失去了效果,具体原因还未进行探究。很有可能是跟SparkSQL执行计划的优化有关。

    shuffle write 的处理逻辑加入到 ShuffleMapStage(ShuffleMapTask 所在的 stage) 的最后,该 stage 的 final RDD 每输出一个 record 就将其 partition 并持久化。
    在这里插入图片描述
    ShuffleMapTask在将数据写入磁盘之前,会先写入内存缓冲区,缓冲区被称为bucket,其大小为spark.shuffle.file.buffer.kb ,默认是 32KB(Spark 1.1 版本以前是 100KB)。每个 ShuffleMapTask 包含 R 个缓冲区,R = reducer 个数(也就是下一个 stage 中 task 的个数)。Task具体将数据写入哪一个bucket,由partitioner.partition(record.getKey()))决定,即对数据进行分区。当缓冲区溢出时,将数据刷写到磁盘上,一个bucket形成一个ShuffleBlockFile。

    由于每次shuffle使用MR个bucket(M为MapTask个数,R为ReduceTask个数),会导致产生MR个shuffle文件,文件数量太多,所以Spark提出了优化的Consolidate Shuffle
    在这里插入图片描述
    Consolidate Shuffle 引入了shuffleFileGroup的概念,每个shuffleFileGroup都对应一批shuffle文件。shuffle文件数量与reduceTask数量相同(即与bucket数量相同)。只有在core上第一批执行的ShuffleMapTasks会创建一个shuffleFIleGroup,将数据写入到对应shuffle文件。

    在该 core 上后续执行的 ShuffleMapTasks 会复用shuffleFIleGroup和shuffle文件,即数据会继续写入到已有的shuffle文件。该机制会允许同个core上不同task复用同一个shuffle文件,对于多个task进行了一定程度的合并。这样,每次shuffle产生的文件数为C * R(C为spark集群的Core Number)。Consolidate Shuffle 功能可以通过spark.shuffle.consolidateFiles=true来开启。

    ShuffleMapTask在将数据写入bucket之前,根据mapSideCombine参数决定是否对数据进行combine操作,即map端的局部聚合。如果mapSideCombine为True,且指定了聚合函数,则会对数据先进行combine操作,再写入bucket。

    Shuffle read

    shuffle read首先进行fetch操作,将shuffle文件fetch到本地机器上。 fetch 来的 ShuffleFile 要先在内存做缓冲,Spark 规定这个缓冲界限不能超过 spark.reducer.maxMbInFlight,这里用 softBuffer(这里使用sortBuffer并不代表会排序) 表示,默认大小为 48MB。

    如果定义了聚集操作,通过聚集函数对fetch到缓冲区中的数据进行aggregator聚集操作,并且是边fetch边aggregator。Spark的聚集aggregator方式分为两种:只使用内存(必须保证有足够内存)和内存+磁盘。

    1. 如果spark.shuffle.spill = false就只用内存。内存使用的是AppendOnlyMap ,类似 Java 的HashMap。从缓冲中 deserialize 出来一个 <Key, Value> record,直接将其放进 HashMap 里面。如果该 HashMap 已经存在相应的 Key,那么直接进行 aggregate 操作,aggregate(hashMap.get(Key), Value),所以聚合操作必须是 commulative的。若在Map中没有查找到,则插入其中。
    2. 内存+磁盘使用的是ExternalAppendOnlyMap,其持有一个 AppendOnlyMap,开始过程与只使用内存模式相同,但是如果 AppendOnlyMap 快被装满时检查一下内存剩余空间是否可以够扩展,够就直接在内存中扩展。如果内存空间不足,ExternalAppendOnlyMap 将AppendOnlyMap进行排序(此排序按照key.hashcode进行排序,排序是为了之后的merge-aggregate过程,如果不排序,无法将多个文件merge)后 spill 到磁盘上生成spilledMap 文件,再重新 new 出来一个 AppendOnlyMap重复上述操作。当所有记录处理完毕之后,先对内存中的AppendOnlyMap进行排序,然后在对AppendOnlyMap和所有的spilledMap 文件进行全局 merge-aggregate。
      在这里插入图片描述

    然后再根据dep.keyOrdering判断是否需要进行数据排序,如果reduce端需要进行排序,会创建ExternalSorter(传入ordering= Some(keyOrd),但是aggregator = None),将所有数据插入ExternalSorter对数据进行排序,原理与map端ExternalSorter排序相同。

    Sort Shuffle

    Sort Shuffle在map端有三种实现,分别是UnsafeShuffleWriter、BypassMergeSortShuffleWriter、SortShuffleWriter。
    在这里插入图片描述
    注:上面SortShuffleWriter中提到的Partition,不是RDD中的Partition,而是类似Spark Hash Shuffle中的bucket,如果没有单独说明,Sort Shuffle相关文章中的Partition均为bucket,和源码中的变量名保持一致。

    运行时三种ShuffleWriter实现的选择

    Spark根据运行时信息选择三种ShuffleWriter实现中的一种。
    在这里插入图片描述

    1. 没有map端聚合操作,且RDD的Partition数小于200,使用BypassMergeSortShuffleWriter。
    2. 没有map端聚合操作,RDD的Partition数小于16777216,且Serializer支持relocation,使用UnsafeShuffleWriter。
    3. 上述条件都不满足,使用SortShuffleWriter。

    Serializer支持relocation

    上面提到UnsafeShuffleWriter需要Serializer支持relocation,Serializer支持relocation是指,Serializer可以对已经序列化的对象进行排序,这种排序起到的效果和先对数据排序再序列化一致。Serializer的这个属性会在UnsafeShuffleWriter进行排序时用到。支持relocation的Serializer是KryoSerializer,Spark默认使用JavaSerializer,通过参数spark.serializer设置。

    BypassMergeSortShuffleWriter

    BypassMergeSortShuffleWriter和Hash Shuffle中的HashShuffleWriter实现基本一致,唯一的区别在于,map端的多个输出文件会被汇总为一个文件,如下 。
    在这里插入图片描述

    map端结果按照bucket顺序依次写入磁盘文件中,这么处理后,Shuffle生成的文件数显著减少了,同时还会生成indexFile文件,记录各个bucket在dataFile中的位置,用于后续reducer随机读取文件。

    UnsafeShuffleWriter

    UnsafeShuffleWriter使用ShuffleExternalSorter和ShuffleInMemorySorter两部分,功能如下
    在这里插入图片描述
    即ShuffleExternalSorter记录原始数据,ShuffleInMemorySorter记录元数据(parititionid和数据位置信息)。

    排序:写文件或溢写前根据数据的PartitionId信息,使用TimSort对ShuffleInMemorySorter的long数组排序,排序的结果为,PartitionId相同的聚集在一起,且PartitionId较小的排在前面,ShuffleExternalSorter中的数据不需要处理。
    在这里插入图片描述
    写数据:依次读取ShuffleInMemorySorter中long数组的元素,再根据page number和offset信息去ShuffleExternalSorter中读取K-V Pair,写入文件,如下
    在这里插入图片描述
    溢写 & 合并:UnsafeShuffleWriter首先会使用ShuffleExternalSorter在内存中接收数据,当内存数据超过阈值时,溢写数据到磁盘,每次溢写会生成上图中的一个dataFile,如果多次溢写产生多个dataFile,会在map端数据处理结束后进行merge合并为一个dataFile(一个Task生成一个file)。

    UnsafeShuffleWriter原理、优势和使用条件解释:https://blog.csdn.net/u011564172/article/details/72764010

    SortShuffleWriter

    SortShuffleWriter在首先创建ExternalSorter(1、如果mapSideCombine为true,会传入aggregator和keyOrdering;2、否则aggregator和keyOrdering均为None),其包含两个数据结构,即PartitionedAppendOnlyMap和PartitionedPairBuffer。SortShuffleWriter根据shouldCombine (aggregator.isDefined,即有无定义aggregator操作)选择使用Map还是Buffer接收数据。PartitionedAppendOnlyMap可用于combine操作,可以边插入进行combine操作。

    随后将所有数据写入ExternalSorter,当达到内存阈值之后,将PartitionedAppendOnlyMap或者PartitionedPairBuffer溢写入磁盘文件中。在溢写操作之前,对数据进行排序,排序规则根据构造ExternalSorter传入的aggregator和keyOrdering而变化,如下:

    • 如果keyOrdering和aggregator都为null,则只使用PartitionID排序;
    • 如果keyOrdering不为null,排序规则按照PartitionID+keyOrdering(对于 aggregator为null,而keyOrdering不为null,通常是被sortbykey的reduceTask使用。sortbykey在map端不会排序,因为构造ExternalSorter时,因为mapSideCombine=false,所以传入aggregator和keyOrdering参数都为null)。
    • 如果keyOrdering为null,aggregator不为null,则使用PartitionID+key.hashcode()进行排序。这种排序称为半排序,A partial ordering means that equal keys have comparator.compare(k, k) = 0, but some
      non-equal keys also have this, so we need to do a later pass to find truly equal keys。hascode相同的key,值并不一定相同,所以在合并溢写文件时,进行额外处理,区别hascode相同,但key值不相同的数据。

    每次溢生成一个磁盘文件,溢写通过缓冲的形式,每写入serializerBatchSize条记录,调用flush()函数,强制刷写到磁盘。

    当全部数据到写入ExternalSorter之后,将所有数据写入同一个磁盘文件。

    • 若此时没有溢写文件,则将ExternalSorter内存中的数据按照上述方法排序后写入一个磁盘文件。
    • 若此时有若干溢写文件,则先将ExternalSorter内存中的数据进行排序,然后和所有溢写文件进行merger-sort,最终生成一个磁盘文件。
    • 再写入最终的磁盘文件时,每次将属于一个分区(分发到一个ResultTask的数据)的所有记录写入后(因为是按照PartitionID+keyOrdering排序的,所以属于一个分区的数据肯定在一块),会调用writer.commitAndGet()获取分区的segment信息。将所有segment的长度记录在数组中,最后生成索引文件,标识各个分区在磁盘文件中的位置,start offset和end offset。

    SortShuffleWriter源码理解:https://blog.csdn.net/qq_26222859/article/details/81562272

    在这里插入图片描述

    参考:
    https://blog.csdn.net/u011564172/article/details/72763978
    https://github.com/JerryLead/SparkInternals/blob/master/markdown/4-shuffleDetails.md
    https://blog.csdn.net/u011564172/article/details/72763978
    https://blog.csdn.net/u011564172/article/details/72764010
    https://blog.csdn.net/u011564172/article/details/71170234
    https://blog.csdn.net/weixin_39216383/article/details/81194498
    https://blog.csdn.net/qq_26222859/article/details/81562272

    展开全文
  • Generic shuffle

    2020-12-09 08:01:46
    <p>In this commit, I add a generic shuffle operator <code>GenericShuffleProducer.java</code> <code>GenericShuffleConsumer.java</code> , which could handle broadcast, shuffle, hyper shuffle operator ...
  • Spark的shuffleShuffle read和shuffle write过程 在发生shuffle的过程中,会发生shuffle write和shuffle read。 shuffle write:发生在shuffle之前,把要shuffle的数据写到磁盘 为什么:为了保证数据的安全性...
  • List shuffle

    2020-12-02 02:15:34
    <div><p>Random; List clone shuffle <p>Exception: List does not respond to 'shuffle' <p>List shuffle Command Line 1</p><p>该提问来源于开源项目:IoLanguage/io</p></div>
  • 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。Spark作为MapReduce框架的一种实现,自然也实现了...
  • Shuffle now creates a playlist when the shuffle button is toggled, and continuously loops through that playlist until the shuffle button is toggled off. <p>Known issues: - Broke the ability to ...
  • shuffle调优

    2019-03-02 09:35:21
    5.3、shuffle调优 spark在执行groupByKey、reduceByKey等操作时的,shuffle环节的调优。这个很重要。shuffle调优,其实对spark作业的性能的影响,是相当之高!!!经验:在spark作业的运行过程中,只要一牵扯到有...
  • Shuffle简介Shuffle的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则的数据。而在MapReduce中,Shuffle更像是洗牌的逆过程,指的是将map端的无规则输...
  • shuffle理解

    2021-03-16 15:42:11
    在模型训练前,我们往往对数据进行shuffle,即随机打乱数据,为什么要这么做呢?不这么做会出现什么问题?何时应该shuffle,何时不该shuffle呢? Q1:为什么要进行shuffle? A1:不论是机器学习还是深度学习,我们...
  • 可以对比hadoop shuffle spark是对mapreduce的封装 SparkShuffle: SparkShuffle概念 reduceByKey会将上一个RDD中的每一个key对应的所有value聚合成一个value,然后生成一个新的RDD,元素类型是<key,value>...
  • Shuffle解密

    2017-11-08 07:56:15
    Shuffle解密 0. 准备阶段 Map的输出会经过一个名为shuffle的过程,交给Reduce处理。在MapReduce流程中,为了让Reduce可以并行处理Map结果,必须对Map的输出进行一定的排序和分割,然后再交给对应的Reduce,而这...
  • Spark Shuffle之Sort Shuffle

    万次阅读 2017-05-27 23:13:00
    介绍Spark Sort Shuffle
  • Spark Shuffle

    2020-05-17 00:52:22
    触发 Shuffle 的操作 在 Spark 作业过程什么时候产生 Shuffle ?     Shuffle描述着数据从map task输出到reduce task输入的这段过程。         通常...
  • spark shuffle

    2020-12-01 09:41:44
    Shuffle 是数据从map端到reduce数据流转的一种形式,当发生join、groupby等操作的时候,父类数据将会根据key进行shuffle write当本地,然后reduce根据相同key进行shuffle read,这样就产生了同一个父RDD可能存在于多...
  • 详解MapReduce Shuffle与Spark Shuffle

    千次阅读 多人点赞 2019-06-04 09:58:09
    1 Shuffle简介 Shuffle的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则的数据。而在MapReduce中,Shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据...
  • Spark Shuffle之Hash Shuffle

    万次阅读 2017-05-21 23:53:41
    介绍Spark Hash Shuffle
  • Shuffle 操作

    2019-09-25 16:31:16
    在spark中的主要操作,触发一个叫作shuffle的事件。shuffle是spark对于重新分布数据的机制,因此数据 能在partitions上进行不同的分组。Shuffle包含在executors和machines上的数据复制,使得 shuffle成为一个复杂的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,635
精华内容 8,654
关键字:

shuffle