Spark в контейнере Kubernetes не видит локальный файл - PullRequest
0 голосов
/ 12 июля 2020

У меня есть банально маленькое приложение Spark, написанное на Java, которое я пытаюсь запустить в кластере 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 с действительно присутствующим файлом будет использоваться для запуска драйвера (и исполнители, но я даже не дошел до этого момента), файл должен быть доступен моему приложению. Не правда ли? Почему он не видит файл?

1 Ответ

0 голосов
/ 13 июля 2020

Похоже, вы получаете это исключение от одного из ваших рабочих узлов, а не от контейнера.

Убедитесь, что вы указали все необходимые файлы как параметр --files для spark-submit.

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

https://spark.apache.org/docs/latest/submitting-applications.html#advanced -зависимость-управление

...