SortShuffleManager的bypass机制触发条件是什么?

SortShuffleManager的运行机制主要分成两种,一种是普通运行机制,另一种是bypass运行机制。当shuffle write。

task的数量小于等于spark.shuffle.sort.bypassMergeThreshold参数的值时(默认为200),就会启用bypass机制。

该模式下,数据会先写入一个内存数据结构中(默认5M),此时根据不同的shuffle算子,可能选用不同的数据结构。如果是reduceByKey这种聚合类的shuffle算子,那么会选用Map数据结构,一边通过Map进行聚合,一边写入内存;如果是join这种普通的shuffle算子,那么会选用Array数据结构,直接写入内存。

(2)接着,每写一条数据进入内存数据结构之后,就会判断一下,是否达到了某个临界阈值。如果达到临界阈值的话,那么就会尝试将内存数据结构中的数据溢写到磁盘,然后清空内存数据结构。

(3)排序

在溢写到磁盘文件之前,会先根据key对内存数据结构中已有的数据进行排序。

(4)溢写

排序过后,会分批将数据写入磁盘文件。默认的batch数量是10000条,也就是说,排序好的数据,会以每批1万条数据的形式分批写入磁盘文件。

(5)merge

一个task将所有数据写入内存数据结构的过程中,会发生多次磁盘溢写操作,也就会产生多个临时文件。最后会将之前所有的临时磁盘文件都进行合并成1个磁盘文件,这就是merge过程。由于一个task就只对应一个磁盘文件,也就意味着该task为Reduce端的stage的task准备的数据都在这一个文件中,因此还会单独写一份索引文件,其中标识了下游各个task的数据在文件中的start offset与end offset。

触发条件

bypass运行机制的触发条件如下: 1)shuffle map task数量小于spark.shuffle.sort.bypassMergeThreshold=200参数的值。 2)不是map combine聚合的shuffle算子(比如reduceByKey有map combie)。

SortShuffleManager的bypass机制触发条件是什么?

bypass运行机制的触发条件如下:

1)shuffle map task数量小spark.shuffle.sort.bypassMergeThreshold=200参数的值。

2)不是map combine聚合的shuffle算子(比如reduceByKey有map combie)。

• 此时task会为每个reduce端的task都创建一个临时磁盘文件,并将数据按key进行hash,然后根据key的hash值, 将key写入对应的磁盘文件之中。当然,写入磁盘文件时也是先写入内存缓冲,缓冲写满之后再溢写到磁盘文件的 。最后,同样会将所有临时磁盘文件都合并成一个磁盘文件,并创建一个单独的索引文件。

• 该过程的磁盘写机制其实跟未经优化的HashShuffleManager是一模一样的,因为都要创建数量惊人的磁盘文件, 只是在最后会做一个磁盘文件的合并而已。因此少量的最终磁盘文件,也让该机制相对未经优化的 HashShuffleManager来说,shuffle read的性能会更好。

而该机制与普通SortShuffleManager运行机制的不同在于:

第一,磁盘写机制不同;

第二,不会进行排序。也就是说,启用该机制的最大好处在于,shuffle write过程中,不需要进行数据的排序操作, 也就节省掉了这部分的性能开销。

总结:

SortShuffle也分为普通机制和bypass机制

普通机制在内存数据结构(默认为5M)完成排序,会产生2M个磁盘小文件。

而当shuffle map task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值。或者算子不是聚合类的shuffle算子(比如reduceByKey)的时候会触发SortShuffle的bypass机制,SortShuffle的bypass机制不会进行排序,极大的提高了其性能。

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/288800.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
黑马程序员黑马程序员订阅用户
上一篇 2023年6月27日 07:22
下一篇 2023年6月27日 08:30

相关推荐

  • 说说DAG任务分解和Shuffle RDD怎么使用。

    DAG任务分解和Shuffle RDD是Apache Spark中两个重要的概念,它们在分布式计算中起着关键的作用,下面将详细介绍这两个概念的使用方法。 1. DAG任务分解: DAG(Directed Acyclic Graph)任务分解是指将一个复杂的计…

    2024年6月19日
    00
  • 我来教你Linux系统有什么常用命令。

    Linux系统有很多常用的命令,以下是一些常用的Linux命令:ls、cd、pwd、cat、cp、rm等 。这些命令可以帮助您管理文件、目录、进程、网络和系统配置等。 Linux系统有什么常用命令 Linux操作系统是一种开源的、免费的…

    2024年7月16日
    00
  • 小编教你python中升序排列函数。

    在Python中,排序是一个常见的操作,无论是对数字、字符串还是其他可迭代对象,Python提供了多种方法来执行排序操作,包括使用内置函数、列表的sort方法和标准库中的sorted函数,本篇文章将重点讨论如何在Python中…

    2024年7月20日
    00
  • 经验分享在Linux系统上怎么按大小排序列出文件。

    在Linux系统上,可以使用以下命令按大小排序列出文件:,,“bash,ls -lS,`,,-l选项表示长列表格式,-S`选项表示按文件大小排序。 在Linux系统上怎么按大小排序列出文件 在Linux系统中,我们可以使用ls命…

    2024年7月16日
    00
  • 我来分享linux卸载redis。

    一、Redis简介 Redis(Remote Dictionary Server)是一个开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,它通常被称为数据结构服务器,因为值可以是字符串、…

    2024年6月16日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息