spark动态分配如何清除排队任务

时间:2017-02-01 09:38:08

标签: apache-spark spark-streaming

我可以根据我提出这个问题来动态打开新的虚拟机

我使用时使用spark动态分配 spark.dynamicAllocation.minExecutors = 10 突然爆发数据火花打开新执行人员非常缓慢导致排长队

当我在突然爆发时将 spark.dynamicAllocation.minExecutors = 200 更改为更大的数字时,它会非常快地打开新的执行程序并且队列可以清除

我的问题是,我们必须将此值设置为高价值。

1 个答案:

答案 0 :(得分:0)

VIPIN,

当您在spark中设置动态分配时,我可以看到您启用它并设置执行者的最小值。但是,当你需要200个执行程序更快时,分配有一个名为spark.dynamicAllocation.schedulerBacklogTimeout的配置,这个默认值有1个超时。

这意味着在1s之后,如果你的任务没有完成任务,它将分配更多的执行者。

根据saprk中的documentation,说:

  

Spark会轮次请求执行程序。当spark.dynamicAllocation.schedulerBacklogTimeout秒有待处理的任务时,会触发实际请求,然后如果待处理任务队列仍然存在,则每次spark.dynamicAllocation.sustainedSchedulerBacklogTimeout秒再次触发。此外,每轮请求的执行者数量与上一轮相比呈指数增长。例如,一个应用程序将在第一轮中添加1个执行程序,然后在后续轮次中添加执行程序中的2,4,8等。

因此,对于每秒,Spark会在n秒的延迟时间内分配2 ^ n。要到达200执行程序,您需要等待至少8秒才能请求执行程序进行Yarn。还有几秒就可以解决这个问题。

也许如果你提高核心数量,它会对你有所帮助。但是如果你正在使用每个节点的完整核心......那么没有解决方案。