[我们有一个在AWS中有6个EC2节点的群集(16 cpu,每个节点64 gb-1个节点运行mesos主节点,5个节点运行mesos从节点)。 mesos调度程序正在主节点上运行。我们仅使用此集群来运行火花作业。我们的火花配置为每个执行器5 cpu和10 gb(与驱动程序相同)。我
在我们预定的一项工作中,我们有一个场景,我们需要同时进行几百次火花提交。发生这种情况时,调度程序将启动所有这些Spark提交的驱动程序,而不会为群集中的任何执行程序留出空间。
我正在寻找一些选择。我想从spark / mesos社区的成员那里获得一些指导。
我不想进入的一些选项是:增加群集大小,要求分析师更改其工作结构,以将所有spark-submit合并为一个,然后切换到YARN / EMR(实际上,我尝试了此操作,陷入一些混乱的队列问题)
选项1:使用Mesos角色
我找到了一些有关使用配额和角色来解决此问题的文档。但是我不确定以下内容:
如何创建Mesos角色并更新资源以供这个角色?
如何为火花驱动程序和火花执行程序设置单独的角色?
默认情况下,所有资源均处于*角色。我可以在执行spark-submit时设置一个名为spark.mesos.role的标志,但不确定如何创建此角色并确保该角色仅用于执行者?
选项2:修改mesos群集调度程序
当mesos调度程序发生spark-submit时,它将驱动程序请求添加到WaitingQueue。如果驱动程序在执行期间失败,并且如果可以使用监督模式,则会将它们发送到具有自定义重试计划设置的PendingRetryQueue。当mesos可用资源时,首先调度PendingRetryQueue的这些驱动程序,然后调度下一个的WaitingQueue。 ,我会将这些驱动程序添加到PendingRetryQueue中,并安排它们在以后运行。目前,据我了解,当WaitingQueue mesos其余服务器中有200个以上的驱动程序发送失败消息时,不会将其添加到PendingRetryQueue中。
任何实现这两个选项的帮助都会对我有很大帮助。提前致谢。
选项1是好的。
首先通过创建类似dispatcher-quota.json的文件来设置调度程序配额
cat dispatcher-quota.json
{
"role": "dispatcher",
"guarantee": [
{
"name": "cpus",
"type": "SCALAR",
"scalar": { "value": 5.0 }
},
{
"name": "mem",
"type": "SCALAR",
"scalar": { "value": 5120.0 }
}
]
}
然后使用]将其推送到您是mesos大师(组长)>
curl -d @dispatcher-quota.json -X POST http://<master>:5050/quota
所以现在您将有一个驱动程序配额
如果需要,请确保调度程序正在使用正确的服务角色集运行。如果在DC / OS中使用
$ cat options.json { "service": { "role": "dispatcher" } } $ dcos package install spark --options=options.json
否则,请随时分享您如何部署调度程序。我将为您提供指导。
司机可以。现在让我们以相同的方式与执行者一起工作]
$ 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,如果不够,请不要犹豫。
这应该完成工作