通过 Kafka 接收器在 Coarse Grain Mesos 集群上进行 Spark Streaming

Spark Streaming through Kafka receiver on Coarse Grain Mesos cluster

我一直在 Mesos 0.28 集群 运行 粗粒度模式上使用 kafka 接收器对 Spark Streaming 1.6.1 进行原型设计。

我有 6 个 mesos 奴隶,每个奴隶 64GB RAM and 16 Cores
我的 kafka 主题有 3 个分区。
我的目标是总共启动 3 个执行程序(每个执行程序都在不同的 mesos slave 上),每个执行程序都有一个 kafka 接收器从一个 kafka 分区读取数据。

当我在 spark.cores.max 设置为 24 且 spark.executor.memory 设置为 8GB 的​​情况下启动我的 spark 应用程序时,我得到了两个执行器 - 一个从属设备上有 16 个内核,另一个从属设备上有 8 个内核。

我希望在三个不同的从站上获得 3 个各有 8 个内核的执行器。通过资源预留/隔离、约束等,mesos 有可能吗?

现在唯一对我有用的解决方法是将每个 mesos 从节点缩小到最多只有 8 个内核。出于性能原因,我不想在细粒度模式下使用 mesos,而且它的支持即将消失。

Mesosphere 为 Spark 贡献了以下补丁:https://github.com/apache/spark/commit/80cb963ad963e26c3a7f8388bdd4ffd5e99aad1a. This improvement will land in Spark 2.0. Mesosphere has backported this and other improvements to Spark 1.6.1 and made it available in DC/OS (http://dcos.io).

此补丁在课程增益模式中引入了一个新的 "spark.executor.cores" 配置变量。设置 "spark.executor.cores" 配置变量后,执行程序的大小将根据指定的内核数进行调整。

如果报价以 (spark.executor.memory, spark.executor.cores 的倍数到达,则将在该报价上启动多个执行器。这意味着在同一个 Mesos 代理节点上可能有多个但独立的 Spark 执行器 运行。

(目前)无法将执行程序分布到 N 个 Mesos 代理上。我们简要讨论了添加跨 N Mesos 代理传播 Spark 执行程序的能力,但得出的结论是它在提高可用性方面没有太大意义。

您能否帮助我们了解您将 Spark 执行程序分布到 3 个 Mesos 代理的动机?我们可能没有考虑所有可能的用例和优势。

基思