一、任务调参

1.1 spark.executor.memory

executor执行分配的内存大小

1.2 spark.executor.cores

executor执行分配的核数

1.3 spark.executor.instances

需要的executor个数,等同num-executors,可以使用 spark.dynamicAllocation.enabled=true开启动态资源分配

spark.dynamicAllocation.enabled=true
spark.shuffle.service.enabled=true
spark.dynamicAllocation.minExecutors=1
spark.dynamicAllocation.maxExecutors=30
 

1.4 spark.executor.memoryOverhead="1024m'

这个参数表示每个executor配备的可使用的堆外内存大小。在调spark应用程序时可能经常会碰到OOM,然后错误日志中提示让提高这个参数指定的值的情况。这种情况其实多发生在有数据倾斜的情况,这个调整经常是治标不治本,解决倾斜是根本。默认情况是配置的executor内存容量的10%

1.5 spark.executor.extraJavaOptions

Jvm参数值,我们有时候发现我们的job突然跑的很慢,一方面可以去看看Yarn上的资源分配情况,另一方面也可以没看看是不是有大量的时间用来做GC导致的。

例:最大的堆外内存:spark.executor.extraJavaOptions="-XX:MaxDirectMemorySize=1G"

1.6 spark.dynamicAllocation.enabled

可以避免使用spark.executor.instances或num-executors,使用动态资源分配,动态分配可以使的 Spark 的应用在有后续积压的在等待的 task 时请求 executor,并且在空闲时释放这些 executor

1.7 推测执行

推测任务是指对于一个Stage里面拖后腿的Task,会在其他节点的Executor上再次启动这个task,如果其中一个Task实例运行成功则将这个最先完成的Task的计算结果作为最终结果,同时会干掉其他Executor上运行的实例。spark推测式执行默认是关闭的,可通过spark.speculation属性来开启

--conf spark.speculation=true
--conf spark.speculation.interval=100
--conf spark.speculation.quantile=0.9
--conf spark.speculation.multiplier=1.5
(1)当spark.speculation设置为true时,就会对task开启推测执行,也就是在一个stage下跑的慢的tasks有机会重新启动;
(2)spark.speculation.interval,100ms,Spark检测tasks推测机制的间隔时间;
(3)spark.speculation.quantile,0.9,当一个stage下多少百分比的tasks运行完毕后才开启推测执行机制,0.9即90%的任务都运行完毕后开启推测执行;
(4)spark.speculation.multiplier,1.5,一个task的运行时间是所有task的运行时间中位数的几倍时,才会被认为该task需要重新启动。

1.8 配置metastore

配置[hive/in-memory]作为metastore,默认in-memory

在写非SQL代码时,SparkSession初始化时默认是用in-memory,不会加载hive-site.xml,如果需要访问元数据,需要在初始化时添加enableHiveSupport,设置metastore为hive

spark.sql.catalogImplementation="hive"

1.9 提升Shuffle计算性能

spark.shuffle.service.enabled=true

NodeManager中一个长期运行的辅助服务,用于提升Shuffle计算性能。默认为false,表示不启用该功能。

spark.shuffle.service.port      7337

Shuffle服务监听数据获取请求的端口。可选配置,默认值为“7337”

1.10 动态分区

hive.exec.dynamic.partition="true"
hive.exec.dynamic.partition.mode="nonstrict"

1.11 设置类型隐式转换

Hive 默认支持隐式转换,Spark需要设置以下参数来有限度支持隐式转换

spark.sql.storeAssignmentPolicy=LEGACY

1.12 小文件合并问题

Spark SQL在写入数据的时候是并行写入,并没有一个合并的过程。小文件过多,会增大Namenode的压力,同时对查询性能也有很大影响。通常在Hive中可以引入 hive.spark.mergefiles=true 来为hive的执行计划增加一个合并Job,但Spark SQL不支持这个做法。

spark.sql.adaptive.enabled=true;    --动态调整Shuffle Partition

spark.sql.adaptive.advisoryPartitionSizeInBytes=262144000;  --合并连续的随机播放分区,以避免执行过多的小任务。

spark.sql.adaptive.maxNumPostShufflePartitions=200;    --reduce个数区间最大值,同时也是shuffle分区数的初始值

spark.sql.adaptive.forceApply=true;            --强制开启AQE

spark.sql.adaptive.coalescePartitions.parallelismFirst=false;  --不适用默认并行度设置

spark.sql.adaptive.coalescePartitions.minPartitionSize =52428800;  --动态合并

Spark Sql调优的更多相关文章

  1. Spark性能调优之合理设置并行度

    Spark性能调优之合理设置并行度 1.Spark的并行度指的是什么?     spark作业中,各个stage的task的数量,也就代表了spark作业在各个阶段stage的并行度!     当分配 ...

  2. Spark性能调优之解决数据倾斜

    Spark性能调优之解决数据倾斜 数据倾斜七种解决方案 shuffle的过程最容易引起数据倾斜 1.使用Hive ETL预处理数据    • 方案适用场景:如果导致数据倾斜的是Hive表.如果该Hiv ...

  3. 数据倾斜是多么痛?spark作业调优秘籍

    目录视图 摘要视图 订阅 [观点]物联网与大数据将助推工业应用的崛起,你认同么?      CSDN日报20170703——<从高考到程序员——我一直在寻找答案>      [直播]探究L ...

  4. SQL调优常用方法

    在使用DBMS时经常对系统的性能有非常高的要求:不能占用过多的系统内存和 CPU资源.要尽可能快的完成的数据库操作.要有尽可能高的系统吞吐量.如果系统开发出来不能满足要求的所有性能指标,则必须对系统进 ...

  5. SQL调优

    # 问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  6. 读《程序员的SQL金典》[4]--SQL调优

    一.SQL注入 如果程序中采用sql拼接的方式书写代码,那么很可能存在SQL注入漏洞.避免的方式有两种: 1. 对于用户输入过滤敏感字母: 2. 参数化SQL(推荐). 二.索引 ①索引分类 聚簇索引 ...

  7. [SQL SERVER系列]读书笔记之SQL注入漏洞和SQL调优

    最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这个表达式永远返回 true, ...

  8. SQL调优日志--内存问题

    SQL调优日志--内存问题排查入门篇   概述 很多系统的性能问题,是由内存导致的.内存不够会导致页面频繁换入换出,IO队列高,进而影响数据库整体性能. 排查 内存对数据库性能非常重要.那么我当出现问 ...

  9. 读书笔记之SQL注入漏洞和SQL调优

    原文:读书笔记之SQL注入漏洞和SQL调优 最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“' ...

  10. Oracle SQL 调优健康检查脚本

    Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性 ...

随机推荐

  1. 基于python的文件监控watchdog

    实时监控第三方库watchdog,其原理通过操作系统的时间触发的,不需要循环和等待 使用场景: 1.监控文件系统中文件或目录的增删改情况 2.当特定的文件被创建,删除,修改,移动时执行相应的任务 1. ...

  2. 理解Flink之三Transformation

    Transformation 是 Flink操作的底层实现,无论是map还是Flatmap. DataStream类中包含两个变量: StreamExecutionEnvironment Transf ...

  3. nvm安装node.js无法使用

    前情 最近在使用某此第三方模块需要依赖不同的node版本,于是想通nvm来管理node版本 坑 网上下载nvm-window的安装包,一步步傻瓜式安装下去,发现nrm无法使用,设置环境变量也没有用,再 ...

  4. IOS获取蓝牙状态

    IOS获取蓝牙状态 监听蓝牙状态 在Link Binaries With Libraries中添加CoreBluetooto.framework 创建CBCentralManager对象 为了避免每次 ...

  5. 中电金信多模态鉴伪技术抵御AI造假威胁

    ​ AI换脸技术,属于深度伪造最常见方式之一,是一种利用人工智能生成逼真的虚假人脸图片或视频的技术.基于深度学习算法,可以将一个人的面部特征映射到另一个人的面部,创造出看似真实的伪造内容.近年来,以A ...

  6. Proxmox VE(虚拟机集群)安装配置

    #Proxmox VE 安装配置 创建kvm模板 有私有云需求, 创建与管理Windows和Linux虚拟机的场景,使用PVE(Proxmox VE)管理很方便. 本人使用PVE管理公司开发测试环境几 ...

  7. 为什么推荐在 .NET 中使用 YAML 配置文件

    在现代应用开发中,配置管理是一个非常重要的部分.随着微服务.容器化和云原生架构的流行,使用简单.易读的配置格式变得尤为重要.在 .NET 开发中,虽然 JSON 是默认的配置文件格式,但 YAML(& ...

  8. 【数据结构】【冒泡排序法】Java写冒泡排序法

    public class 冒泡 { public static int[] maopao(int[] arr){ for(int i=0;i<arr.length-1;i++){ for(int ...

  9. 第36次ccf-csp题解(思维)

    比赛链接 https://sim.csp.thusaac.com/contest/36/home   比赛感受 这会刚打完上海icpc,比起区域赛的题,这个简单太多了. 感受还不错,写的很顺手.除了第 ...

  10. Mybatis plus 多表联查字段名重复报错 Column ‘id‘ in where clause is ambiguous

    一.报错信息 Caused by: Column 'xxxx' in where clause is ambiguous 二.报错原因 表 person 和 表 class 都有字段 id 和 nam ...