如何在Spark Streaming中将作业分配给执行程序?

时间:2014-05-07 20:42:16

标签: job-scheduling apache-spark executor

假设我在Spark Streaming应用程序中有2个或更多执行程序。

我将批处理时间设置为10秒,因此每隔10秒就会启动一个作业,从HDFS读取输入。

如果每个作业持续时间超过10秒,则启动的新作业会被分配给免费执行者吗?

即使前一个没有完成?

我知道这似乎是一个明显的答案,但我在网站或与Spark Streaming相关的论文中没有找到任何关于作业安排的内容。

如果你知道所有这些事情都有解释的链接,我真的很感激看到它们。

谢谢。

1 个答案:

答案 0 :(得分:24)

实际上,在Spark Streaming的当前实现中并且在默认配置下,在任何时间点只有作业处于活动状态(即正在执行中)。因此,如果一个批处理的处理时间超过10秒,那么下一批处理的作业将保持排队。

这可以通过实验Spark属性" spark.streaming.concurrentJobs"来改变。默认设置为1.它目前没有记录(也许我应该添加它)。

它被设置为1的原因是并发作业可能潜在地导致奇怪的资源共享,并且这使得难以调试系统中是否有足够的资源来足够快地处理所摄取的数据。只有一次运行一个作业,很容易看出,如果批处理时间<1。批处理间隔,那么系统将是稳定的。当然,这可能不是在某些条件下最有效地利用资源。我们绝对希望将来能够改进这一点。

在这个meetup幻灯片中有一些关于Spark Streaming内部的资料(对不起,关于无耻的自我宣传:))。这可能对你有用。