【问题标题】:Spark on Mesos - running multiple Streaming jobsMesos 上的 Spark - 运行多个 Streaming 作业
【发布时间】:2016-08-31 00:12:39
【问题描述】:

我有 2 个要运行的 spark 流作业,以及为批处理作业和其他操作保留一些可用资源。

我评估了 Spark Standalone 集群管理器,但我意识到我必须为两个作业修复资源,这将几乎没有计算能力留给批处理作业。

我开始评估 Mesos,因为它具有“细粒度”执行模型,其中资源在 Spark 应用程序之间转移。

1) 这是否意味着单个内核可以在 2 个流媒体 应用程序之间切换?

2) 虽然我有 spark & cassandra,但是为了利用数据局部性,我是否需要在每台从机上都有专用的核心以避免洗牌?

3) 您是否建议以“细粒度”或“粗粒度”模式运行流式传输作业。我知道逻辑答案是粗粒度的(为了最大限度地减少流式应用程序的延迟)但是当整个集群中的资源有限时(3 个节点的集群,每个 4 个核心的集群 - 有 2 个流式应用程序要运行并且不时多次批处理作业)

4) 在 Mesos 中,当我在集群模式下运行 spark 流作业时,它会永久占用 1 个核心(就像独立集群管理器正在做的那样),还是该核心会执行驱动程序进程并有时充当执行者?

谢谢

【问题讨论】:

    标签: apache-spark spark-streaming mesos


    【解决方案1】:

    现在实际上已弃用细粒度模式。即使有了它,每个核心都被分配给任务直到完成,但在 Spark Streaming 中,每个处理间隔都是一个新作业,因此任务只持续处理每个间隔数据所需的时间。希望该时间小于间隔时间,否则您的处理将备份,最终耗尽内存来存储所有等待处理的 RDD。

    另请注意,您需要有一个专用于每个流的Reader 的核心。每一个都将被固定在流的生命周期中!如果需要重新启动流摄取,您将需要额外的内核; Spark 将尝试使用不同的内核。另外,如果内核也在集群上运行(而不是在您的笔记本电脑或其他东西上),您的驱动程序将绑定一个内核。

    不过,Mesos 是一个不错的选择,因为它会将任务分配给有能力运行它们的节点。您的集群听起来很小,除非数据流本身很小。

    如果您为 Spark 使用 Datastax 连接器,它将尝试将输入分区保持在 Spark 任务的本地。但是,我相信连接器假定它将使用独立模式管理 Spark 本身。因此,在您采用 Mesos 之前,请检查一下这是否真的是您所需要的。

    【讨论】:

    • 感谢您的回答。我的虚拟机上有 2 个内核,我运行 1 个作业,我设置了“spark.cores.max = 1”。所以我可以并行运行 2 个作业(每个作业有 1 个核心)。那么“我需要为每个流的 Reader 提供一个专用核心”是什么意思?
    • 据我所知,Mesos 不会为任务分配实际的内核,而是 cpu shares:...Mesos 从属使用 CPU 共享,而不是保留特定的 CPU。此外,请参阅this link
    • 我相信关于 Mesos 和核心部分的观点是正确的,实际上,但您仍然存在每个 Spark Streaming 作业需要至少两个核心的问题,每个流一个固定到读者的核心,并且另一个用于一般处理。因此,如果您运行两个流式作业,您将单独为读者使用两个内核。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多