Spark动态资源分配

  • cloudera manager默认是开启了spark动态资源分配的,即spark.dynamicAllocation,enable=true
  • cloudera manager默认的动态配置参数似乎不是很合理,比如spark.dynamicAllocation.schedulerBacklogTimeout这个参数的默认值是1秒,即当任务调度延迟超过1秒的时候,会请求增加executor,而且是指数级增加的请求,比如第一次请求1个(下一次检测周期是spark.dynamicAllocation.sustainedSchedulerBacklogTimeout参数来决定,默认是和spark.dynamicAllocation.schedulerBacklogTimeout一样),第二次会请求2个,第三次请求4个executor。
  • spark.dynamicAllocation.minExecutors(默认是0)和spark.dynamicAllocation.maxExecutors(默认是无限大)分别来控制动态资源分配的上下限。即申请最多不会超过maxExecutors,回收executors到minExecutors,可以通过spark.dynamicAllocation.initialExecutors来设置启动的时候初始化多少个executors,不设置的话,默认初始化spark.dynamicAllocation.minExecutors个executors。
  • 当某个executor空闲时间超过spark.dynamicAllocation.executorIdleTimeout值时(默认60秒),会回收该executor占用的资源,销毁executor。
  • 针对实时程序如果也要动态分配资源的话,有些默认值需要根据实际情况调整一下,比如spark.dynamicAllocation.initialExecutors设置成2,如果每个executor一个vcore的话,至少启动两个executor,一个core给receive用,一个core用来执行计算任务。
  • 实时程序首个batch可能会有一些初始化的动作在里面,比如初始化了数据库连接池,初始化redis连接池等,可能处理时间会较长,如果按spark.dynamicAllocation.schedulerBacklogTimeout默认的1秒阈值的话,那么就会开始申请增加executors了,这样不是很合理,可以根据实际初始化时长适当将该参数调大一点,比如调成10秒。
  • 当指定了–num-executors,即明确指定了executor的个数,即使你设置了spark.dynamicAllocation.enable=true,动态资源分配也将无效。并在driver stderr的warn日志中看到如下警告:WARN spark.SparkContext: Dynamic Allocation and num executors both set, thus dynamic allocation disabled.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值