sparksql参数

Spark参数场景配置

参数类型 参数 参数说明 平台默认值 场景与建议
资源申请 spark.executor.memory Executor Java进程的堆内存大小 即Executor Java进程的Xmx值 2g 默认设置,或者同时等比例增大,最高不超过默认值的3倍,超过的单独拿出来看下 (注意作业是否数据倾斜) 可根据单个文件大小进行预估 若是orc格式,需乘以2-3倍
资源申请 spark.yarn.executor.memoryOverhead Executor Java进程的off-heap内存,包括JVM overhead,sort,shuffle以及Netty的堆外内存等 1g 保持默认值,建议值1-3g 特殊问题单独拿出来讨论 executor的内存大小限制: spark.executor.memory + spark.yarn.executor.memoryOverhead <= 16G (YARN container最大内存限制)
资源申请 spark.executor.cores Executor中同时可以执行的task数目 共享整个excutor内存,cores越多,平均下来单个task占用的资源就越少 1 建议值1-3 再多需单独拿出来讨论 建议spark.executor.cores * spark.dynamicAllocation.maxExecutors < 5000 (cu, 队列总配额为14000)
资源申请 spark.dynamicAllocation.maxExecutors 开启动态资源分配后,同一时刻,最多可申请的executor个数 1000 流量以及数据量在30亿以上的作业 可提高至2000个(不建议再提高) 其他情况保持默认 当在Spark UI中观察到task较多时,可适当调大此参数,缩短作业执行时间。 一般保持shuffle.partitions / (maxExecutors*executor.cores)=2
资源申请 spark.dynamicAllocation.minExecutors executor的最小个数。平台默认设置为3,即在任何时刻,作业都会保持至少有3个及以上的executor存活 3 保持默认即可
资源申请 spark.memory.fraction 存储+执行内存占节点总内存的大小,社区版是0.6。平台为了方便的把hive任务迁移到spark任务,把该区域的内存比例调小至0.3 0.3 没有udf或者udf不会消耗太多内存的任务可以调整到0.5甚至社区版默认的0.6,减少spill的次数,提升性能。HBO参数修改方案v2
资源申请 spark.driver.memory driver使用内存大小 10G 1. 一般不需要更改此设置。 2. 确实需要有大表广播的,可以考虑增加这个数值
资源申请 spark.yarn.driver.memoryOverhead driver进程的off-heap内存 spark.driver.memory * 0.1,并且不小于384m 1. 保持默认值即可
资源申请 spark.sql.autoBroadcastJoinThreshold 当执行join时,小表被广播的阈值 当被设置为-1,则禁用广播 该参数设置的过大会对driver和executor都产生压力。 26214400 (25M) 1. 由于我们的表大部分为ORC压缩格式,解压后的数据量达到3-5倍甚至10倍 所以调大该参数需要注意 2. 建议值广播不超过128m
文件合并 spark.hadoop.hive.exec.orc.split.strategy 参数控制在读取ORC表时生成split的策略: BI策略以文件为粒度进行split划分; ETL策略会将文件进行切分,多个stripe组成一个split; HYBRID策略当文件的平均大小大于hadoop最大split值(默认256M)时使用ETL策略,否则使用BI策略 BI模式 1. 由于读orc文件时默认按文件划分task(BI模式), 有数据倾斜的表(这里的数据倾斜指大量stripe存储于少数文件中)的情况并发可能不够, 影响执行效率. 可以改成ETL模式 2. 对于一些较大的ORC表,可能其footer较大,ETL策略可能会导致其从hdfs拉取大量的数据来切分split,甚至会导致driver端OOM,因此这类表的读取建议使用BI策略。 3. 流量数据建议采用默认策略,因其存在大量文件和大量小文件 其他情况若发现有处理倾斜,请查看文件大小是否均匀
文件合并 spark.hadoop.mapreduce.input.fileinputformat.split.minsize 计算Split划分时的minSize 保持默认
文件合并 spark.hadoop.mapreduce.input.fileinputformat.split.maxsize 控制在ORC切分时stripe的合并处理。具体逻辑是,当几个stripe的大小小于spark.hadoop.mapreduce.input.fileinputformat.split.maxsize时,会合并到一个task中处理。可以适当调小该值,如set spark.hadoop.mapreduce.input.fileinputformat.split.maxsize=134217728。以此增大读ORC表的并发 建议值不超过128m
文件合并 spark.hadoopRDD.targetBytesInPartition 读取输入文件时&最终合并小文件时,每个task读取的数据量 33554432 (32M) 1:非grouping set情况 建议67108864, 如果发现读取文件的task较多,可以适当增大该值到128m。 2:grouping set 情况 建议调下该值 降低该值 详见case ----详见作业最后一个阶段遇到shuffle慢节点
文件合并 spark.sql.adaptive.shuffle.targetPostShuffleInputSize 开启spark.sql.adaptive.enabled后,最后一个stage在进行动态合并partition时,会根据shuffle read的数据量除以该参数设置的值来计算合并后的partition数量。所以增大该参数值会减少partition数量,反之会增加partition数量 67108864 (64M) 256m, 可以适当增大或减小
文件合并 spark.sql.mergeSmallFileSize 写入hdfs后小文件合并的阈值。如果生成的文件平均大小低于该参数配置,则额外启动一轮stage进行小文件的合并。 当任务中添加task:Listing leaf files and directorioes for 55 paths 128000000 1. 建议40m,如果最终文件数仍然较多,可适当调大.。 2. 如果输入数据量量大,但是最终结果数据量较少时,可以在最后加一个同时结合distribute by操作。如果最终结果数据量本来就较大,没必要加distribute by。 3. 效率上面建议使用此参数 数据量大时不建议使用distribute by
shuffle相关 spark.sql.shuffle.partitions reduce阶段(shuffle read)的数据分区,分区数越多,启动的task越多,同时生成的文件数也会越多。 2000 1. 建议一个partition保持在256mb左右的大小就好。当作业数据较多时,适当调大该值,当作业数据较少时,适当调小以节省资源 2. spark.sql.shuffle.partitions设置过大可能会导致很多reducer同时向一个mapper拉取数据。该mapper由于请求压力过大挂掉或响应缓慢,从而导致fetch failed
shuffle相关 spark.sql.adaptive.shuffle.targetPostShuffleInputSize 最后一个stage在进行动态合并partition时,会根据shuffle read的数据量除以该参数设置的值来计算合并后的partition数量。所以增大该参数值会减少partition数量,反之会增加partition数量。 67108864 (64M) 1. 建议128m, 可以适当增大或减小
shuffle相关 spark.sql.statistics.fallBackToHdfs 当表的文件大小元数据信息不可能用时回退到hdfs计算表的文件大小,从而决定是否使用map join. 分区表如果读入数据较少也不会优化为BroadcastJoin, 可以通过添加该参数优化: false 1:建议保持默认 2:如果mapjoin的值不生效 建议设置为true
推测执行 spark.speculation spark推测执行的开关,作用同hive的推测执行 true 1. 保持默认值即可
推测执行 spark.speculation.interval 开启推测执行后,每隔多久通过checkSpeculatableTasks方法检测是否有需要推测式执行的tasks 1000ms 1. 保持默认值即可
推测执行 spark.speculation.quantile 当成功的Task数超过总Task数的spark.speculation.quantile时(社区版默认75%,公司默认99%),再统计所有成功的Tasks的运行时间,得到一个中位数,用这个中位数乘以spark.speculation.multiplier(社区版默认1.5,公司默认3)得到运行时间门限,如果在运行的Tasks的运行时间超过这个门限,则对它启用推测。 0.99 1: 如果资源充足,可以适当减小 spark.speculation.quantile和spark.speculation.multiplier的值 2:目前不建议调整
相关推荐
陕西企来客6 分钟前
2026年7月AI搜索引擎优化案例深度解析
大数据·人工智能
LitchiCheng18 分钟前
DGX Spark部署ComfyUI(一键安装脚本)
大数据·分布式·spark
枕星而眠1 小时前
Git仓库基础用法
大数据·git·后端·elasticsearch·全文检索
智圣新创011 小时前
从10大数据集合规上报到数字驾驶舱落地 智圣新创职教中台对接解决方案的行业全域参考
大数据
数字新视界2 小时前
档案库房环境安全监控解决方案
大数据·运维·数据库·物联网·环境监控系统
thubier(段新建)9 小时前
owtb 3pl 面向城市配送物流企业需求V0.2
大数据·人工智能
jinggongszh11 小时前
智能硬件对接与系统落地:开发岗在制造现场的经验沉淀
大数据·人工智能
ZeekerLin11 小时前
AI 原生团队协作机制:角色、分工与工程文化变化
大数据·人工智能
ACP广源盛1392462567313 小时前
IX8024 PCIe4.0 交换芯片@ACP# RK3588:嵌入式 AI PC 标准化扩展方案
大数据·人工智能·分布式·单片机·嵌入式硬件