控制在 Mesos 上运行的火花驱动器的数量



我们在 AWS 中有一个包含 6 个 EC2 节点的集群(16 个 CPU,每个节点 64 GB - 1 个节点运行 Mesos 主节点,5 个节点运行 Mesos 从属节点(。中间分派器在主节点上运行。我们专门使用此群集来运行 Spark 作业。我们的 Spark 配置是每个执行器 5 个 CPU 和 10 GB(驱动程序相同(。我

在我们的一个计划作业中,我们有一个场景,我们需要同时执行几百个 Spark 提交。发生这种情况时,调度程序会启动所有这些 Spark 提交的驱动程序,而不会为群集中的任何执行程序留出空间。

我正在寻找一些选择。我想从 spark/mesos 社区的成员那里得到一些指示。

我不想进入的一些选项是:增加集群大小,要求分析师更改他们的工作结构以将所有火花提交合并为一个,切换到 YARN/EMR(实际上我尝试了这个并在那里遇到了一些混乱的队列问题(

选项 1:使用 Mesos 角色

我找到了一些关于使用配额和角色来解决这个问题的文档。但我不确定以下内容:

  • 如何创建 Mesos 角色并更新要提供给的资源 这个角色 ?

  • 如何为火花驱动程序和火花执行者设置单独的角色?

默认情况下,所有资源都处于 * 角色中。有一个名为 spark.mesos.role 的标志,我可以在执行 spark-submit 时设置它,但不确定如何创建此角色并确保此角色仅用于执行程序?

选项 2:修改 Mesos 集群调度程序

当 mesos 调度程序发生 Spark-submit 时,它会将驱动程序请求添加到 WaitingQueue。 当驱动程序在执行时失败并且如果监督模式可用时,它们将发送到具有自定义重试计划设置的 PendingRetryQueue。当 mesos 提供资源时,首先调度来自 PendingRetryQueue 的这些驱动程序,然后调度 WaitingQueue。我正在考虑将 WaitingQueue 的大小保留为 5 (spark.mesos.maxDrivers(,当 spark-submits 多于队列大小时,我会将这些驱动程序添加到 PendingRetryQueue 并安排它们稍后运行。目前,根据我的理解,当 WaitingQueue mesos rest 服务器中有超过 200 个驱动程序时,会发送一条失败的消息,并且不会将其添加到 PendingRetryQueue 中。

任何关于实施任何选项的帮助都会对我非常有帮助。提前谢谢。

更新:刚刚看到,当我给 spark-submit 一个角色时,它只运行该角色中的执行器,而驱动程序以默认的 * 角色运行。我认为这应该为我解决这个问题。测试后,我将在此处发布更新并关闭它。谢谢

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

选项 1 是好的。

首先通过创建类似调度程序配额.json 的文件来设置调度程序配额

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

所以现在您将拥有驱动程序的配额

确保调度程序在需要时使用正确的服务角色集运行。如果在 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 如果还不够,请不要犹豫。

这应该可以完成工作

最新更新