【问题标题】:spark-submit command with --py-files fails if the driver class path or executor class path is not set如果未设置驱动程序类路径或执行程序类路径,则带有 --py-files 的 spark-submit 命令失败
【发布时间】:2020-12-22 15:37:21
【问题描述】:

我有一个如下的主脚本

from pyspark.sql.session import SparkSession
..............
..............
..............
import callmodule as cm <<<--- This is imported from another pyspark script which is in callmod.zip file
..............
..............
..............

当我如下提交 spark 命令时,它失败并显示错误:没有名为 Callmodule 的模块

spark-submit --master local --py-files C:\pyspark\scripts\callmod.zip mainscript.py

当我提交带有驱动程序类路径(没有执行程序类路径)的 spark 命令时,它运行成功。

spark-submit --master local --py-files C:\pyspark\scripts\callmod.zip --driver-class-path C:\pyspark\scripts\callmod.zip mainscript.py
                                (or)
spark-submit --master local --py-files C:\pyspark\scripts\callmod.zip --conf spark.driver.extraClassPath=C:\pyspark\scripts\callmod.zip mainscript.py
                                (or)
spark-submit --master local --py-files C:\pyspark\scripts\callmod.zip --conf spark.driver.extraLibraryPath=C:\pyspark\scripts\callmod.zip mainscript.py

当我提交带有执行程序类路径(没有驱动程序类路径)的 spark 命令时,它也成功运行。

spark-submit --master local --py-files C:\pyspark\scripts\callmod.zip --conf spark.executor.extraClassPath=C:\pyspark\scripts\callmod.zip mainscript.py
                               (or)
spark-submit --master local --py-files C:\pyspark\scripts\callmod.zip --conf spark.executor.extraLibraryPath=C:\pyspark\scripts\callmod.zip mainscript.py

你能解释一下下面的导入语句在哪里起作用吗?在驱动程序或执行程序上?

import callmodule as cm

当只设置驱动类路径或只设置执行器类路径时,为什么代码没有失败并显示 Error: No Module Named callmodule?

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    您使用的是--master local,因此驱动程序与执行程序相同。因此,在驱动程序或执行程序上设置类路径会产生相同的行为,并且都不会导致错误。

    【讨论】:

    • 即使在本地模式下,驱动程序和执行程序不会在单独的jvm上运行吗?在这种情况下,执行者将无法识别驱动程序的类路径,反之亦然。不是吗?
    • @shankar 我不这么认为。在本地模式下,只有 1 个 jvm。 driver 和 executor 是同一个东西,在同一个 jvm 上。
    • 好的。知道了。因此,如果我必须在真实集群上运行带有 --py-files 选项的 spark-submit 作业,那么使用 --driver-class-path 或 executor classpath 或两者的正确方法是什么?
    • @shankar 我认为您需要同时指定两者,以便驱动程序和执行程序都可以找到文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2012-07-12
    • 2016-04-29
    • 2019-11-07
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多