【问题标题】:pyspark job execution in yarn cluster纱线集群中的pyspark作业执行
【发布时间】:2020-05-30 01:53:23
【问题描述】:

我正在尝试了解 spark 作业在纱线集群中的工作原理

我正在使用以下命令提交作业

  1. spark-submit --master yarn --deploy-mode cluster sparksessionexample.py

提交作业后控制台显示如下控制台日志

2020-05-29 20:52:48,668 INFO yarn.Client: Uploading resource file:/tmp/spark-bcd415f0-a22e-46b2-951c-5b6e4385a0c6/__spark_libs__2908230569257238890.zip -> hdfs://localhost:9000/user/hadoop/.sparkStaging/application_1590759398715_0003/__spark_libs__2908230569257238890.zip
2020-05-29 20:53:14,164 INFO yarn.Client: Uploading resource file:/home/hadoop/pythonprojects/Python/src/spark_jobs/sparksessionexample.py -> hdfs://localhost:9000/user/hadoop/.sparkStaging/application_1590759398715_0003/sparksessionexample.py
2020-05-29 20:53:14,610 INFO yarn.Client: Uploading resource file:/home/hadoop/clouderaapp/apache-spark/python/lib/pyspark.zip -> hdfs://localhost:9000/user/hadoop/.sparkStaging/application_1590759398715_0003/pyspark.zip
2020-05-29 20:53:15,984 INFO yarn.Client: Uploading resource file:/home/hadoop/clouderaapp/apache-spark/python/lib/py4j-0.10.7-src.zip -> hdfs://localhost:9000/user/hadoop/.sparkStaging/application_1590759398715_0003/py4j-0.10.7-src.zip
2020-05-29 20:53:18,362 INFO yarn.Client: Uploading resource file:/tmp/spark-bcd415f0-a22e-46b2-951c-5b6e4385a0c6/__spark_conf__7123551182035223076.zip -> hdfs://localhost:9000/user/hadoop/.sparkStaging/application_1590759398715_0003/__spark_conf__.zip

我只是想了解 yarn 如何执行 sparksessionexample.py 文件,我的意思是它是否在节点上创建 python 虚拟环境?如上日志只显示上传 lib、confs 但 python 客户端执行 sparksessionexample.py 呢?

谁能帮助理解这一点?

【问题讨论】:

    标签: apache-spark hadoop pyspark


    【解决方案1】:

    “Spark 客户端”用于引导 Spark 作业执行。

    在您的情况下,它是唯一在您的本地计算机上运行的东西,因为您请求了 cluster 执行模式

    • “客户端”联系集群管理器(此处为 YARN 资源管理器,可能是 Kubernetes Master 等)以在 AppMaster 容器中启动 Spark 驱动程序
    • 然后驱动程序再次联系集群管理器为执行程序请求一些容器
    • 然后驱动程序运行您的 Python 代码并将工作分配给执行程序
    • 驱动程序最终取消分配其执行程序和自身
    • 此时“客户端”注意到 YARN 作业已达到成功或失败状态,可以终止

    简而言之,“客户端”永远不会从集群内运行的驱动程序中获得任何有用的信息。您必须检查运行驱动程序的容器的 YARN 日志(它是 AppMaster,通常编号为 00001


    如果您想从驱动程序中看到一些反馈,那么以 client 执行模式运行您的作业——这意味着驱动程序将在与“客户端”相同的 JVM 中运行,在你的本地机器,并在你的控制台中吐出它的日志。

    【讨论】:

    • - 然后驱动程序运行您的 Python 代码并将工作分配给执行程序 -> 由于没有 python 客户端,我不知道驱动程序如何在 AppMaster 中运行 Python 代码在 AppMaster 中执行 python 代码。所有库、配置文件、火花包都已上传,但我不知道没有 python 客户端 的情况下如何执行 python 代码
    • 你见过没有安装 Python 2.x 的最新 Linux 操作系统吗?一半的管理工具依赖于它。如果您没有安装自定义 Python 运行时,并且没有设置 PYSPARK_PYTHON 环境变量来使用它,那么 Spark 将使用它在 PATH 中找到的任何内容。可能是操作系统工具使用的 2.7 安装。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 2017-08-27
    • 2018-01-12
    • 1970-01-01
    • 2023-04-08
    • 2015-09-03
    相关资源
    最近更新 更多