sparksql 增量插入 sparksql参数设置
转载
- --num-executors
- 设置任务executor个数,默认值为4,一般调整此参数需要同时调整并行度(参考4)。任务设置executor个数的依据是业务期望任务运行时间,可以先设置一个较小值,通过调整此参数及并行度直到运行时间达到期望。
- --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。
- --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.enabled、spark.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,此参数默认值是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.enabled(spark-2.3.3)
- 用来控制是否开启adaptive execution,默认为false。一直以来,Spark只能设置固定的并行度(参考4),在大促期间,数据量激增,每个task处理的数量增加,很容易出现oom的情况。在开启此项参数后,spark将会按照spark.sql.ataptive.shuffle.targetPostShuffleInputSize设置的每个task的目标处理数据量自动调整并行度,降低task出现oom的情况。
- spark.sql.ataptive.shuffle.targetPostShuffleInputSize(spark-2.3.3)
- 在开启adaptive execution时,用来控制每个task处理的目标数据量,Spark将会根据此参数值动态调整task个数,默认值为64M。
- spark.sql.ataptive.skewedJoin.enabled(spark-2.3.3)
- 在开启adaptive execution时,用来控制是否开启自动处理join时的数据倾斜,默认为false。
- spark.sql.ataptive.skewedPartitionMaxSplits(spark-2.3.3)
- 在开启adaptive execution时,控制处理一个倾斜 Partition 的 Task 个数上限,默认值为 5。
- spark.sql.ataptive.skewedPartitionRowCountThreshold(spark-2.3.3)
- 在开启adaptive execution时,设置一个 Partition 被视为倾斜 Partition 的行数下限,也即行数低于该值的 Partition 不会被当作倾斜 Partition 处理。其默认值为 10L * 1000 * 1000 即一千万。
- spark.sql.ataptive.skewedPartitionSizeThreshold(spark-2.3.3)
- 在开启adaptive execution时,设置一个 Partition 被视为倾斜 Partition 的大小下限,也即大小小于该值的 Partition 不会被视作倾斜 Partition。其默认值为 64 * 1024 * 1024 也即 64MB。
- spark.sql.ataptive.skewedPartitionFactor(spark-2.3.3)
- 在开启adaptive execution时,设置倾斜因子。如果一个 Partition 的大小大于 spark.sql.adaptive.skewedPartitionSizeThreshold 的同时大于各 Partition 大小中位数与该因子的乘积,或者行数大于 spark.sql.adaptive.skewedPartitionRowCountThreshold 的同时大于各 Partition 行数中位数与该因子的乘积,则它会被视为倾斜的 Partition。默认为10。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。