开发者社区> 问答> 正文

spark如何保证woker上 executor中运行的task不会太多(如果同时提交很多作业)

已解决

【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

展开
收起
thinktothings 2018-12-06 18:32:45 3301 0
1 条回答
写回答
取消 提交回答
  • 主流大数据技术分享(Spark,Flink)
    采纳回答

    已解决: 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)

    }

    2019-07-17 23:18:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载