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