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:目前不建议调整
相关推荐
奥顺互联V1 小时前
深入理解 ThinkPHP:框架结构与核心概念详解
大数据·mysql·开源·php
郭源潮3452 小时前
Hadoop
大数据·hadoop·分布式
中科岩创2 小时前
中科岩创桥梁自动化监测解决方案
大数据·网络·物联网
百家方案3 小时前
「下载」智慧产业园区-数字孪生建设解决方案:重构产业全景图,打造虚实结合的园区数字化底座
大数据·人工智能·智慧园区·数智化园区
forestsea3 小时前
【Elasticsearch】分片与副本机制:优化数据存储与查询性能
大数据·elasticsearch·搜索引擎
开着拖拉机回家3 小时前
【Ambari】使用 Knox 进行 LDAP 身份认证
大数据·hadoop·gateway·ambari·ldap·knox
地球资源数据云3 小时前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
INFINI Labs3 小时前
Elasticsearch filter context 的使用原理
大数据·elasticsearch·jenkins·filter·querycache
Ahern_4 小时前
Oracle 普通表至分区表的分区交换
大数据·数据库·sql·oracle
李昊哲小课4 小时前
deepin 安装 kafka
大数据·分布式·zookeeper·数据分析·kafka