静态网站的短处,网站赚钱思路,沈阳建设工程质量检测中心网站,微信小程序游戏手游排行榜Shuffle的本质基于磁盘划分来解决分布式大数据量的全局分组、全局排序、重新分区【增大】的问题。
1、Spark的Shuffle设计
Spark Shuffle过程也叫作宽依赖过程#xff0c;Spark不完全依赖于内存计算#xff0c;面临以上问题时#xff0c;也需要Shuffle过程。
2、Spark中哪…Shuffle的本质基于磁盘划分来解决分布式大数据量的全局分组、全局排序、重新分区【增大】的问题。
1、Spark的Shuffle设计
Spark Shuffle过程也叫作宽依赖过程Spark不完全依赖于内存计算面临以上问题时也需要Shuffle过程。
2、Spark中哪些算子会产生Shuffle
只要这个算子包含以下四个功能之一必须经过Shuffle 进行joinjoin、fullOuterJoin、 leftOuterJoin 、rightOuterJoin 大数据量全局分组reduceByKey、groupByKey 大数据量全局排序sortBy、sortByKey 大数据量增大分区repartition、coalesce 3、Spark中有哪些shuffle【分类的】?
Spark 0.8及以前 Hash Based Shuffle Spark 0.8.1 为 Hash Based Shuffle 引入 File Consolidation 机制 Spark 1.1 引入 Sort Based Shuffle 但默认仍为 Hash Based Shuffle Spark 1.2 默认的 Shuffle 方式改为 Sort Based Shuffle Spark 1.4 引入 Tungsten-Sort Based Shuffle 直接使用堆外内存和新的内存管理模型节省了内存空间和大量的gc提升了性能 Spark 1.6 Tungsten-sort 并入 Sort Based Shuffle Spark 2.0 Hash Based Shuffle 退出历史舞台
1Hash Based Shuffle
特点没有排序只分区每个Task按照ReduceTask个数生成多个文件【M * R】
优点简单数据量比较小性能就比较高
缺点小文件非常多数据量比较大性能非常差 2) Hash Based Shuffle 【优化后的File Consolidation机制 3) Sort Based Shuffle [目前最新的] Shuffle Write Shuffle Read
Shuffle Write类似于MR中的Map端Shuffle但是Spark的 Shuffle Write 有3种会根据情况自动判断选择哪种Shuffle Write
Shuffle Read类似于MR中的Reduce端Shuffle但是 Spark的 Shuffle Read 功能由算子来决定不同算子经过的过程不一样的。
MR Shuffle可以参考MapReduce 的 Shuffle 过程-CSDN博客
4、Spark 2以后的Shuffle Write判断机制
第一种SortShuffleWriter普通Sort Shuffle Write机制
排序生成一个整体基于分区和分区内部有序的文件和一个索引文件 大多数场景数据量比较大场景 与MR的Map端Shuffle基本一致 特点有排序先生成多个有序小文件再生成整体有序大文件每个Task生成2个文件数据文件和索引文件 Sort Shuffle Write过程与MapReduce的Map端shuffle基本一致 第二种BypassMergeSortShuffleWriter
类似于优化后的Hash Based Shuffle先为每个分区生成一个文件最后合并为一个大文件分区内部不排序 条件分区数小于200并且Map端没有聚合操作 场景数据量小
跟第一个相比处理的数据量小处理的分区数小于200 不在内存中排序。
第三种UnsafeShuffleWriter
钨丝计划方案使用UnSafe API操作序列化数据使用压缩指针存储元数据溢写合并使用fastMerge提升效率
条件Map端没有聚合操作、序列化方式需要支持重定位Partition个数不能超过2^24-1个
在什么情况下使用什么ShuffleWriter 呢 ShuffleWriter的实现方式有三种
BypassMergeSortShuffleWriter
使用这种shuffle writer的条件是
(1) 没有map端的聚合操作 (2) 分区数小于参数spark.shuffle.sort.bypassMergeThreshold默认是200
UnsafeShuffleWriter
使用这种shuffle writer的条件是
(1) 序列化工具类支持对象的重定位 (2) 不需要在map端进行聚合操作 (3) 分区数不能大于PackedRecordPointer.MAXIMUM_PARTITION_ID 1
SortShuffleWriter
若以上两种shuffle writer都不能选择则使用该shuffle writer类。 这也是相对比较常用的一种shuffle writer。
5、 Shuffle Read类似于MapReduce中的Reduce端shuffle
MRReduce端的shuffle过程一定会经过合并排序、分组 需求统计每个单词出现的次数不需要排序依旧会给结果进行排序 SparkShuffle Read具体的功能由算子来决定不同的算子在经过shuffle时功能不一样 reduceByKeyShuffle Read只分组聚合不排序 sortByKeyShuffle Read只排序不分组 repartitionShuffle Read不排序不分组