Spark SQL关于性能调优选项详解
作者:CarveStone 发布时间:2021-11-05 22:32:56
标签:Spark,SQL,性能调优
Spark_SQL性能调优
众所周知,正确的参数配置对提升Spark的使用效率具有极大助力,帮助相关数据开发、分析人员更高效地使用Spark进行离线批处理和SQL报表分析等作业。
性能调优选项
选型 | 默认值 | 用途 |
---|---|---|
spark.sql.codegen | false | 设为 true 时,Spark SQL 会把每条查询词语在运行时编译为 Java 二进制代码。这可以提高大型查询的性能,但在进行小规模查询时会变慢 |
spark.sql.inMemoryColumnarStorage.compressed | false | 自动对内存中的列式存储进行压缩 |
spark.sql.inMemoryColumnarStorage.batchSize | 1000 | 列示缓存时的每个批处理的大小。把这个值调大可能会导致内存不够的异常 |
spark.sql.parquet.compression.codec | snappy | 使用哪种压缩编码器。可选的选项包括 uncompressed/snappy/gzip/lzo |
几种压缩选项的特点
spark.sql.parquet.compressed.codec 默认值为snappy 这个参数代表使用哪种压缩编码器。可选的选项包括uncompressed/snappy/gzip/lzo
uncompressed这个顾名思义就是不用压缩的意思
格式 | 可分割 | 平均压缩速度 | 文本文件压缩效率 | Hadoop压缩编解码器 | 纯java实现 | 原生 | 备注 |
---|---|---|---|---|---|---|---|
snappy | 否 | 非常快 | 低 | org.apache.hadoop.io.compress.SnappyCodec | 否 | 是 | Snapp有纯java的移植版,但是在Spark/Hadoop中不能用 |
gzip | 否 | 快 | 高 | org.apache.hadoop.io.compress.GzipCodec | 是 | 是 | |
lzo | 否 | 非常快 | 中等 | org.apache.hadoop.io.compress.LzoCodec | 是 | 是 | 需要在每个节点上安装LZO |
可选的调优选项
Property Name | Default | Meaning |
---|---|---|
spark.sql.files.maxPartitionBytes | 128 MB | 读取文件时打包到单个分区的最大字节数 |
spark.sql.files.openCostInBytes | 4 MB | 打开一个文件的估计成本,取决于有多少字节可以被同时扫描,当多个文件放入一个 partition 时使用此方法。最好时过度估计,这样带有小文件的 partition 就会比带有大文件的 partition 快 |
spark.sql.broadcastTimeout | 300 | 广播连接中等待时的超时时间(以秒为单位) |
spark.sql.autoBroadcastJoinThreshold | 10 MB | 配置一个表的最大大小,以便在执行连接向所有节点广播,将该值设置为 -1 的话广播将会被禁用 |
spark.sql.shuffle.partitions | 200 | 配置 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
0
投稿
猜你喜欢
- 现在Web开发越来越倾向于前后端分离,前端使用AngularJS,React,Vue等,部署在NodeJS上,后面采用SpringBoot发
- monitor概念管程,监视器。在操作系统中,存在着semaphore和mutex,即信号量和互斥量,使用基本的mutex进行开发时,需要小
- HashMap的keySet()方法比较简单,作用是获取HashMap中的key的集合。虽然这个方法十分简单,似乎没有什么可供分析的,但真正
- 背景前段时间同事碰到一个问题,需要在 SpringCloud 的 Feign 调用中使用自定义的 URL;通常情况下是没有这个需求的;毕竟都
- 近来复习数据结构,自己动手实现了栈。栈是一种限制插入和删除只能在一个位置上的表。最基本的操作是进栈和出栈,因此,又被叫作“先进后出”表。首先
- ImageCacheconst int _kDefaultSize = 1000;const int _kDefaultSizeBytes
- 1、 流的继承关系,以及字节流和字符流。2、 节点流FileOutputStream和FileInputStream和处理流Buffered
- 首先是.select在MP查询中,默认查询所有的字段,如果有需要也可以通过select方法进行指定字段。其中要注意的细节:wrapper.s
- 本文实例为大家分享了Java解码H264格式视频流中的图片,供大家参考,具体内容如下引入依赖<dependency>  
- 一、this 关键字的使用1. 概述this是什么?在Java中,this关键字比较难理解,它的作用和其词义很接近,表示&ldquo
- SpringAOP的介绍:传送门demo介绍主要通过自定义注解,使用SpringAOP的环绕通知拦截请求,判断该方法是否有自定义注解,然后判
- java 弹幕小游戏的最初版本,供大家参考,具体内容如下最近在学习javaSE,根据b站视频老师的讲解,也参考了他的代码,做了一个弹幕小游戏
- 1. 自动化装配介绍Spring Boot针对mvc做了大量封装,简化开发者的使用,内部是如何管理资源配置,Bean配置,环境变量配置以及启
- 一、概述本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函
- 本文为大家分享了java画出五子棋游戏棋盘的方法,供大家参考,具体内容如下棋盘模块:画五子棋棋盘:19条横线、19条竖线步骤一:显示棋盘我有
- Spring Security 过滤器链及自定义Filter别名类名称Namespace Element or AttributeCHANN
- Android Build类的详解及简单实例一、类结构:java.lang.Object? android.os.Build二、类概述:从系
- 1、SpringSecurity 本质是一个过滤器链SpringSecurity 采用的是责任链的设计模式,它有一条很长的过滤器链。现在对这
- 又忙了一周,事情差不多解决了,终于有可以继续写我的博客了(各位看官久等了)。这次我们来谈一谈Java里的一个很有意思的东西——回调。什么叫回
- 目录一、SpringMvc框架简介1、Mvc设计理念2、SpringMvc简介二、SpringMvc执行流程1、流程图解2、步骤描述3、核心