【问题标题】:Allow only one driver to execute on spark cluster只允许一个驱动程序在 spark 集群上执行
【发布时间】:2017-11-14 15:25:34
【问题描述】:

我们有一个由 8 个节点组成的 Spark 集群。每小时都会向集群提交一个 Spark 作业。如何配置集群或编写一些不允许在集群上提交 Spark 作业的代码(如果已在集群上运行)?

【问题讨论】:

  • 您可以使用 Spark JobServer (github.com/spark-jobserver/spark-jobserver) 来检查作业是否正在运行,并且只有在满足所有触发条件时才触发..
  • 您使用的是什么调度程序? YARN、Mesos 还是独立的?

标签: apache-spark cluster-computing


【解决方案1】:

解决此问题的一种可能方法是在提交作业时始终将所有集群资源分配给作业,这可能是您希望通过在任何时候运行一个作业来实现的目标。

this question 的答案可以为您提供一些关于在命令行上设置的标志和选项以实现此目的的指导(但请确保根据您的特定调度程序的需要调整这些标志,无论是 YARN, Mesos 或独立的)。

【讨论】:

    【解决方案2】:

    我们可以先检查集群状态。

    如果没有正在运行的作业,那么您可以提交新作业。

    例如:修改脚本 bin/spark-submit,并在调用 sparkSubmit 之前添加一个检查

    【讨论】:

      【解决方案3】:

      作业不应该提交是否相关?

      在我看来,更好的方法是将集群的所有资源分配给每个作业,同时使用executorMemoryexecutorCores 和其他属性提交它。

      您还可以将调度机制从公平调度更改为其他方式。

      这实质上会做的是,如果一个作业已经在运行,如果执行,您的集群将没有任何资源可分配给另一个作业,并且新作业将进入等待状态,直到资源空闲。

      PS:搜索工作流管理器。 OOzie、azkaban 等可能对你有帮助。

      如果这有帮助,请告诉我。 干杯。

      【讨论】:

      • 我不希望提交的作业处于“等待”状态。因为一旦正在运行的作业完成,“WAITING”作业就会开始执行。
      猜你喜欢
      • 2018-03-31
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多