apache-spark - 使用自定义插件和调度框架优化 Kubernetes 上的 Apache Spark

标签 apache-spark kubernetes plugins scheduler

我的目标是在集群中以最佳方式运行 Spark 应用程序以及无状态工作负载,以充分利用集群资源。

由于 Spark 应用程序可能会受到部分调度的影响(驱动程序会阻塞执行程序,因为首先启动驱动程序 Pod,然后请求执行程序 Pod),防止这种情况的一个简单策略是实现备受关注的 gang/co-调度以确保我们只有在能够保证所有执行器将来都可以启动的情况下才启动驱动程序 Pod,通过实现某种预留设计,以便驱动程序可以为将来启动的执行器预留资源.

此外,此预留定义/实现也必须对所有其他非 Spark pod 可见,因为它们也必须像 Spark pod 一样记录其资源请求,以便我们清楚地了解集群资源利用率。

当前的实现包括运行新的自定义调度程序或实现调度程序扩展程序来执行此操作,但我想知道我们是否可以通过编写自定义调度程序插件来实现这一点。此外,插件必须利用调度框架中的哪些扩展点来优化 Multi-Tenancy 环境(具有不同类型的工作负载)中的 Spark 作业的调度,以便我的默认配置文件可以继续调度无状态工作负载,同时使用这些插件的自定义配置文件可以调度 Spark 应用程序吗?

最后,这是否是在 Multi-Tenancy 环境中优化调度 Spark 和无状态工作负载的最佳方式?由于我们只有一个所有配置文件必须共享的队列,这种方法(使用自定义插件)的缺点是什么?

最佳答案

听起来您想要的是 Gang Scheduling 📆。如果您想拥有该功能,我建议您使用Volcano使用 Gang Scheduling 在 Kubernetes 中安排/运行 🏃 作业.

另一种方法是使用 scheduler extender 创建您自己的调度程序如上所述here或使用Palantir gang scheduler extender .

✌️<​​/p>

关于apache-spark - 使用自定义插件和调度框架优化 Kubernetes 上的 Apache Spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62987824/

相关文章:

scala - 如何编写嵌套查询?

python - 保存的数据带有不需要的引号

nginx - gke nginx ingress 创建额外的负载均衡器

android - Cordova 使用插件发送短信,文本上的 URL 不起作用

java.io.NotSerializableException : org. apache.spark.SparkContext 序列化堆栈:- 对象不可序列化

python - 让消费者从发布/订阅主题中读取消息并将其写入 NoSQL 数据库的最常见方法是什么?

kubernetes - kubectl无法连接到Google Container Engine

kubernetes - 如何 kubectl 端口转发 GitLab web 服务?

android - NetBeans 8 "Certified Plugins"更新url被误删

scala - IDEA插件开发中无法使用akka