Spark SQL关于性能调优选项详解

 更新时间:2023年02月01日 10:59:44   作者:CarveStone  
这篇文章将为大家详细讲解有关Spark SQL性能调优选项,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获

Spark_SQL性能调优

众所周知,正确的参数配置对提升Spark的使用效率具有极大助力,帮助相关数据开发、分析人员更高效地使用Spark进行离线批处理和SQL报表分析等作业。

性能调优选项

选型默认值用途
spark.sql.codegenfalse设为 true 时,Spark SQL 会把每条查询词语在运行时编译为 Java 二进制代码。这可以提高大型查询的性能,但在进行小规模查询时会变慢
spark.sql.inMemoryColumnarStorage.compressedfalse自动对内存中的列式存储进行压缩
spark.sql.inMemoryColumnarStorage.batchSize1000列示缓存时的每个批处理的大小。把这个值调大可能会导致内存不够的异常
spark.sql.parquet.compression.codecsnappy使用哪种压缩编码器。可选的选项包括 uncompressed/snappy/gzip/lzo

几种压缩选项的特点

spark.sql.parquet.compressed.codec 默认值为snappy 这个参数代表使用哪种压缩编码器。可选的选项包括uncompressed/snappy/gzip/lzo

uncompressed这个顾名思义就是不用压缩的意思

格式可分割平均压缩速度文本文件压缩效率Hadoop压缩编解码器纯java实现原生备注
snappy非常快org.apache.hadoop.io.compress.SnappyCodecSnapp有纯java的移植版,但是在Spark/Hadoop中不能用
gziporg.apache.hadoop.io.compress.GzipCodec
lzo非常快中等org.apache.hadoop.io.compress.LzoCodec需要在每个节点上安装LZO

可选的调优选项

Property NameDefaultMeaning
spark.sql.files.maxPartitionBytes128 MB读取文件时打包到单个分区的最大字节数
spark.sql.files.openCostInBytes4 MB打开一个文件的估计成本,取决于有多少字节可以被同时扫描,当多个文件放入一个 partition 时使用此方法。最好时过度估计,这样带有小文件的 partition 就会比带有大文件的 partition 快
spark.sql.broadcastTimeout300广播连接中等待时的超时时间(以秒为单位)
spark.sql.autoBroadcastJoinThreshold10 MB配置一个表的最大大小,以便在执行连接向所有节点广播,将该值设置为 -1 的话广播将会被禁用
spark.sql.shuffle.partitions200配置 partition 的使用数量当 shuffle 数据或聚合数据时

代码示例

初始化设置Spark Application配置

构建SparkSession实例对象

import org.apache.commons.lang3.SystemUtils
import org.apache.spark.SparkConf
import org.apache.spark.sql.streaming.OutputMode
import org.apache.spark.sql.{DataFrame, SparkSession}
object PerformanceTuneDemo {
	def main(args: Array[String]): Unit = {
		// 构建SparkSession实例对象,设置相关属性参数值
		val sparkConf = new SparkConf()
    		.setAppName(this.getClass.getSimpleName.stripSuffix("$"))
			.set("spark.sql.session.timeZone", "Asia/Shanghai")
			.set("spark.sql.files.maxPartitionBytes", "134217728")
			.set("spark.sql.files.openCostInBytes", "134217728")
			.set("spark.sql.shuffle.partitions", "3")
			.set("spark.sql.autoBroadcastJoinThreshold", "67108864")
		// 构建SparkSession实例对象
		val spark: SparkSession = SparkSession.builder()
    		.config(sparkConf)
			.getOrCreate()
	}
}

到此这篇关于Spark SQL关于性能调优选项详解的文章就介绍到这了,更多相关Spark SQL性能调优内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现中英文混合字符截取方法

    java实现中英文混合字符截取方法

    这篇文章主要为大家详细介绍了java实现中英文混合字符的截取方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • SpringBoot中对SpringMVC的自动配置详解

    SpringBoot中对SpringMVC的自动配置详解

    这篇文章主要介绍了SpringBoot中的SpringMVC自动配置详解,Spring MVC自动配置是Spring Boot提供的一种特性,它可以自动配置Spring MVC的相关组件,简化了开发人员的配置工作,需要的朋友可以参考下
    2023-10-10
  • Java使用递归复制文件夹及文件夹

    Java使用递归复制文件夹及文件夹

    这篇文章主要介绍了Java使用递归复制文件夹及文件夹,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Spring Boot多模块化后,服务间调用的坑及解决

    Spring Boot多模块化后,服务间调用的坑及解决

    这篇文章主要介绍了Spring Boot多模块化后,服务间调用的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Android Studio中ButterKnife插件的安装与使用详解

    Android Studio中ButterKnife插件的安装与使用详解

    本篇文章主要介绍了Android Studio中ButterKnife插件的安装与使用详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 浅谈Java中Lock和Synchronized的区别

    浅谈Java中Lock和Synchronized的区别

    这篇文章主要介绍了Java中Lock和Synchronized的区别,Lock和Synchronized都是java中去用来解决线程安全问题的一个工具,但是具体有什么区别呢?下面我们一起进入文章了解具体详细内容吧,需要的朋友可以参考一下
    2022-04-04
  • js判断是否是移动设备登陆网页的简单方法

    js判断是否是移动设备登陆网页的简单方法

    这篇文章主要介绍了js判断是否是移动设备登陆网页的简单方法,需要的朋友可以参考下
    2014-02-02
  • Java实现API sign签名校验的方法详解

    Java实现API sign签名校验的方法详解

    为了防止中间人攻击,有时我们需要进行API sign 签名校验。本文将用Java语言实现API sign 签名校验,感兴趣的小伙伴可以尝试一下
    2022-07-07
  • 多线程(多窗口卖票实例讲解)

    多线程(多窗口卖票实例讲解)

    下面小编就为大家带来一篇多线程(多窗口卖票实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java编程synchronized与lock的区别【推荐】

    Java编程synchronized与lock的区别【推荐】

    互联网信息泛滥环境下少有的良心之作!如果您想对Java编程synchronized与lock的区别有所了解,这篇文章绝对值得!分享给大家,供需要的朋友参考。不说了,我先学习去了。
    2017-10-10

最新评论