控制在mesos上运行的spark驱动程序的数量

6yt4nkrj  于 2021-06-26  发布在  Mesos
关注(0)|答案(2)|浏览(363)

我们在aws中有一个包含6个ec2节点的集群(16个cpu,每个节点64 gb—1个节点运行mesos master,5个节点运行mesos slave)。mesos调度器正在主节点上运行。我们专门使用这个集群来运行spark作业。我们的spark配置是5cpu,每个执行器10gb(驱动程序也是这样)。我
在我们的一个计划作业中,我们有一个场景,需要同时执行几百个spark提交。当这种情况发生时,调度器会为所有这些spark提交启动驱动程序,而不会给集群中的任何执行器留下空间。
我在考虑一些选择。我想从spark/mesos社区的成员那里得到一些建议。
我不想进入的一些选项是:增加集群规模,要求分析师改变他们的工作结构,将所有spark提交合并为一个,切换到yarn/emr(实际上我尝试过这个,遇到了一些混乱的队列问题)
选项1:使用mesos角色
我找到了一些关于使用配额和角色来解决这个问题的文档。但我不确定以下几点:
如何创建mesos角色并更新可用于此角色的资源?
如何为spark驱动程序和spark执行器分别设置角色?
默认情况下,所有资源都在角色中。我可以在执行spark submit时设置一个名为spark.mesos.role的标志,但不确定如何创建此角色并确保此角色仅用于执行者?
选项2:修改mesos集群调度器
当spark submit发生在mesos调度器上时,它会将驱动程序请求添加到waitingqueue。当驱动程序在执行时失败,并且如果监控模式可用,它们将被发送到具有自定义重试计划设置的pendingretryqueue。当mesos提供资源时,pendingretryqueue中的这些驱动程序首先被调度,waitingqueue下一个被调度。我想保持waitingqueue的大小为5(spark.mesos.maxdrivers),当spark提交的数量超过队列大小时,我会将这些驱动程序添加到pendingretryqueue,并安排它们稍后运行。目前,据我了解,当waitingqueue中有200多个驱动程序时,mesos rest服务器会发送一条失败消息,并且不会将其添加到pendingretryqueue。
任何关于实现这两个选项的帮助都会对我很有帮助。提前谢谢。
更新:我刚刚看到,当我给spark submit一个角色时,它只运行该角色中的执行器,驱动程序运行默认的
角色。我想这应该能帮我解决这个问题。一旦我测试了这个,我会在这里发布我的更新并关闭这个。谢谢

dddzy1tm

dddzy1tm1#

方案一是好的。
首先通过创建一个类似dispatcher-quota.json的文件来设置dispatcher quota

cat dispatcher-quota.json
{
 "role": "dispatcher",
 "guarantee": [
   {
     "name": "cpus",
     "type": "SCALAR",
     "scalar": { "value": 5.0 }
   },
   {
     "name": "mem",
     "type": "SCALAR",
     "scalar": { "value": 5120.0 }
   }
 ]
}

然后把它推给你的中观大师(领袖)

curl -d @dispatcher-quota.json -X POST http://<master>:5050/quota

所以现在你将有一个司机配额
如果需要,请确保dispatcher使用正确的服务角色集运行。如果在dc/os中使用

$ cat options.json
{
    "service": {
        "role": "dispatcher"
    }
}
$ dcos package install spark --options=options.json

否则,您可以随意分享如何部署您的调度器。我将为你提供一个如何指导。
对司机来说没关系。现在让我们用同样的方法来处理executor

$ cat executor-quota.json
{
  "role": "executor",
  "guarantee": [
    {
      "name": "cpus",
      "type": "SCALAR",
      "scalar": { "value": 100.0 }
    },
    {
      "name": "mem",
      "type": "SCALAR",
      "scalar": { "value": 409600.0 }
    }
  ]
}
$ curl -d @executor-quota.json -X POST http://<master>:5050/quota

使价值观适应您的需求
然后通过提供

--conf spark.mesos.role=executor \

我的解释来源于https://github.com/mesosphere/spark-build/blob/master/docs/job-scheduling.md 如果不够,不要犹豫。
这样就可以了

3df52oht

3df52oht2#

如更新中所述,默认情况下,mesos以默认角色(*)运行spark驱动程序,以“spark.mesos.role”参数提供的角色运行executors。为了控制每个角色的可用资源,我们可以使用配额、保证或保留。因为它符合我们的要求,所以我们进行了静态预订。谢谢。

相关问题