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


猜你喜欢
- SpringBoot v2.2以上重复读取Request Body内容一、需求项目有两个场景会用到从Request的Body中读取内容。打印
- 在Android开发过程中,如果Android系统自带的属性不能满足我们日常开发的需求,那么就需要我们给系统控件添加额外的属性了。假如有个需
- [LeetCode] 131.Palindrome Partitioning 拆分回文串Given a string s, par
- springboot整合tkmapper1.导入pom依赖1.1 导入springboot的parent依赖<parent> &
- 老大让我check out 一个分支,可我在idea 右下角找了半天也没找到最后才发现:因为是刚创建的分支,我得先更新一下项目,连这个都不懂
- 废话不多说了,直接给大家贴代码了。package com.only.android.app;import java.io.File;impo
- 本文实例为大家分享了Android studio实现PopupWindow弹出框的具体代码,供大家参考,具体内容如下实现步骤:第一步:自定义
- 照片墙这种功能现在应该算是挺常见了,在很多应用中你都可以经常看到照片墙的身影。它的设计思路其实也非常简单,用一个GridView控件当作“墙
- 前言说道Android中的Activity,如果你做过iOS开发的话,Activity类似于iOS中的ViewController(视图控制
- @Cacheable在同一类中方法调用无效上述图片中,同一个类中genLiveBullets()方法调用同类中的queryLiveByRoo
- 本文实例为大家分享了java web上传文件和下载文件的具体代码,供大家参考,具体内容如下 /** * Purpose:上传文档
- 本文实例讲述了C#实现DataTable映射成Model的方法。分享给大家供大家参考,具体如下:这是数据库开发中经常遇到的问题,当然,这可以
- CamShift算法全称是“Continuously Adaptive Mean-Shift”(连续的自适应MeanShift算法),是对M
- 如下所示:class B {public B() { super(); System.out.println(&qu
- 前言:Java 中 hashCode() 和 equals() 的关系是面试中的常考点,如果没有深入思考过两者设计的初衷,这个问题将很难回答
- 基于 springboot+vue的测试平台开发一、前端环境搭建在前端框架vue-element-admin这个项目中,有一个简洁轻量型的项
- 本文实例讲述了Java TreeMap排序算法。分享给大家供大家参考,具体如下:TreeMap 和 HashMap 用法大致相同,但实际需求
- 之前用View Pager做了一个图片切换的推荐栏(就类似与淘宝、头条客户端顶端的推荐信息栏),利用View Pager很快就能实现,但是一
- 总结java里面关于获取当前时间的一些方法System.currentTimeMillis()获取标准时间可以通过System.curren
- 编码&解码 通过下图我们可以了解在javaWeb中有哪些地方有转码:用户想服务器发送一个HTTP请求,需要编码的地方有ur