Kubernetes 容器中的 Spark 看不到本地文件



我有一个用Java编写的很小的Spark应用程序,我正在尝试使用spark-submit在K8s集群中运行。我用 Spark 二进制文件构建了一个映像,我的 uber-JAR 文件包含所有必要的依赖项(在/opt/spark/jars/my.jar中),以及一个配置文件(在/opt/spark/conf/some.json中)。

在我的代码中,我从

SparkSession session = SparkSession.builder()
.appName("myapp")
.config("spark.logConf", "true")
.getOrCreate();
Path someFilePath = FileSystems.getDefault().getPath("/opt/spark/conf/some.json");
String someString = new String(Files.readAllBytes(someFilePath));

并在readAllBytes时从 Spark 驱动程序获取此异常:

java.nio.file.NoSuchFileException: /opt/spark/conf/some.json

如果我手动运行 Docker 映像,我绝对可以按预期看到文件/opt/spark/conf/some.json。我的 Spark 作业以根用户身份运行,因此文件权限应该不是问题。

我一直假设,由于相同的 Docker 映像(确实存在该文件)将用于启动驱动程序(和执行程序,但我什至没有达到这一点),该文件应该可供我的应用程序使用。难道不是这样吗?为什么看不到文件?

您似乎从其中一个工作节点而不是容器中获取此异常。

确保您已指定所需的所有文件作为spark-submit--files选项。

spark-submit --master yarn --deploy-mode cluster --files <local files dependecies> ...

https://spark.apache.org/docs/latest/submitting-applications.html#advanced-dependency-management

相关内容

  • 没有找到相关文章

最新更新