在 Spark 群集模式下没有此类文件或目录



我正在使用pyspark编写一个基本上处理数据的Spark流应用程序。

短包装概述: 此应用程序包含多个模块和一些配置文件,这些文件是非.py文件(例如:.yaml 或 .json(。

我将整个应用程序打包在 package.zip 文件中并提交此包.zip以 Spark。

现在的问题是当我在 yarn 集群模式下发出 spark-submit 命令时。我得到IOError。下面是堆栈跟踪

Traceback (most recent call last):
File "main/main.py", line 10, in <module>
import logger.logger
File "package.zip/logger/logger.py", line 36, in get_logger
IOError: [Errno 2] No such file or directory: 'logger/config.yaml'

火花命令:火花-提交 --主纱线簇 --py-文件包.zip主/主.py

但是当我在 yarn-client 模式下提交作业时,应用程序按预期工作。

我的理解:

  1. 当我在客户端模式下提交作业时,Spark 驱动程序在我发出命令的同一台机器上运行。并且包分布在所有节点上。
  2. 当我在集群模式下发出命令时,Spark 驱动程序应用程序主机都在单个节点(不是提交代码的客户端(中运行,并且仍然将包分发到集群中的所有节点。

在这两种情况下,包.zip对所有节点都可用,那么为什么只加载 py 文件而在集群模式下无法加载非 py 文件。

任何人都可以帮助我了解这里的情况并解决问题吗?

更新--

观察

客户端模式下压缩包在运行驱动程序脚本的路径中解压缩。 与在群集模式下一样,zip 包在所有节点之间共享,但未解压缩。 在这里我需要解压缩所有节点中的包吗?有没有办法告诉 Spark 解压缩工作节点中的包?

您可以使用--files选项传递额外的文件。

https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-submit.html

最新更新