spark常用参数调优

目录

  • [1.set spark.grouping.sets.reference.hive=true;](#1.set spark.grouping.sets.reference.hive=true;)
  • [2.set spark.locality.wait.rack=0s](#2.set spark.locality.wait.rack=0s)
  • [3.set spark.locality.wait=0s;](#3.set spark.locality.wait=0s;)
  • [4.set spark.executor.memoryOverhead =2G;](#4.set spark.executor.memoryOverhead =2G;)
  • [5.set spark.sql.shuffle.partitions =1000;](#5.set spark.sql.shuffle.partitions =1000;)
  • [6.set spark.shuffle.file.buffer =256k](#6.set spark.shuffle.file.buffer =256k)
  • [7. set spark.reducer.maxSizeInFlight =96M](#7. set spark.reducer.maxSizeInFlight =96M)
  • [8.set spark.sql.files.maxPartitionBytes=3208864](#8.set spark.sql.files.maxPartitionBytes=3208864)

1.set spark.grouping.sets.reference.hive=true;

在Spark中,设置spark.grouping.sets.reference.hive参数为true可以启用Hive引用的分组集功能。这个参数的作用是使Spark使用Hive的引用实现来处理GROUPING SETS语法。GROUPING SETS语法用于在GROUP BY子句中指定多个聚合级别,以便一次性计算多个聚合结果。启用这个参数可以让Spark使用Hive引用实现来执行这些操作,以确保与Hive兼容性。

2.set spark.locality.wait.rack=0s

在Spark中,spark.locality.wait.rack参数用于设置在任务启动之前等待数据本地性(locality)的时间阈值。数据本地性是指任务所需的数据是否已经在任务执行节点的本地存储介质上。在集群中,数据本地性可以分为PROCESS_LOCAL(数据在任务执行节点的内存中)、NODE_LOCAL(数据在任务执行节点的磁盘中)和RACK_LOCAL(数据在任务执行节点的同一机架上)。

通过设置spark.locality.wait.rack参数为0s,表示任务不会等待数据在同一机架上的本地性。这意味着Spark任务将不会等待数据在同一机架上可用,而会立即启动。这可能会提高任务的启动速度,但也可能导致更多的数据远程读取,因此需要根据具体情况进行权衡。

3.set spark.locality.wait=0s;

在Spark中,spark.locality.wait参数用于设置任务启动之前等待数据本地性的时间阈值。数据本地性是指任务所需的数据是否已经在任务执行节点的本地存储介质上。在集群中,数据本地性可以分为PROCESS_LOCAL(数据在任务执行节点的内存中)、NODE_LOCAL(数据在任务执行节点的磁盘中)、RACK_LOCAL(数据在任务执行节点的同一机架上)和ANY(任意位置)。

通过设置spark.locality.wait参数为0s,表示任务不会等待数据在任何本地性级别上可用,而会立即启动。这可能会提高任务的启动速度,但也可能导致更多的数据远程读取,因此需要根据具体情况进行权衡。

4.set spark.executor.memoryOverhead =2G;

在Spark中,spark.executor.memoryOverhead参数用于设置每个Executor的内存使用的额外空间。这个额外的空间用于Executor的内部结构和外部过程,例如任务执行和数据结构缓存。设置这个参数可以确保Executor有足够的内存用于执行任务和管理数据,同时避免内存溢出的情况发生。

5.set spark.sql.shuffle.partitions =1000;

在Spark中,spark.sql.shuffle.partitions参数用于设置在执行shuffle操作(例如group by或者join)时产生的分区数量。通过设置这个参数,可以控制shuffle操作的并行度,从而影响任务的性能和资源利用。

在Reduce阶段,RDD的聚合会触发shuffle操作,聚合后的RDD的partition数目跟具体操作有关,RDD在计算的时候,每个分区都会起一个task,所以rdd的分区数目决定了总的task数目。申请的计算节点(Executor)数目和每个计算节点核数,决定了你同一时刻可以并行执行的task。

比如:RDD有100个分区,那么计算的时候就会生成100个task,设置task间并行的参数是conf spark.sql.shuffle.partitions=100,你的资源配置为10个计算节点,(执行器excutor) --num-executors 10 默认为2一般设置在50-100之间,每个2个核,executor-cores 2 一般 2~4 为宜。同一时刻可以并行的task数目为20,计算这个RDD就需要5个轮次。Task被执行的并发度 = Executor数目 * 每个Executor核数(=core总个数)。

6.set spark.shuffle.file.buffer =256k

在Spark中,spark.shuffle.file.buffer参数用于设置在执行shuffle操作时用于缓冲数据的大小。该参数指定了每个shuffle输出文件的缓冲区大小,以字节为单位。默认为32k;

7. set spark.reducer.maxSizeInFlight =96M

在Spark中,spark.reducer.maxSizeInFlight参数用于设置每个任务从每个map任务获取的最大数据量。这个参数可以帮助控制reduce任务从map任务获取数据的速度,从而避免在网络传输过程中发生内存溢出或网络拥塞等问题。默认48M;

8.set spark.sql.files.maxPartitionBytes=3208864

上述代码将spark.sql.files.maxPartitionBytes参数设置为33554432字节(即32MB)。这意味着在读取文件时,Spark会尝试将文件划分为每个分区大小不超过32MB的部分。根据实际情况,可以根据文件大小和集群资源情况来调整这个参数的值,以获得更好的性能表现。

相关推荐
Lansonli35 分钟前
大数据Spark(六十四):Spark算子介绍
大数据·分布式·spark
梦想养猫开书店3 小时前
38、spark读取hudi报错:java.io.NotSerializableException: org.apache.hadoop.fs.Path
java·spark·apache
IT毕设梦工厂4 小时前
大数据毕业设计选题推荐-基于大数据的全球经济指标数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·数据分析·spark·毕业设计·源码·bigdata
Leo.yuan9 小时前
ODS 是什么?一文搞懂 ODS 与数据仓库区别
大数据·数据仓库·数据挖掘·数据分析·spark
哈哈很哈哈1 天前
Spark核心Shuffle详解(二)ShuffleHandler
大数据·分布式·spark
IvanCodes1 天前
PySpark 安装教程及 WordCount 实战与任务提交
大数据·python·spark·conda
计算机毕设残哥1 天前
紧跟大数据技术趋势:食物口味分析系统Spark SQL+HDFS最新架构实现
大数据·hadoop·python·sql·hdfs·架构·spark
亚林瓜子2 天前
AWS中国云中的ETL之从aurora搬数据到s3(Glue版)
hadoop·spark·云计算·etl·aws
涤生大数据2 天前
从MR迁移到Spark3:数据倾斜与膨胀问题的实战优化
数据库·数据仓库·spark·mapreduce·大数据开发·数据倾斜·spark3
IT毕设梦工厂2 天前
大数据毕业设计选题推荐-基于大数据的全国饮品门店数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·信息可视化·spark·毕业设计·源码·bigdata