我有一个用 Java 编写的非常小的 Spark 应用程序,我试图在 K8s 集群中使用spark-submit
. 我使用 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 作业以 root 身份运行,因此文件权限应该不是问题。
我一直假设,由于文件确实存在的同一个 Docker 映像将用于启动驱动程序(和执行程序,但我什至没有达到这一点),所以该文件应该可供我的应用程序使用。不是这样吗?为什么它看不到文件?