mou*_*hio 6 mesos apache-spark
我正在开发一个Spark项目,最近从使用Spark Standalone转向Mesos进行集群管理.我现在发现自己在如何在新系统下提交作业时分配资源时感到困惑.
在独立模式下,我使用的是这样的东西(遵循Cloudera博客文章中的一些建议:
/opt/spark/bin/spark-submit --executor-memory 16G --executor-cores 8
--total-executor-cores 240 myscript.py
Run Code Online (Sandbox Code Playgroud)
这是在一个集群上,每台机器有16个内核和~32 GB RAM.
有趣的是,我可以很好地控制运行的执行程序数量和分配给每个执行程序的资源.在上面的例子中,我知道我有240/8 = 30个执行器,每个执行器有16GB内存和8个内核.给定群集中每台计算机上的内存,这相当于每台计算机上运行的执行程序不超过两个.如果我想要更多执行者,我可以做类似的事情
/opt/spark/bin/spark-submit --executor-memory 10G --executor-cores 5
--total-executor-cores 240 myscript.py
Run Code Online (Sandbox Code Playgroud)
现在这将给我240/5 = 47个执行器,每个执行器具有5个内核和10GB内存,并且每台机器最多允许3个执行器.
但现在我正在使用mesos,我有点困惑.首先,我正在以粗粒度模式运行,以确保我可以修复和控制我的资源分配(这是我们想要预先分配资源的相当复杂模型的服务).
现在,我可以指定--total-executor-cores和--executor-memory,但文档告诉我--exeuctor-cores仅适用于Spark独立和YARN,这使得指定分配给每个困难的执行程序和资源的总数.说我运行这个:
/opt/spark/bin/spark-submit --total-executor-cores 240 --executor-memory 16G --conf spark.mesos.coarse=true myscript.py
Run Code Online (Sandbox Code Playgroud)
当我在Mesos Web UI中检查这个工作时,事情开始变得混乱.所以,这是我的问题:
术语.Web UI列出了"框架",我假设它与独立UI中的"作业"相对应.但是当我点击给定框架的细节时,它会列出"任务".但这些不能是实际的Spark任务,对吗?据我所知,就任务而言,这里的"任务"实际上必须意味着"执行者".这与UI说我的框架(作业)具有以下内容是一致的:15个活动任务,240个CPU和264GB内存.
264/15 = 17.6,这似乎与我指定的每个执行器的16GB内存一致(加上一些开销,我猜).我是否正确地解释了这一切?
假设是的,当我检查这些"任务"(执行程序)中的任何一个时,我看到每个都分配了16个核心.鉴于我们每台机器有16个核心,这似乎表明我基本上在16台机器上运行了一个执行器,并且每个执行器都获得了完整的16个核心,但只有16 GB的RAM.(请注意,即使我下降--executor-memory到4GB,mesos仍然只为每个节点运行一个执行程序,具有16个内核和4GB RAM).但我想要完成的事情就像我的前两个例子.也就是说,我希望每个节点运行多个执行程序,每个执行程序共享该节点的RAM和核心(即中等数量的核心预执行程序,5-8).考虑到我无法--executor-cores在Mesos中指定,我该如何做到这一点?或者我是否因为某种原因离开基地甚至想要完成这个?Mesos会不允许每个节点有多个执行器?
小智 4
问题1:在粗粒度模式下,Spark的执行器(org.apache.spark.executor.CoarseGrainedExecutorBackend)作为Mesos任务启动。Mesos Framework实际上是Spark Driver。一个 Spark Driver 可以提交多个 Spark 作业。这取决于您的 Spark 应用程序。Spark 和 Mesos 都来自加州大学伯克利分校的 AMPLab,并且是并行开发的,因此它们使用相似的术语(执行器、任务...),这可能会让您感到困惑:-)。
问题2:在粗粒度模式下,Spark每台主机仅启动一个执行器(详细信息请参阅https://issues.apache.org/jira/browse/SPARK-5095 )。因此,对于您的情况,Spark 将为每个主机启动一个执行程序(每个执行程序消耗 16G 内存,如果没有其他工作负载,主机中的所有可用核心为 16 个核心),直到执行程序的核心总数达到 240 个核心。将有 240/16=15 名执行者。
对于spark.mesos.mesosExecutor.cores,它仅适用于细粒度模式。在细粒度模式下,Spark 将为每个主机启动一个执行程序 (org.apache.spark.executor.MesosExecutorBackend)。即使没有任务,执行器也会消耗spark.mesos.mesosExecutor.cores的核心数。每个任务都会消耗不同数量的spark.task.cpus核心。
| 归档时间: |
|
| 查看次数: |
4392 次 |
| 最近记录: |