【问题标题】:Can I send a whole folder with spark-submit?我可以使用 spark-submit 发送整个文件夹吗?
【发布时间】:2022-02-04 12:43:21
【问题描述】:

我知道可以使用 --files 选项通过 spark-submit 发送文件,但也可以发送整个文件夹吗?

其实我想发送lib文件夹,里面有外部库的jar文件。或者 --jars 选项是否已经在 executor 目录上创建了一个 lib 文件夹?在我的情况下,有一个 lib 文件夹是必要的,否则会出错。

【问题讨论】:

  • 当您说 jar 文件时,您是指您的代码需要的外部库吗?还是您编译的 Spark 代码可执行文件?
  • 是的外部库

标签: apache-spark


【解决方案1】:

不,spark-submit --files 选项不支持发送文件夹,但您可以将所有文件放在一个 zip 中,在 --files 列表中使用该文件。您可以在 spark 作业中使用 SparkFiles.get(filename) 来加载文件、分解它并使用分解的文件。 'filename' 不需要是绝对路径,只需 filename 即可。

PS:只有在 SparkContext 初始化后才能使用。

【讨论】:

  • 我不明白你的回答。因此,如果我将文件放在一个 zip 文件中,比如 lib.zip,spark-submit 是否会解压缩执行程序目录中 lib 文件夹中的文件?
  • 不,我指的是传递一个包含多个 conf 文件的文件夹,而我的答案与 --files 相关。 --jars 和 --files 都将文件复制到执行程序的工作目录,但 --files 中给出的 jar 列表不会包含在类路径中。为了在类路径中使用 jars,jars 必须在 --jars 列表中给出。 --jars 不支持文件夹包含。
  • 在 --files 中提供 conf 文件,在 --jars 列表中提供依赖项,您应该会很好,因为它们会自动复制到执行器的工作目录。
【解决方案2】:

你可以这样做:

  1. 归档文件夹 --> myfiles.zip
  2. 使用“spark.yarn.dist.archives”配置发送存档:
    示例:
spark-submit \
...
--conf spark.yarn.dist.archives=myfiles.zip
...

【讨论】:

    【解决方案3】:

    我认为您有多种解决方案可以做到这一点。

    首先我可以理解您想要自动化此操作,但如果您没有太多 jar,您可以将它们一个一个作为参数传递给 --jars 选项。

    否则你可以在 Spark 安装的 spark/jars 目录中sudo mv所有的 jar,但是在集群的情况下这很烦人。

    所以最后,你可以做到这一点

    bash solution

    如果您需要集群模式,这并不能解决问题。对于集群模式,我只需修改 bash 代码以查询 jar 的 HDFS 目录。并将所有的 jar 文件放在 HDFS 目录中。

    也许还有其他解决方案,但这是我的想法,

    周末愉快!

    【讨论】:

    • 好吧,我有一个 python 脚本,它可以读取所有的 jar 文件,但问题是如何将它们放在执行程序目录的 lib 文件夹中。 spark-submit 默认是把 --jars 指定的所有文件都放到一个 lib 文件夹中,还是我自己创建一个。
    猜你喜欢
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多