SparkSQL参数配置指南
1. --num-executors
设置任务executor个数,默认值为4,⼀般调整此参数需要同时调整并⾏度(参考4)。任务设置executor个数的依据是业务期望任务运⾏时间,可以先设置⼀个较⼩值,通过调整此参数及并⾏度直到运⾏时间达到期望。
2. --executor-cores
设置单个executor的core数,默认为1,建议不要超过2。任务申请的总core数为executor个数*单个executor的core数,如:申请4个executor,每个executor申请2个core,则此任务申请的总core数为8。另外,建议单个executor申请的core数与内存的⽐例要保持在1:4,如:单个executor申请2个core,那么内存相应需要申请到8g。
3. --executor-memory
设置executor内存,默认值为4g。每个executor申请的core数与内存⽐例要保持在1:4,如:单个executor申请2个core,那么内存相应需要申请8g。另外,单个executor内存溢出,请不要简单地调⼤executor内存,这样会导致任务平均内存利⽤率较低,如果是数据倾斜导致的内存溢出,请解决数据倾
斜;如果是任务并⾏度设置较⼩导致的内存溢出,可以通过调⼤并⾏度解决(参考4)。4. spark.sql.shuffle.partitions
调整stage的并⾏度,也就是每个stage的task个数,默认值为40。此参数⼀般设置为任务申请的总core数的2-4倍,如:申请100个executor,每个executor申请2个core,那么总core数为200,此参数设置的合理范围是400-800。注意,此参数不能调整某些读外部数据stage的并⾏度,如:读hdfs的stage,绝⼤多数情况它的并⾏度取决于需要读取的⽂件。
5. spark.abled、abled
以上两个参数同时设置为true可开启动态资源分配,开启后可防⽌资源浪费情况。Spark-2.1.0默认关闭动态资源分配,Spark-2.3.3默认打开。动态资源分配开启后,当executor闲置超过60s将被回收,但executor不会低于
spark.dynamicAllocation.minExecutors配置个数。当任务资源不⾜时,任务会⾃动向YARN申请资源,但executor不会超过spark.dynamicAllocation.maxExecutors配置个数。
6. spark.dynamicAllocation.minExecutors
此参数可以调整动态资源分配任务executor的下限,默认为0。
7. spark.dynamicAllocation.maxExecutors
此参数可以调整动态资源分配任务executor的上限,默认为--num-executors个数。
8. spark.sql.autoBroadcastJoinThreshold
在Spark关联中,⼩表数据量⼩于等于此参数,可将关联转化为BroadcastHashJoin,类似Hive中的mapjoin,此参数默认值是10M,设置为-1可以禁⽤BroadcastHashJoin。
9. spark.sql.broadcastTimeout
⽤来控制broadcast超时时间,默认值为5min。当⼴播⼩表时,如果⼴播时间超过此参数设置值,会导致任务失败。
10. spark.sql.join.preferSortMergeJoin
⽤来控制是否优先使⽤SortMergeJoin,默认指为true。SortMergeJoin是⽐较慢的Join实现⽅式,在shuffle过后,所有relation数据都要sort,然后再关联。此参数设置为false时,spark将优先使⽤ShuffleHashJoin,ShuffleHashJoin是在shuffle过后,将数
据量较⼩的relation构建为hash表,提⾼关联速度。
11. spark.abled(spark-2.3.3)
⽤来控制是否开启adaptive execution,默认为false。⼀直以来,Spark只能设置固定的并⾏度(参考4),在⼤促期间,数据量激增,每个task处理的数量增加,很容易出现oom的情况。在开启此项参数后,spark将会按照
spark.sql.ataptive.shuffle.targetPostShuffleInputSize设置的每个task的⽬标处理数据量⾃动调整并⾏度,降低task出现oom的情况。
12. spark.sql.ataptive.shuffle.targetPostShuffleInputSize(spark-2.3.3)
在开启adaptive execution时,⽤来控制每个task处理的⽬标数据量,Spark将会根据此参数值动态调整task个数,默认值为64M。
13. spark.sql.abled(spark-2.3.3)
在开启adaptive execution时,⽤来控制是否开启⾃动处理join时的数据倾斜,默认为false。
14. spark.sql.ataptive.skewedPartitionMaxSplits(spark-2.3.3)
在开启adaptive execution时,控制处理⼀个倾斜 Partition 的 Task 个数上限,默认值为 5。
15. spark.sql.ataptive.skewedPartitionRowCountThreshold(spark-2.3.3)
在开启adaptive execution时,设置⼀个 Partition 被视为倾斜 Partition 的⾏数下限,也即⾏数低于该值的 Partition 不会被当作倾斜 Partition 处理。其默认值为 10L * 1000 * 1000 即⼀千万。
16. spark.sql.ataptive.skewedPartitionSizeThreshold(spark-2.3.3)
在开启adaptive execution时,设置⼀个 Partition 被视为倾斜 Partition 的⼤⼩下限,也即⼤⼩⼩于该值的 Partition 不会被视作倾斜 Partition。其默认值为 64 * 1024 * 1024 也即 64MB。
17. spark.sql.ataptive.skewedPartitionFactor(spark-2.3.3)
在开启adaptive execution时,设置倾斜因⼦。如果⼀个 Partition 的⼤⼩⼤于
spark.sql.adaptive.skewedPartitionSizeThreshold 的同时⼤于各 Partition ⼤⼩中位数与该因⼦的乘积,或者⾏数⼤于
adaptivespark.sql.adaptive.skewedPartitionRowCountThreshold 的同时⼤于各 Partition ⾏数中位数与该因⼦的乘积,则它会被视为倾斜的 Partition。默认为10。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论