Spark Stream通过粗粒度Mesos集群上的Kafka接收器



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

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

当我启动 spark.cores.max 设置为 24 并将 spark.executor.memory 设置为 8GB 的 Spark 应用程序时,我得到了两个执行器 - 一个从服务器上有 16 个内核,另一个从服务器上有 8 个内核。

我希望在三个不同的从服务器上获得 3 个执行器,每个执行器有 8 个内核。通过资源保留/隔离、约束等,中观是否可能?

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

Mesosphere 为 Spark 贡献了以下补丁:https://github.com/apache/spark/commit/80cb963ad963e26c3a7f8388bdd4ffd5e99aad1a。这一改进将落在Spark 2.0中。Mesosphere 已将此改进和其他改进向后移植到 Spark 1.6.1 中,并在 DC/OS (http://dcos.io) 中可用。

此补丁在课程增益模式下引入了新的"spark.executor.cores"配置变量。设置 "spark.executor.cores" 配置变量时,executor 的大小将与指定的核心数调整

如果产品/服务到达时具有 (spark.executor.memory, spark.executor.cores) 的倍数,则该产品/服务将启动多个执行程序。这意味着在同一个 Mesos 代理节点上可能有多个但独立的 Spark 执行器运行。

(目前)没有办法将执行器分散到 N 个 Mesos 代理中。我们简要讨论了添加在 N Mesos 代理中传播 Spark 执行器的功能,但得出的结论是,在提高可用性方面,它并没有买太多东西。

你能帮助我们了解你在 3 个 Mesos 代理中传播 Spark 执行器的动机吗?我们可能没有考虑所有可能的用例和优势。

基思

最新更新