我正在研究星火的一个项目,最近我从使用Spark独立应用到用于集群管理的Mesos。现在,我发现自己对在新系统下提交职务时如何分配资源感到困惑。
在独立模式下,我使用了类似的东西(遵循这篇Cloudera博客文章的一些建议)
/opt/spark/bin/spark-submit --executor-memory 16G --executor-cores 8
--total-executor-cores 240 myscript.py这是在一个集群,其中每台机器有16个核心和~32 GB的RAM。
令人欣慰的是,我很好地控制了运行的执行者的数量和分配给每个人的资源。在上面的例子中,我知道我得到了240/8=30个执行器,每个执行器都有16 In的内存和8个内核。给定集群中每台机器上的内存,这相当于在每台机器上运行的不超过两个执行者。如果我想要更多的执行者,我可以这样做
/opt/spark/bin/spark-submit --executor-memory 10G --executor-cores 5
--total-executor-cores 240 myscript.py这将给我240/5=47个执行器,每个执行器有5核和10 to内存,并且每台机器最多允许3个执行器。
但现在我在梅索斯我有点糊涂了。首先,我在粗粒度模式下运行,以确保我能够修复和控制我的资源分配(这是在为相当复杂的模型服务的情况下,我们希望预先分配资源)。
现在,我可以指定--total-executor-cores和--executor-memory,但是文档告诉我,--exeuctor-cores只适用于Spark独立和Spark,因此很难指定分配给每个执行者和资源的总数。假设我运行这个:
/opt/spark/bin/spark-submit --total-executor-cores 240 --executor-memory 16G --conf spark.mesos.coarse=true myscript.py当我在Mesos中检查这个工作时,事情开始变得混乱起来。下面是我的问题:
--executor-memory降到了4GB左右,mesos仍然每个节点只运行一个执行器,有16个核心和4GBRAM)。但我想要完成的是我的前两个例子。也就是说,我希望每个节点运行多个执行器,每个节点共享该节点的RAM和核心(例如,适量的预执行器( 5-8) )。考虑到我不能在Mesos中指定--executor-cores,我如何实现这一点?或者我是不是因为某种原因而离开了基地,甚至想要完成这个任务?Mesos不允许每个节点有多个执行器吗?发布于 2015-12-27 01:15:02
问题1:在粗粒度模式下,Spark的执行器(org.apache.spark.executor.CoarseGrainedExecutorBackend)作为Mesos任务启动.Mesos框架实际上是星火驱动程序。一个火花驱动程序可以提交多个火花作业。这取决于你的星火应用程序。Spark和Mesos都来自加州大学伯克利分校的AMPLab,它们是并行开发的,所以它们使用类似的术语(执行器,任务.)这可能会使你感到困惑:-)。
问题2:在粗粒度模式下,星火在每个主机上只启动一个执行器(详情请参阅https://issues.apache.org/jira/browse/SPARK-5095 )。因此,对于您的情况,火花将启动每个主机一个执行器(每个执行器消耗16G内存,以及主机中的所有可用内核(如果没有其他工作负载,则为16个核心),直到执行者的总核心达到240个核心为止。将有240/16=15名遗嘱执行人。
对于spark.mesos.mesosExecutor.cores,它只适用于细粒度模式.在细粒度模式下,火花将在每个主机上启动一个执行器(org.apache.spark.executor.MesosExecutorBackend) .即使没有任务,执行器也会消耗spark.mesos.mesosExecutor.cores的核数。每个任务将消耗另一些spark.task.cpus的核心。
发布于 2015-12-14 13:56:48
事关1)
这也是我的理解。一个Mesos任务实际上是一个火花执行者(任务)。
事关2)
根据我的理解,您应该能够使用spark.mesos.mesosExecutor.cores配置属性:
(仅限于细粒度模式)给每个Mesos执行器的核心数目。这不包括用于运行星火任务的核心。换句话说,即使没有运行星火任务,每个Mesos执行器也将占用配置在这里的核心数量。该值可以是一个浮点数。
看见
https://stackoverflow.com/questions/34227021
复制相似问题