• Spark Shuffle调优原理和最佳实践


    对性能消耗的原理详解

    在分布式系统中,数据分布在不同的节点上,每一个节点计算一部份数据,如果不对各个节点上独立的部份进行汇聚的话,我们计算不到最终的结果。我们需要利用分布式来发挥Spark本身并行计算的能力,而后续又需要计算各节点上最终的结果,所以需要把数据汇聚集中,这就会导致Shuffle,这也是说为什么Shuffle 是分布式不可避免的命运。因为Shuffle 的过程中会产生大量的磁盘 IO、网络 IO、以及压缩、解压缩、序列化和反序列化的操作,这一系列的操作对性能都是一个很大的负担。

    调优是一个动态的过程,需要根据业务数据的特性还有硬件设备的条件,经过不断的测试,才能达到一个最优化的水平。以下是一些Spark参数的介绍,以及一些调优的最佳实战,参数调优是其中一个减少Shuffle所带来的性能负担的方法。

    参数调优原理和最佳实践

    Spark.Shuffle.manager默认值:Sort

      参数说明:该参数用于设置ShuffleManager的类型。Spark 1.5以后,有三个可选项:Hash、Sort和Tungsten-Sort。HashShuffleManager是Spark 1.2以前的默认选项,但是Spark 1.2以及之后的版本默认都是SortShuffleManager了。Tungsten-Sort与Sort类似,但是使用了Tungsten计划中的堆外内存管理机制,内存使用效率更高。

      调优建议:由于SortShuffleManager默认会对数据进行排序,因此如果你的业务逻辑中需要该排序机制的话,则使用默认的SortShuffleManager就可以;而如果你的业务逻辑不需要对数据进行排序,那么建议参考后面的几个参数调优,通过bypass机制或优化的HashShuffleManager来避免排序操作,同时提供较好的磁盘读写性能。这里要注意的是,Tungsten-Sort要慎用,因为之前发现了一些相应的bug。

    Spark.Shuffle.manager,该参数用于设置 ShuffleManager的类型,Spark 2.0以后,只有2个可选项,Sort 和Tungsten-Sort,从源码中查看,以前的 Hash-Based Shuffle 算法在新版本中已经被废弃。

    SparkEnv.scala源码:

        // Let the user specify short names for shuffle managers
        val shortShuffleMgrNames = Map(
          "sort" -> classOf[org.apache.spark.shuffle.sort.SortShuffleManager].getName,
          "tungsten-sort" -> classOf[org.apache.spark.shuffle.sort.SortShuffleManager].getName)
        val shuffleMgrName = conf.get("spark.shuffle.manager", "sort")
        val shuffleMgrClass =
          shortShuffleMgrNames.getOrElse(shuffleMgrName.toLowerCase(Locale.ROOT), shuffleMgrName)
        val shuffleManager = instantiateClass[ShuffleManager](shuffleMgrClass)

    Spark 2.0 版本默认是 SortShuffleManager。Tungsten-Sort 与 Sort 类似, SortShuffleManager默认对数据进行排序,因此如果用户的业务逻辑中需要该排序机制,则使用默认的 SortShuffleManager ;如果需要使用 Tungsten-Sort,则把 Spark.Shuffle.manager设置成 Tungsten-Sort。

  • 相关阅读:
    redis 配置文件说明
    Python 详解命令行解析
    Python 的字符编码
    pt-online-schema-change utf8mb4 错误解决方法【转】
    [MySQL 5.6] Innodb新特性之export/import 表文件
    查找数据库大小和表大小
    MySQL 增删列
    使用MySQL Shell创建MGR
    Qingcloud_MySQL Plus(Xenon) 高可用搭建实验
    MySQL事务提交流程
  • 原文地址:https://www.cnblogs.com/itboys/p/9185056.html
Copyright © 2020-2023  润新知