假设我在 Spark 流式处理应用程序中有 2 个或更多执行程序。
我将批处理时间设置为10秒,因此每10秒启动一个作业,从我的HDFS读取输入。
如果每个作业持续时间超过10秒,则启动的新作业将分配给自由执行器,对吗?
即使前一个没有完成?
我知道这似乎是一个显而易见的答案,但我在网站或与Spark Streaming相关的论文中没有发现任何关于工作安排的信息。
如果你知道一些链接,其中解释了所有这些事情,我真的很高兴看到它们。
谢谢你。
实际上,在Spark Streaming的当前实现中,在默认配置下,在任何时间点,只有作业处于活动状态(即正在执行)。所以,如果一个批次的处理时间超过10秒,那么下一个批次作业将保持排队状态。
这可以通过实验性 Spark 属性“spark.streaming.concurrentJobs”进行更改,该属性默认设置为 1。它目前没有记录(也许我应该添加它)。
将其设置为1的原因是,并发作业可能会导致奇怪的资源共享,这可能会使调试系统中是否有足够的资源来足够快地处理摄取的数据变得困难。一次只运行一个作业,很容易看出如果批次处理作业
在这个meetup幻灯片中有一点关于Spark Streaming内部的材料(抱歉,关于无耻的自我广告:)。那可能对你有用。