首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解mesos上火花作业的资源分配

理解mesos上火花作业的资源分配
EN

Stack Overflow用户
提问于 2015-12-11 15:30:39
回答 2查看 4.8K关注 0票数 6

我正在研究星火的一个项目,最近我从使用Spark独立应用到用于集群管理的Mesos。现在,我发现自己对在新系统下提交职务时如何分配资源感到困惑。

在独立模式下,我使用了类似的东西(遵循这篇Cloudera博客文章的一些建议)

代码语言:javascript
复制
/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个内核。给定集群中每台机器上的内存,这相当于在每台机器上运行的不超过两个执行者。如果我想要更多的执行者,我可以这样做

代码语言:javascript
复制
/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,因此很难指定分配给每个执行者和资源的总数。假设我运行这个:

代码语言:javascript
复制
/opt/spark/bin/spark-submit --total-executor-cores 240 --executor-memory 16G --conf spark.mesos.coarse=true myscript.py

当我在Mesos中检查这个工作时,事情开始变得混乱起来。下面是我的问题:

  1. 术语。Web列出了“框架”,我认为它对应于独立UI中的“作业”。但是,当我单击给定框架的详细信息时,它会列出“任务”。但这不可能是真正的火花任务,对吧?据我所知,这里的“任务”对火花来说,实际上是指“执行者”。这将与UI一致,表示我的框架(作业)有:15个活动任务、240个CPU和264 15内存。 264/15=17.6,这似乎与我指定的每个执行器16 15的内存(加上一些开销,我猜)一致。我对这一切的解释对不对?
  2. 假设是的,当我检查这些“任务”(执行者)中的任何一个时,我看到每个任务都分配了16个核心。考虑到我们每台机器有16个核心,这似乎表明我基本上是在16台机器上运行一个执行器,每个执行器都有完整的16个内核,但只有16 GB的RAM。(请注意,即使我把--executor-memory降到了4GB左右,mesos仍然每个节点只运行一个执行器,有16个核心和4GBRAM)。但我想要完成的是我的前两个例子。也就是说,我希望每个节点运行多个执行器,每个节点共享该节点的RAM和核心(例如,适量的预执行器( 5-8) )。考虑到我不能在Mesos中指定--executor-cores,我如何实现这一点?或者我是不是因为某种原因而离开了基地,甚至想要完成这个任务?Mesos不允许每个节点有多个执行器吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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的核心。

票数 4
EN

Stack Overflow用户

发布于 2015-12-14 13:56:48

事关1)

这也是我的理解。一个Mesos任务实际上是一个火花执行者(任务)。

事关2)

根据我的理解,您应该能够使用spark.mesos.mesosExecutor.cores配置属性:

(仅限于细粒度模式)给每个Mesos执行器的核心数目。这不包括用于运行星火任务的核心。换句话说,即使没有运行星火任务,每个Mesos执行器也将占用配置在这里的核心数量。该值可以是一个浮点数。

看见

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34227021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档