我一直在使用粗粒度模式运行的Mesos 1.6.1
集群上使用kafka接收器对Spark Streaming 0.28
进行原型设计。
我有6个mesos奴隶,每个奴隶都有64GB RAM and 16 Cores
我的kafka主题有3个分区
我的目标是在所有(每个在不同的mesos slave上)启动3个执行器,每个执行器有一个kafka接收器从一个kafka分区读取。
当我启动我的spark应用程序时spark.cores.max
设置为24并且spark.executor.memory
设置为8GB,我得到两个执行程序 - 一个从服务器上有16个内核,另一个服务器上有8个内核。
我希望在三个不同的从站上获得3个执行器,每个执行器有8个核心。通过资源预留/隔离,约束等可以使用mesos吗?
现在只有对我有用的解决方法是缩小每个mesos从属节点,使其最多只有8个核心。出于性能原因,我不想在细粒度模式下使用mesos,而且它的支持很快就会消失。
答案 0 :(得分:4)
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"如果设置了config变量,则执行程序的大小将使用指定的核心数。
如果报价的到期时间为(spark.executor.memory,spark.executor.cores),则会在该报价上启动多个执行程序。这意味着可能有多个但独立的Spark执行程序在同一个Mesos代理节点上运行。
目前无法在N个Mesos代理上传播执行程序。我们简要讨论了添加在N个Mesos代理中传播Spark执行程序的能力,但总结说它在提高可用性方面并没有太大的收获。
您能否帮助我们了解您在3个Mesos座席中传播Spark执行器的动机?我们可能没有考虑所有可能的用例和优势。
基思