Spark参数详解

写博客只是为了学习总结或者工作内容备忘,不保证及时性和准确性,看到的权当个参考哈!

 

--num-executors

设置任务executor个数,默认值为4,一般调整此参数需要同时调整并行度(参考4)。任务设置executor个数的依据是业务期望任务运行时间,可以先设置一个较小值,通过调整此参数及并行度直到任务运行时间达到期望。

--executor-cores

设置单个executor的core数,默认为1,建议不要超过2。任务申请的总core数为executor个数*单个executor的core数,如:申请4个executor,每个executor申请2个core,则此任务申请的总core数为8,故此任务会向YARN申请8个vcore。另外,建议单个executor申请的core数与内存的比例要保持在1:4,如:单个executor申请2个core,那么内存相应需要申请到8g。

--executor-memory

设置executor内存,默认值为4g。每个executor申请的core数与内存比例要保持在1:4,如:单个executor申请2个core,那么内存相应需要申请8g。另外,单个executor内存溢出,请不要简单地调大executor内存,这样会导致任务平均内存利用率较低,如果是数据倾斜导致的内存溢出,请解决数据倾斜;如果是任务并行度设置较小导致的内存溢出,可以通过调大并行度解决(参考4)。

spark.sql.shuffle.partitions

调整stage的并行度,也就是每个stage的task个数,默认值为40。此参数一般设置为任务申请的总core数的2-4倍,如:申请100个executor,每个executor申请2个core,那么总core数为200,此参数设置的合理范围是400-800。注意,此参数不能调整某些读外部数据stage的并行度,如:读hdfs的stage,绝大多数情况它的并行度取决于需要读取的文件数。

spark.shuffle.service.enabledspark.dynamicAllocation.enabled

以上两个参数同时设置为true可开启动态资源分配,开启后可防止资源浪费情况。Spark-2.1.0默认关闭动态资源分配,Spark-2.3.3默认打开。动态资源分配开启后,当executor闲置超过60s将被回收,但executor不会低于spark.dynamicAllocation.minExecutors配置个数。当任务资源不足时,任务会自动向YARN申请资源,但executor不会超过spark.dynamicAllocation.maxExecutors配置个数。

spark.dynamicAllocation.minExecutors

此参数可以调整动态资源分配任务executor的下限,默认为0。

spark.dynamicAllocation.maxExecutors

此参数可以调整动态资源分配任务executor的上限,默认为--num-executors个数。

spark.sql.autoBroadcastJoinThreshold

在Spark关联中,小表数据量小于等于此参数,可将关联转化为BroadcastHashJoin,类似Hive中的mapjoin,此参数默认值是10485760(10M),设置为-1可以禁用BroadcastHashJoin。

spark.sql.broadcastTimeout

用来控制broadcast超时时间,默认值为5min。当广播小表时,如果广播时间超过此参数设置值,会导致任务失败。

spark.sql.join.preferSortMergeJoin

用来控制是否优先使用SortMergeJoin,默认指为true。SortMergeJoin是比较慢的Join实现方式,在shuffle过后,所有relation数据都要sort,然后再关联。此参数设置为false时,spark将优先使用ShuffleHashJoin,ShuffleHashJoin是在shuffle过后,将数据量较小的relation构建为hash表,提高关联速度。

spark.sql.adaptive.enabledspark-2.3.3

用来控制是否开启adaptive execution,默认为false。一直以来,Spark只能设置固定的并行度(参考4),在大促期间,数据量激增,每个task处理的数量增加,很容易出现oom的情况。在开启此项参数后,Spark将会按照spark.sql.ataptive.shuffle.targetPostShuffleInputSize设置的每个task的目标处理数据量自动调整stage并行度,减少task出现oom的情况。

spark.sql.ataptive.shuffle.targetPostShuffleInputSizespark-2.3.3

在开启adaptive execution时,用来控制每个task处理的目标数据量,Spark将会根据此参数值动态调整task个数,默认值为64M。

spark.sql.ataptive.skewedJoin.enabledspark-2.3.3

在开启adaptive execution时,用来控制是否开启自动处理join时的数据倾斜,默认为false。

spark.sql.ataptive.skewedPartitionMaxSplitsspark-2.3.3

在开启adaptive execution时,控制处理一个倾斜 Partition 的 Task 个数上限,默认值为 5。

spark.sql.ataptive.skewedPartitionRowCountThresholdspark-2.3.3

在开启adaptive execution时,设置一个 Partition 被视为倾斜 Partition 的行数下限,也即行数低于该值的 Partition 不会被当作倾斜 Partition 处理。其默认值为 10L * 1000 * 1000 即一千万。

spark.sql.ataptive.skewedPartitionSizeThresholdspark-2.3.3

在开启adaptive execution时,设置一个 Partition 被视为倾斜 Partition 的大小下限,也即大小小于该值的 Partition 不会被视作倾斜 Partition。其默认值为 64 * 1024 * 1024 也即 64MB。

spark.sql.ataptive.skewedPartitionFactorspark-2.3.3

在开启adaptive execution时,设置倾斜因子。如果一个 Partition 的大小大于 spark.sql.adaptive.skewedPartitionSizeThreshold 的同时大于各 Partition 大小中位数与该因子的乘积,或者行数大于 spark.sql.adaptive.skewedPartitionRowCountThreshold 的同时大于各 Partition 行数中位数与该因子的乘积,则它会被视为倾斜的 Partition。默认为10。

spark.sql.adaptive.repartition.enabledSpark-2.3.3起)

在set该参数为true时,自动进行重分区。适用于Spark UI中发现task数较多且IDE日志中长时间出现以下重命名小文件的内容:

--num-executors

设置任务executor个数,默认值为4,一般调整此参数需要同时调整并行度(参考4)。任务设置executor个数的依据是业务期望任务运行时间,可以先设置一个较小值,通过调整此参数及并行度直到任务运行时间达到期望。

--executor-cores

设置单个executor的core数,默认为1,建议不要超过2。任务申请的总core数为executor个数*单个executor的core数,如:申请4个executor,每个executor申请2个core,则此任务申请的总core数为8,故此任务会向YARN申请8个vcore。另外,建议单个executor申请的core数与内存的比例要保持在1:4,如:单个executor申请2个core,那么内存相应需要申请到8g。

--executor-memory

设置executor内存,默认值为4g。每个executor申请的core数与内存比例要保持在1:4,如:单个executor申请2个core,那么内存相应需要申请8g。另外,单个executor内存溢出,请不要简单地调大executor内存,这样会导致任务平均内存利用率较低,如果是数据倾斜导致的内存溢出,请解决数据倾斜;如果是任务并行度设置较小导致的内存溢出,可以通过调大并行度解决(参考4)。

spark.sql.shuffle.partitions

调整stage的并行度,也就是每个stage的task个数,默认值为40。此参数一般设置为任务申请的总core数的2-4倍,如:申请100个executor,每个executor申请2个core,那么总core数为200,此参数设置的合理范围是400-800。注意,此参数不能调整某些读外部数据stage的并行度,如:读hdfs的stage,绝大多数情况它的并行度取决于需要读取的文件数。

spark.shuffle.service.enabledspark.dynamicAllocation.enabled

以上两个参数同时设置为true可开启动态资源分配,开启后可防止资源浪费情况。Spark-2.1.0默认关闭动态资源分配,Spark-2.3.3默认打开。动态资源分配开启后,当executor闲置超过60s将被回收,但executor不会低于spark.dynamicAllocation.minExecutors配置个数。当任务资源不足时,任务会自动向YARN申请资源,但executor不会超过spark.dynamicAllocation.maxExecutors配置个数。

spark.dynamicAllocation.minExecutors

此参数可以调整动态资源分配任务executor的下限,默认为0。

spark.dynamicAllocation.maxExecutors

此参数可以调整动态资源分配任务executor的上限,默认为--num-executors个数。

spark.sql.autoBroadcastJoinThreshold

在Spark关联中,小表数据量小于等于此参数,可将关联转化为BroadcastHashJoin,类似Hive中的mapjoin,此参数默认值是10485760(10M),设置为-1可以禁用BroadcastHashJoin。

spark.sql.broadcastTimeout

用来控制broadcast超时时间,默认值为5min。当广播小表时,如果广播时间超过此参数设置值,会导致任务失败。

spark.sql.join.preferSortMergeJoin

用来控制是否优先使用SortMergeJoin,默认指为true。SortMergeJoin是比较慢的Join实现方式,在shuffle过后,所有relation数据都要sort,然后再关联。此参数设置为false时,spark将优先使用ShuffleHashJoin,ShuffleHashJoin是在shuffle过后,将数据量较小的relation构建为hash表,提高关联速度。

spark.sql.adaptive.enabledspark-2.3.3

用来控制是否开启adaptive execution,默认为false。一直以来,Spark只能设置固定的并行度(参考4),在大促期间,数据量激增,每个task处理的数量增加,很容易出现oom的情况。在开启此项参数后,Spark将会按照spark.sql.ataptive.shuffle.targetPostShuffleInputSize设置的每个task的目标处理数据量自动调整stage并行度,减少task出现oom的情况。

spark.sql.ataptive.shuffle.targetPostShuffleInputSizespark-2.3.3

在开启adaptive execution时,用来控制每个task处理的目标数据量,Spark将会根据此参数值动态调整task个数,默认值为64M。

spark.sql.ataptive.skewedJoin.enabledspark-2.3.3

在开启adaptive execution时,用来控制是否开启自动处理join时的数据倾斜,默认为false。

spark.sql.ataptive.skewedPartitionMaxSplitsspark-2.3.3

在开启adaptive execution时,控制处理一个倾斜 Partition 的 Task 个数上限,默认值为 5。

spark.sql.ataptive.skewedPartitionRowCountThresholdspark-2.3.3

在开启adaptive execution时,设置一个 Partition 被视为倾斜 Partition 的行数下限,也即行数低于该值的 Partition 不会被当作倾斜 Partition 处理。其默认值为 10L * 1000 * 1000 即一千万。

spark.sql.ataptive.skewedPartitionSizeThresholdspark-2.3.3

在开启adaptive execution时,设置一个 Partition 被视为倾斜 Partition 的大小下限,也即大小小于该值的 Partition 不会被视作倾斜 Partition。其默认值为 64 * 1024 * 1024 也即 64MB。

spark.sql.ataptive.skewedPartitionFactorspark-2.3.3

在开启adaptive execution时,设置倾斜因子。如果一个 Partition 的大小大于 spark.sql.adaptive.skewedPartitionSizeThreshold 的同时大于各 Partition 大小中位数与该因子的乘积,或者行数大于 spark.sql.adaptive.skewedPartitionRowCountThreshold 的同时大于各 Partition 行数中位数与该因子的乘积,则它会被视为倾斜的 Partition。默认为10。

spark.sql.adaptive.repartition.enabledSpark-2.3.3起)

在set该参数为true时,自动进行重分区。适用于Spark UI中发现task数较多且IDE日志中长时间出现以下重命名小文件的内容:

 

 

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值