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.shuffle.service.enabled、spark.dynamicAllocation.enabled
    以上两个参数同时设置为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.sql.adaptive.enabled(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.ataptive.skewedJoin.enabled(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 大小中位数与该因子的乘积,或者行数大于 spark.sql.adaptive.skewedPartitionRowCountThreshold 的同时大于各 Partition 行数中位数与该因子的乘积,则它会被视为倾斜的 Partition。默认为10。
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值