4

我们创建了一个由多个 Spark Streaming 应用程序组成的系统,每个应用程序都有多个接收器。据我了解,每个接收器都需要在集群中拥有自己的核心。我们需要多个接收器来适应峰值,但我们并不总是需要它们。应用程序很小,只执行一项任务,以便在集群上(重新)提交它们而不会分散其他作业和任务的注意力。

1)假设我们有 5 个作业,每个作业有 5 个接收器,我们将需要集群中至少 25 个核心,仅用于接收器运行 + 核心用于处理。这是正确的吗?

2) 是否有可能进行更动态的资源分配,或者一个核心是否严格绑定到一个接收器?

3) 我查看了 spark-rest-server,它提供了在不同工作中共享 spark 上下文的可能性。您能想到为所有(约 100 个)作业使用一个 SparkStreamingContext 吗?

我们在独立模式下运行集群,同时在相同节点上运行 Cassandra 集群。

4

1 回答 1

2
  1. 如果您运行 5 个不同的 Spak 应用程序,每个应用程序有 5 个接收器,是的,数据摄取将消耗 5x5=25 个内核。但是,您是否看过无接收器的方法?(https://spark.apache.org/docs/latest/streaming-kafka-integration.html的第 2 节)
  2. Spark在 Yarn 和Mesos上具有动态分配功能,但这涉及到执行者,而不是接收者。
  3. 在较小(数量)的应用程序中流水线化数据似乎是有意义的:如果您有大约 100 个应用程序,每个应用程序都执行简单的 ETL,那么启动和调度这些应用程序可能比运行它们实际执行的处理花费更多的时间。我可能错了,但是您不必更具体地了解他们的工作(也许在另一个 SO 问题中,在您进行了一些基准测试之后?)
于 2015-11-07T09:30:37.977 回答