Как добавить типобезопасный конфигурационный файл, который находится на HDFS, для spark-submit (cluster-mode)?

У меня есть приложение Spark (Spark 1.5.2), которое передает данные из Кафки в HDFS. Мое приложение содержит два файла конфигурации Typesafe для настройки определенных вещей, таких как тема Kafka и т. Д.

Теперь я хочу запустить свое приложение с помощью spark-submit (режим кластера) в кластере. Файл jar со всеми зависимостями моего проекта хранится в HDFS. Пока мои файлы конфигурации включены в JAR-файл, все работает отлично. Но это непрактично для целей тестирования, потому что мне всегда приходится перестраивать банку.

Поэтому я исключил файлы конфигурации моего проекта и добавил их через «driver-class-path». Это работало в режиме клиента, но если я сейчас переместил файлы конфигурации в HDFS и запустил свое приложение в режиме кластера, он не смог найти настройки. Ниже вы можете найти мою команду spark-submit:

/usr/local/spark/bin/spark-submit \
    --total-executor-cores 10 \
    --executor-memory 15g \
    --verbose \
    --deploy-mode cluster\
    --class com.hdp.speedlayer.SpeedLayerApp \
    --driver-class-path hdfs://iot-master:8020/user/spark/config \
    --master spark://spark-master:6066 \
    hdfs://iot-master:8020/user/spark/speed-layer-CONFIG.jar

Я уже пробовал это с параметром --file, но это тоже не сработало. Кто-нибудь знает, как я могу это исправить?

Обновить:

Я провел дальнейшие исследования и выяснил, что это может быть связано с путем HDFS. Я изменил путь HDFS на "hdfs: /// iot-master: 8020 // user // spark // config Но, к сожалению, это тоже не сработало. Но, возможно, это могло бы помочь вам.

Ниже вы также можете увидеть ошибку, которую я получаю при запуске программы драйвера в режиме кластера:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:58)
    at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala)
Caused by: java.lang.ExceptionInInitializerError
    at com.speedlayer.SpeedLayerApp.main(SpeedLayerApp.scala)
    ... 6 more
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'application'
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:145)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)
...

Ответы на вопрос(2)

Ваш ответ на вопрос