【问题标题】:Spark in Kubernetes container does not see local fileKubernetes 容器中的 Spark 看不到本地文件
【发布时间】:2020-11-02 01:54:03
【问题描述】:

我有一个用 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));

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

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

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

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

【问题讨论】:

  • 请分享您的镜像,以 YAML 格式分享您的 kubernetes 部署/pod?

标签: java apache-spark kubernetes spark-submit nosuchfileexception


【解决方案1】:

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

确保您已将所有需要的文件指定为--files 选项,用于spark-submit

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

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

【讨论】:

  • 不确定“来自您的工作节点之一,而不是来自容器”是什么意思——异常出现在 Spark 驱动程序日志中。而且,鉴于有问题的文件是 Docker 映像的一部分,我的印象是 --files 是不必要的......
  • @mustaccio 您的应用程序是如何部署的?驱动程序不一定在您的 docker 容器中运行,它可能是
猜你喜欢
  • 2021-04-11
  • 2017-11-04
  • 2016-10-19
  • 2018-03-28
  • 2019-02-01
  • 2017-09-14
  • 2021-08-29
  • 2018-06-02
  • 1970-01-01
相关资源
最近更新 更多