0

我有一个用 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 映像将用于启动驱动程序(和执行程序,但我什至没有达到这一点),所以该文件应该可供我的应用程序使用。不是这样吗?为什么它看不到文件?

4

1 回答 1

0

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

确保您已将所有需要的文件指定--filesspark-submit.

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

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

于 2020-07-13T00:03:28.930 回答