Spark SQL调优实战

这篇具有很好参考价值的文章主要介绍了Spark SQL调优实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、新添参数说明

// Driver和Executor内存和CPU资源相关配置

--是否开启executor动态分配开启时spark.executor.instances不生效

spark.dynamicAllocation.enabled=false

--配置Driver内存

spark.dirver.memory=5g

--driver最大结果大小,设置为0代表不限制,driver在拉取结果时,如果结果超过阈值会报异常

spark.driver.maxResultSize=0

--配置executor内存和cpu

spark.executor.memory=5g

spark.executor.cores=8

--executor额外内存,executor内存包括三个部分,heap、off-heap以及overhead,heap和off-heap用于存储executor上任务的执行结果块以及用作执行内存,overhead作为额外内存用于存储虚拟机的开销

spark.yarn.executor.memoryOverhead=6120

--配置executor实例个数,此种方式是固定资源分配方式

spark.executor.instances=25

--是否开启executor堆外内存,以及堆外内存的的大小

spark.memory.offHeap.enabled=true

spark.memory.offHeap.size=2048mb

--spark内存既可以用于存储也可以用于计算,计算内存和存储内存是软边界,这个参数用于设置存储内存的比例

spark.memory.fraction=0.4

// 序列化器相关配置,spark默认采用java序列化器,也提供kryoserializer的实现后者的性能是前者的十倍

spark.kryoserializer.buffer.max=2047mb

spark.kryoserializer.buffer=16384kb

//中间结果网络传输压缩,缓解内存和网络传输压力

spark.shuffle.compress=true

spark.rdd.compress=true

//开启spark任务推断,优化分区任务执行时间不均衡问题,避免严重拖后腿任务

spark.speculation=true

spark.speculation.interval=60s

spark.speculation.multiplier=1.3

spark.speculation.quantile=0.99

//网络通信超时和失败重试相关参数,避免网络质量差或不稳定导致的任务失败

spark.network.timeout=300

spark.shuffle.io.maxRetries=30

spark.shuffle.io.retryWait=10s

//spark对分区结果的大小做了2G的限制,超出了就会报too large dataframe异常,这时需要增加shuffle分区,缓解数据倾斜,但是如果数据本身是倾斜了,下面参数治标不治本,默认300

spark.sql.shuffle.partitions=500

//设置自动广播阈值,在大表join小表时可以将小表作为广播变量,存在内存中,提升join的性能

spark.sql.autoBroadcastJoinThreshold=-1

  1. 参数影响
  • 什么时候需要将spark.dynamicAllocation.enable设置为false?

回答:spark默认按照128m来对文件进行分区如果文件比较大比如40G分区多达300多个采用动态分配策略可能导致占用太多的集群资源使得集群崩溃,如下对比图。sparksql driver 和executor设置,spark,sql,大数据

1: 采用动态分配策略executor实例数高达115(116另Driver)sparksql driver 和executor设置,spark,sql,大数据

2:采用静态分配策略executor实例数固定为25

  • spark.memory.offHeap.enabled和spark.memory.offHeap.size的影响

回答在运行百万级别job_trsf_dim_chl_cust_spark_df任务时使用默认配置参数报直接内存不足异常导致作业运行失败如下图

sparksql driver 和executor设置,spark,sql,大数据

3: 堆外内存不足导致任务运行失败

添加以上参数后作业运行成功

  • spark.kryoserializer.buffer大小的调整

回答当使用kryoserializer序列化器时遇到Buffer大小不足提示require ** but available等信息需要调大上述参数

第四、调大spark.sql.shuffle.partitions的目的?sparksql driver 和executor设置,spark,sql,大数据

4: 分区结果超过2G错误

回答当出现如上图所示错误很大程度是因为数据发生了倾斜这时可以调整shuffle的分区均衡分区中的数据但如果数据本身是倾斜只能自定义分区规则重写Spark Partitioner或进行SQL调优

  • 为什么要避免对大表进行select * 操作

回答因为Spark是以Client方式向Yarn提交作业查询的结果会返回给Driver端对一个40G的表进行全量查询会导致Driver端崩溃导致如下图所示的错误

sparksql driver 和executor设置,spark,sql,大数据

5: Jave堆内存文章来源地址https://www.toymoban.com/news/detail-834343.html

到了这里,关于Spark SQL调优实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 13.108.Spark 优化、Spark优化与hive的区别、SparkSQL启动参数调优、四川任务优化实践:执行效率提升50%以上

    13.108.Spark 优化 1.1.25.Spark优化与hive的区别 1.1.26.SparkSQL启动参数调优 1.1.27.四川任务优化实践:执行效率提升50%以上 1.1.25.Spark优化与hive的区别 先理解spark与mapreduce的本质区别,算子之间(map和reduce之间多了依赖关系判断,即宽依赖和窄依赖。) 优化的思路和hive基本一致,比较

    2024年02月10日
    浏览(56)
  • Spark内存资源分配——spark.executor.memory等参数的设置方法

    基于论坛上一些关于spark内存设置的文章,我对一个项目中实际运行的任务进行了内存参数分析和优化。如果要了解更多详细设置原理,可见文末的参考文章链接。 已知内存分配存在通过用户提交的参数设置进行静态分配,和yarn进行动态分配两种,所以本文对两种状况都根据

    2023年04月13日
    浏览(113)
  • 【SparkSQL】SparkSQL的运行流程 & Spark On Hive & 分布式SQL执行引擎

    【大家好,我是爱干饭的猿,本文重点介绍、SparkSQL的运行流程、 SparkSQL的自动优化、Catalyst优化器、SparkSQL的执行流程、Spark On Hive原理配置、分布式SQL执行引擎概念、代码JDBC连接。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇

    2024年02月04日
    浏览(48)
  • Spark参数配置和调优,Spark-SQL、Config

    一、Hive-SQL / Spark-SQL参数配置和调优 二、shell脚本spark-submit参数配置 三、sparkSession中配置参数

    2024年02月13日
    浏览(47)
  • spark sql 的join调优

    spark sql中join操作是最耗费性能的操作,因为这涉及到数据的shuffle操作,如果由此导致数据倾斜更是会雪上加霜,那么如何优化join操作的性能呢? 方式一 broadcast广播: 如果是大表和小表的join操作,最简单的解决方式就是对小表进行broadcast操作,把小表的数据广播到各个ex

    2024年02月21日
    浏览(46)
  • spark SQL 任务参数调优1

    要了解spark参数调优,首先需要清楚一部分背景资料Spark SQL的执行原理,方便理解各种参数对任务的具体影响。 一条SQL语句生成执行引擎可识别的程序,解析(Parser)、优化(Optimizer)、执行(Execution) 三大过程。其中Spark SQL 解析和优化如下图 Parser模块:未解析的逻辑计划

    2024年02月07日
    浏览(40)
  • Spark:性能调优实战

    链接: 文字文档 极客链接 一、资源申请并行度 一个Executor中同时可以执行的task数目(在Executor内存不变的情况下,executor-cores数越大,平均下来一个task可以使用的内存就越少) Executor Java进程的堆内存大小,即Executor Java进程的Xmx值 Executor Java进程的off-heap内存,包括JVM over

    2024年04月16日
    浏览(45)
  • Spark Executor端日志打印的方法

    大数据平台采用yarn client模式提交spark 任务,并且多个离线Spark作业共用一个Driver,好处便在于——节省提交任务的时间。但同时也加大了运维工作的难度,因为任务日志打印到同一个文件中。 为了区分开各个业务流程的日志,平台引入了log4j2 RoutingAppender,配置如下所示:

    2023年04月22日
    浏览(36)
  • Spark---SparkSQL介绍

    Shark是基于Spark计算框架之上且兼容Hive语法的SQL执行引擎,由于底层的计算采用了Spark,性能比MapReduce的Hive普遍快2倍以上,当数据全部load在内存的话,将快10倍以上,因此Shark可以作为交互式查询应用服务来使用。除了基于Spark的特性外,Shark是完全兼容Hive的语法,表结构以及

    2024年01月21日
    浏览(45)
  • 【spark】SparkSQL

    什么是SparkSQL SparkSQL是Spark的一个模块,用于处理海量 结构化数据 为什么学习SparkSQL SparkSQL是非常成熟的海量结构化数据处理框架: 学习SparkSQL主要在2个点: SparkSQL本身十分优秀,支持SQL语言、性能强、可以自动优化、API简单、兼容HIVE等等 企业大面积在使用SparkSQL处理业务数

    2024年01月20日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包