spark的资源调整参数

2023-09-19 15:50:30

–基础资源

set spark.driver.memory=15g;
set spark.driver.cores=3;
set spark.driver.memoryOverhead=4096;
set spark.executor.memory=5G;
set spark.executor.memoryOverhead=1024;
set spark.executor.cores=2;
set spark.vcore.boost.ratio=2;

–动态executor申请

set spark.dynamicAllocation.minExecutors=10;
set spark.dynamicAllocation.maxExecutors=300;

–ae,shuffle partition并行度

set spark.sql.adaptive.minNumPostShufflePartitions=10;
set spark.sql.adaptive.maxNumPostShufflePartitions=1000;

–268435456;

set spark.sql.adaptive.shuffle.targetPostShuffleInputSize=536870912;

–开启parquet切分

set spark.sql.parquet.adaptiveFileSplit=true;

–初始task调节,合并小文件

set spark.sql.files.maxPartitionBytes=536870912;

中型任务
目前测试:在不手动添加任何参数、平均时长在90min以内、单个shuffle 量在2T以下的任务可以使用该模版,但实际任务情况还需跟踪观察。
spark.executor.memoryOverhead 每个executor的堆外内存大小,堆外内存主要用于数据IO,对于报堆外OOM的任务要适当调大,单位Mb,与之配合要调大executor JVM参数,例如:set spark.executor.memoryOverhead=3072
set spark.executor.extraJavaOptions=-XX:MaxDirectMemorySize=2560m

–基础资源

set spark.driver.memory=25g;
set spark.driver.cores=4;
set spark.driver.memoryOverhead=5120;
set spark.executor.memory=10G;
set spark.executor.memoryOverhead=4096;
set spark.executor.cores=3;
set spark.vcore.boost.ratio=1;

–动态executor申请

set spark.dynamicAllocation.minExecutors=10;
set spark.dynamicAllocation.maxExecutors=600;

–AQE

set spark.sql.adaptive.minNumPostShufflePartitions=10;
set spark.sql.adaptive.maxNumPostShufflePartitions=1000;
set spark.sql.adaptive.shuffle.targetPostShuffleInputSize= 536870912;

–开启parquet切分,初始task调节,合并小文件

set spark.sql.parquet.adaptiveFileSplit=true;
set spark.sql.files.maxPartitionBytes=536870912;

–推测

set spark.speculation.multiplier=2.5;
set spark.speculation.quantile=0.8;

–shuffle 落地hdfs

set spark.shuffle.hdfs.enabled=true;
set spark.shuffle.io.maxRetries=1;
set spark.shuffle.io.retryWait=0s;

大型任务
目前测试:在不手动添加任何参数、平均时长在120min以内、单个shuffle 量在10T以下的任务可以使用该模版,但实际任务情况还需跟踪观察。

–基础资源

set spark.driver.memory=25g;
set spark.driver.cores=4;
set spark.driver.memoryOverhead=5120;
set spark.executor.memory=15G;
set spark.executor.memoryOverhead=3072;
set spark.executor.cores=3;
set spark.vcore.boost.ratio=1;

–动态executor申请

set spark.dynamicAllocation.minExecutors=10;
set spark.dynamicAllocation.maxExecutors=900;

–ae

set spark.sql.adaptive.minNumPostShufflePartitions=10;
set spark.sql.adaptive.maxNumPostShufflePartitions=3000;
set spark.sql.adaptive.shuffle.targetPostShuffleInputSize= 536870912;

–shuffle 落地hdfs

set spark.shuffle.hdfs.enabled=true;
set spark.shuffle.io.maxRetries=1;
set spark.shuffle.io.retryWait=0s;

–开启parquet切分,合并小文件

set spark.sql.parquet.adaptiveFileSplit=true;
set spark.sql.files.maxPartitionBytes=536870912;

–推测

set spark.speculation.multiplier=2.5;
set spark.speculation.quantile=0.9;

超大型任务
目前测试:在不手动添加任何参数、平均时长大于120min、单个shuffle 量在10T以上的任务可以使用该模版,但实际任务情况还需跟踪观察。

–基础资源

set spark.driver.memory=30g;
set spark.driver.cores=4;
set spark.driver.memoryOverhead=5120;
set spark.executor.memory=20G;
set spark.executor.memoryOverhead= 5120;
set spark.executor.cores=5;
set spark.vcore.boost.ratio=1;

–动态executor申请

set spark.dynamicAllocation.minExecutors=10;
set spark.dynamicAllocation.maxExecutors=1500;

–ae

set spark.sql.adaptive.minNumPostShufflePartitions=10;
set spark.sql.adaptive.maxNumPostShufflePartitions=7000;
set spark.sql.adaptive.shuffle.targetPostShuffleInputSize= 536870912;

–开启parquet切分,合并小文件

set spark.sql.parquet.adaptiveFileSplit=true;
set spark.sql.files.maxPartitionBytes=536870912;

– shuffle 落地 hdfs,shuffle文件上传hdfs

set spark.shuffle.hdfs.enabled=true;
set spark.shuffle.io.maxRetries=1;
set spark.shuffle.io.retryWait=0s;

–推测

set spark.speculation.multiplier=2.5;
set spark.speculation.quantile=0.9;

其他常用参数
–ae hash join

set spark.sql.adaptive.hashJoin.enabled=true;
set spark.sql.adaptiveHashJoinThreshold=52428800;

–输出文件合并 byBytes,该功能会生成两个stage,
–第一个stage shuffle的数据量来预估最后生成到hdfs上的文件数据量大小,
–并通过预估的文件数据量大小计算第二个stage的并行度,即最后生成的文件个数。
–该功能只能控制生成的文件大小尽量接近spark.merge.files.byBytes.fileBytes,且有一定的性能损耗,需根据实测情况选择使用。
– 最终文件数量:(totalBytes / fileBytes / compressionRatio).toInt + 1

set spark.merge.files.byBytes.enabled=true;
set spark.merge.files.byBytes.repartitionNumber=100;

–第一个stage的并行读
set spark.merge.files.byBytes.fileBytes=134217728;
– 预期的文件大小
set spark.merge.files.byBytes.compressionRatio=3;
– 压缩比,shuffle文件和最后生成的文件格式和压缩格式都不相同,因此通过该参数调节
–输出文件合并 该功能会在原来job的最后一个stage后面增加1个stage来控制最后生成的文件数量,
–对于动态分区,每个分区生成spark.merge.files.number个文件。

spark.merge.files.enabled=true            
spark.merge.files.number=512

–skew_join 解析绕过tqs

set tqs.analysis.skip.hint=true;

–初始task上限

set spark.sql.files.openCostInBytes=4194304;
set spark.datasource.splits.max=20000;

–broadcast时间

set spark.sql.broadcastTimeout = 3600;

–(防止get json报错)

set spark.sql.mergeGetMapValue.enabled=true;

–ae 倾斜处理 HandlingSkewedJoin OptimizeSkewedJoin

set spark.sql.adaptive.allowBroadcastExchange.enabled=true;
set spark.sql.adaptive.hashJoin.enabled=false;
set spark.sql.adaptive.skewedPartitionFactor=3; 

– 某partition数据量大于中位数的3倍,判定为倾斜

set spark.sql.adaptive.skewedPartitionMaxSplits=20; 

– 限制某一partition最多拆分多少分,spark3已失效

set spark.sql.adaptive.skewedJoin.enabled=true; 

– Normal Join Pattern的优化开关

set spark.sql.adaptive.skewedJoinWithAgg.enabled=true; 

– JoinWithAgg Pattern的优化开关,非开源版

set spark.sql.adaptive.multipleSkewedJoin.enabled=true;

– MultipleJoin Pattern的优化开关,非开源版

set spark.shuffle.highlyCompressedMapStatusThreshold=20000;

– 分区数大于20000时 使用HighlyCompressedMapStatus统计每个partition数据量,会降低数据统计进度

–并发读文件

set spark.sql.concurrentFileScan.enabled=true;

–filter按比例读取文件
set spark.sql.files.tableSizeFactor={table_name}:{filter 比例};

set spark.sql.files.tableSizeFactor=dm_content.tcs_task_dict:10;

–AM failed 时长

set spark.yarn.am.waitTime=200s;

–shuffle service 超时设置

set spark.shuffle.registration.timeout=12000;
set spark.shuffle.registration.maxAttempts=5;

–parquet index 特性生效,in 条件的个数

set spark.sql.parquet.pushdown.inFilterThreshold=30; 

–设置engine

set tqs.query.engine.type=sparkcli;

–hive metastore 超时

spark.hadoop.hive.metastore.client.socket.timeout=600

–manta备用

spark.sql.adaptive.maxNumPostShufflePartitions 5000
spark.executor.memoryOverhead 8000
spark.sql.adaptive.shuffle.targetPostShuffleInputSize 536870912
更多推荐

C#__使用流读取和写入数据的简单用法

使用流处理数据的优势:可以一次性搬运数据量大的文件,把数据当做水,一点一点搬运。数据的传输方向:从外部源传输到程序(读取流);从程序传输到外部源(读入流)外部源:文件、网络数据、内存区域、命名管道读写内存:System.IO.MemorySystem处理网络数据:System.Net.Sockets.NetworkSt

让Pegasus天马座开发板用上OLED屏

继上篇《让Pegasus天马座开发板吃上STM8S标准库》移植完标准库之后,于是我又想为天马座开发板添加一块屏幕。终于在我的零件箱底下找到了沉入箱底多年的0.96OLED屏幕。屏幕介绍这个是128x64像素的屏幕模块,其使用的SSD1306的驱动IC。而目前该模组,只支持3/4线SPI及I2C通信方式。硬件连接我将天马

centos7如何释放磁盘空间?

centos7磁盘满了,但是找不到大的文件,原因是没有释放磁盘空间小白教程,一看就会,一做就成。1.原因当centos系统下启动多个服务且没有一定的清理机制时(比如日志),系统磁盘空间很容易就被占满,但是有时候删除了文件却发现系统磁盘空间未释放,可能原因是忽略了有应用一直在往其中写数据,直接删除某文件无法释放磁盘空间2

Spring SpEL 表达式语言

一、文本表达式文本表达式支持字符串、数字(正数、实数及十六进制数)、布尔类型及null。其中的字符表达式可使用单引号来表示,形如:'Deniro'。如果表达式中包含单引号或者双引号字符,那么可以使用转义字符\。数字支持负数、小数、科学记数法、八进制数和十六进制数。默认情况下,实数使用Double.parseDouble

IO口电路种类

文章目录参考1.高速振荡电路(时钟IO引脚)2.与GPIO功能共享的低速振荡电路(子时钟IO)3.CMOS滞后输入引脚4.电源输入保护电路5.A/D转换器ref+(AVRH)带保护电路的电源输入端6.CMOS电平输出7.CMOS电平输出,带有模拟输入8.CMOS电平输出,带有模拟输入(上面是滞后,这个是自动)9.没有模

编译opencv-3.4.5 [交叉编译]

在unbuntu20.04环境下编译opencv3.4.5,cmake版本:3.27.4gcc版本:11.4.0g++版本:11.4.0在此环境下编译opencv4.5.4正常。1.编译时遇到的问题(1)Builttargetlibprotobufmake:***[Makefile:163:all]错误2make时用s

使用pdfplumber提取pdf中的文字

一、安装pdfplumberpdfplumber是一个Python库,必须通过pip安装才能在Python代码中进行使用。使用以下命令在Python中安装pdfplumber。pipinstallpdfplumber二、用pdfplumber打开PDF文档在Python中使用pdfplumber打开PDF文档的方法非常

如何使用极狐GitLab 支持 ISO 27001 合规

目录组织控制技术控制了解更多本文来源:about.gitlab.com作者:JosephLongo译者:武让极狐GitLab高级解决方案架构师作为一体化平台,通过极狐GitLab可以很容易实现DevSecOps全生命周期管理。极狐GitLab使开发人员能够更快地构建更好的软件应用。但是,它的能力还不仅限于DevSecO

VSCode 配置 Lua 开发环境(清晰明了)

概述由于AutoJS学得已经差不多了,基本都会了,现在开始向其他游戏脚本框架进发,Lua语言很强大,就不多说,按键精灵、触动精灵等等都是用该语言编程脚本的,由于按键精灵、触动精灵和AutoJS类似,不是说一样是因为按键精灵、触动精灵整合大漠插件等牛逼插件,控制3维角色等。我主要学来在GG修改器中修改游戏内存,我的初衷是

springcloude gateway的意义

应用场景1、南北向流量需要流量网关和微服务网关配合使用,将内部的微服务能力,以统一的HTTP接入点对外提供服务。流量网管主要是接入流量进行负载均衡,上游的微服务网关地址和数量变化不大,对服务发现要求不高。微服务网关则把外部请求映射到内部的微服务上,微服务的节点地址和数量会经常变化,路由规则变化基本稳定,微服务网关很方便

php文件上传功能(文件上传)

实现文件上传是Web开发中常用的功能之一,而PHP也是支持文件上传的。那么,下面我们就来介绍一下常用的PHP实现文件上传的方法。使用HTML表单实现文件上传HTML表单是Web开发中最基本的元素之一,它可以接收用户输入的数据,并通过HTTP协议将数据提交到服务器端。在HTML表单中,可以使用元素来实现文件上传的功能。在

热文推荐