【问题标题】:How jobs are assigned to executors in Spark Streaming?Spark Streaming 中的作业是如何分配给执行者的?
【发布时间】:2014-06-25 00:47:18
【问题描述】:

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

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

如果每个作业的持续时间都超过 10 秒,那么启动的新作业会分配给一个空闲的 executor 对吗?

即使上一个没有完成?

我知道这似乎是一个显而易见的答案,但我在网站或与 Spark Streaming 相关的论文上没有找到任何关于作业调度的信息。

如果您知道一些解释所有这些内容的链接,我将非常感激看到它们。

谢谢。

【问题讨论】:

    标签: job-scheduling apache-spark executor


    【解决方案1】:

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

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

    将其设置为 1 的原因是并发作业可能会导致奇怪的资源共享,这可能会导致难以调试系统中是否有足够的资源来足够快地处理摄取的数据。一次只运行一个作业,很容易看出如果批处理时间

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

    【讨论】:

    • 我们正在开展一个与此相关的项目,因此我很乐意查看幻灯片以了解更多信息。谢谢。
    • 这仍然是真的吗?我已经从 2.2 更新到 2.3,并开始在 UI 的流选项卡中查看并发作业。
    • 我认为这是一个旧答案...?
    • 2020 年“spark.streaming.concurrentJobs”有什么变化,使用 Spark 2.4?它还会导致奇怪的资源共享吗?
    • 我们知道我们是否可以安全地使用“spark.streaming.concurrentJobs”值让我们说 2 和 spark 3
    猜你喜欢
    • 2021-07-11
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2019-07-19
    • 2016-08-31
    • 2020-06-13
    相关资源
    最近更新 更多