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

作者:CarveStone 时间:2021-11-05 22:32:56 

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()
}
}

来源:https://blog.csdn.net/weixin_44018458/article/details/128818324

标签:Spark,SQL,性能调优
0
投稿

猜你喜欢

  • mybatis中mapper-locations的作用

    2023-11-10 18:02:58
  • java开发线上事故理解RocketMQ异步精髓

    2023-07-25 07:41:20
  • IntelliJ IDEA 2019.1.1 for MAC 下载和注册码激活教程图解

    2023-07-23 08:01:50
  • Java使用递归法解决汉诺塔问题的代码示例

    2023-09-05 20:31:28
  • MyBatis插入Insert、InsertSelective的区别及使用心得

    2023-08-25 04:34:28
  • java并发编程之ThreadLocal详解

    2023-03-15 11:44:33
  • Java properties 和 yml 的区别解析

    2023-04-01 22:28:09
  • javaweb Servlet开发总结(二)

    2023-10-31 11:51:48
  • springboot整合EHCache的实践方案

    2023-08-23 23:48:31
  • Java自动生成趋势比对数据的方法分享

    2023-11-25 18:29:18
  • android: targetSdkVersion升级中Only fullscreen activities can request orientation问题的解决方法

    2023-07-26 13:56:08
  • 详解用Eclipse如何创建Web项目

    2023-11-11 05:41:01
  • Java I/O中I/O流的典型使用方式详解

    2023-07-08 21:07:51
  • 基于spring data jpa @query返回map的踩坑记录

    2023-11-27 22:51:00
  • Java看完秒懂版熔断和降级的关系

    2023-11-06 01:12:13
  • Idea里github的图形化操作配置方法

    2021-12-29 15:03:17
  • java 字浮串提取方法汇集

    2023-11-24 14:43:16
  • Java实现简易扑克牌游戏的完整实例

    2022-10-08 14:09:18
  • 花样使用Handler与源码分析

    2023-07-30 08:36:31
  • 浅谈@PostConstruct不被调用的原因

    2023-03-22 11:40:29
  • asp之家 软件编程 m.aspxhome.com