【问题标题】:Apache Spark when and what creates the driver?Apache Spark 何时以及如何创建驱动程序?
【发布时间】:2021-08-02 06:19:05
【问题描述】:

我正在尝试了解与在集群和客户端模式下的 spark-submit 上创建驱动程序相关的事件序列

Spark-提交

假设我在我的机器上,我使用 Yarn 资源管理器进行 spark-submit,部署模式为 cluster

现在,何时创建驱动程序?是在主程序执行之前吗?还是在创建 Spark Session 时?

我的理解:

  1. spark-submit bash 脚本与资源管理器交互并请求一个容器来运行主程序。
  2. 一旦容器启动,spark-submit 脚本就会在集群容器上运行主程序。
  3. 一旦主程序被执行,火花上下文就会与 资源管理器为执行器创建容器。

现在,如果这是一个正确的理解,那么当我们简单地在集群模式的本地机器上运行 python 脚本会发生什么?

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    https://blog.knoldus.com/understanding-the-working-of-spark-driver-and-executor/ 我无法比这更好地解释它。另见https://spark.apache.org/docs/latest/submitting-applications.html

    这比你的问题更能回答。很好的阅读。

    假设用户使用“spark-submit”提交作业。

    • “spark-submit”将依次启动驱动程序,该驱动程序将执行我们代码的 main() 方法。
    • 驱动程序联系集群管理器并请求资源以启动 -Executors。
    • 集群管理器代表驱动程序启动执行器。
    • 一旦 Executor 启动,它们就会与 Driver 建立直接连接。
    • 驱动程序通过检查 Lineage 来确定 Tasks 的总数。
    • 驱动程序创建逻辑和物理计划。
    • 生成物理计划后,Spark 会将任务分配给执行者。
    • Task 在 Executor 上运行,每个 Task 完成后将结果返回给 Driver。
    • 最后,当所有Task完成后,Driver中运行的main()方法退出,即main()方法调用sparkContext.stop()。
    • 最后,Spark 从集群管理器中释放所有资源。

    【讨论】:

    • 很好,很清楚。但我认为no of tasks 应该在creation of logical/physical plan 之后。
    • @Sanket9394 来源对我有好处并且有意义。
    • @thebluephantom 我能否得出结论,在集群模式下,spark-submit 负责为工作节点请求资源管理器,一旦获得工作节点,它就会在其中运行驱动程序?
    • 不,驱动程序作为 Spark-submit 的结果会这样做。您需要重新阅读答案。使用动态资源分配会有点棘手。
    • 对不起@thebluephantom 我已经读过很多遍了,但还是不清楚。为了让驱动程序工作,它需要一个主机。对于集群模式,驱动程序主机应该来自集群管理器。谁向集群管理器请求主机?您说它是驱动程序,但首先请求集群管理的驱动程序需要作为 jvm 进程运行。它在哪里运行?
    【解决方案2】:

    Spark 有两种部署模式:clientcluster

    • client 模式是您提交 Spark 作业的计算机驱动程序的模式。那可能是您的本地计算机,或者通常是所谓的“边缘节点”。在这种模式下,驱动程序与许多其他软件共享其资源,并且大多数情况下它不是最佳且不可靠的(考虑一下当您提交作业时同时在计算机上运行超重的东西的情况)

    • cluster 模式是 YARN 从集群的可用节点中选择一个节点并使其成为驱动程序的模式。所以它会尝试挑选最好的,你不必再担心它的资源了。

    当我们简单地在集群模式的本地机器上运行 python 脚本时会发生什么?

    您现在可能对这个问题的答案有了一些了解:如果您只是在本地机器上运行 python 脚本,它将是client 模式,spark 作业将使用该本地计算机资源作为 Spark 计算的一部分。另一方面,cluster 模式下,另一台计算机将作为驱动程序运行,而不是您的本地计算机。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2017-04-25
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多