【spark 任务调度问题求助】
[问题描述]
).spark如何保证woker上 executor中运行的task不会太多 (如果同时提交很多作业)
).org.apache.spark.scheduler.TaskSchedulerImpl.resourceOffers,方法中拿到排序后的所有已提交的stageSet,
循环按worker上cpu配置core数量发送任务
).DriverEndpoint.onStart()方法每秒执行一次的定时任务会发送消息ReviveOffers,
也会调用org.apache.spark.scheduler.TaskSchedulerImpl.resourceOffers
).这样会无限的给worker上发任务,就会挂掉
).用默认FIFO调度
).Spark 版本 1.6
已解决: executor 启动任务时用的时线程池,会在池中不断启动固定cpu内核数的线程,不会给executor带来很大压力
def launchTask(
context: ExecutorBackend,
taskId: Long,
attemptNumber: Int,
taskName: String,
serializedTask: ByteBuffer): Unit = {
val tr = new TaskRunner(context, taskId = taskId, attemptNumber = attemptNumber, taskName,
serializedTask)
runningTasks.put(taskId, tr)
threadPool.execute(tr)
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。