Я пишу программу для загрузки данных по какой-либо ссылке s3a: //. Программа компилируется через mvn install
. Локальный запуск программы (как при использовании java -jar jarfile.jar
) не дал ошибки. Однако, когда я использую spark-submit (как при использовании spark-submit jarfile.jar
), он возвращает такую ошибку:
Исключение в потоке "main" java.lang.NoSuchMethodError:
org.apache.hadoop.conf.Configuration.reloadExistingConfigurations () V,
в org.apache.hadoop.fs.s3a.S3AFileSystem.addDeprecatedKeys (S3AFileSystem.java:181)
в org.apache.hadoop.fs.s3a.S3AFileSystem. (S3AFileSystem.java:185)
в java.lang.Class.forName0 (собственный метод)
в java.lang.Class.forName (Class.java:348)
...
Журнал ошибок прослеживается до этой части моего исходного кода:
sparkDataset
.write()
.format("parquet")
.mode(SaveMode.Overwrite)
.save("some s3a:// link");
, где sparkDataset
- это экземпляр org.apache.spark.sql.Dataset
.
Попытка Как получить доступ к файлам s3a: // из Apache Spark? не удалась и вернула другую ошибку как таковую:
Исключение в потоке "main" java.lang.NoClassDefFoundError:
орг / Apache / Hadoop / фс / GlobalStorageStatistics $ StorageStatisticsProvider
Проблема из java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.reloadExistingConfigurations () V также маловероятно, потому что я могу работать локально, в котором совместимость не является проблемой.
Кроме того, я использовал версию связанных библиотек:
- AWS-ява-СДК-пакет: 1.11.199
- Hadoop-AWS: 3.0.0
Я ожидаю файлы, написанные по ссылкам s3a: //. Я думаю, что зависимость не проблема, потому что я могу работать локально. Я сталкиваюсь с этой проблемой только при использовании spark-submit для запуска этой программы. У кого-нибудь есть идеи, как решить эту проблему?
Редактировать: Кроме того, я проверил, что версия spark, отправленная в spark, называется созданной для hadoop 2.7 и выше. Я строго использую hadoop 3.0.0. Может ли это быть подсказкой, почему такая ошибка произошла в моей программе?