перезаписывающий стандартное приложение spark-submit не работает - PullRequest
0 голосов
/ 23 апреля 2020

Я строю банку с application.conf в папке src/main/resources. Тем не менее, я пытаюсь перезаписать это при выполнении spark-submit. Однако это не работает.

следующая моя команда

$spark_submit $spark_params $hbase_params \
    --class com.abc.xyz.MYClass \
    --files application.conf \
    $sandbox_jar flagFile/test.FLG \
    --conf "spark.executor.extraClassPath=-Dconfig.file=application.conf"

application.conf - находится в той же директории, где находится мой jar-файл.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Учитывая, что application.conf является файлом свойств. Есть другая опция, которая может решить ту же цель использования файла свойств.

Не уверен, но файл свойств упаковки с jar может не обеспечить гибкость? Сохраняя файл свойств отдельно от упаковки jar, это обеспечит гибкость, так как всякий раз, когда какие-либо изменения свойств просто заменяют новый файл свойств, а не собирают и разворачивают весь jar.

Этого можно достичь, сохраняя ваши свойства в свойствах файл префикс вашего ключа свойства с «искрой».

spark.inputpath /input/path
spark.outputpath /output/path

Команда Spark Submit будет выглядеть так:

$spark_submit $spark_params $hbase_params \
    --class com.abc.xyz.MYClass \
    --properties-file application.conf \
    $sandbox_jar flagFile/test.FLG 

Получение свойств в коде, как,

sc.getConf.get("spark.inputpath")       // /input/path
sc.getConf.get("spark.outputpath")      // /output/path

Не обязательно это решит вашу проблему. Но здесь просто попробуйте применить другой подход к работе.

0 голосов
/ 24 апреля 2020

-Dconfig.file=path/to/config-file может не работать из-за внутреннего кэша в ConfigFactory. В документации предлагается запустить ConfigFactory.invalidateCaches().

Другой способ заключается в объединении предоставленных свойств с существующими доступными свойствами.

ConfigFactory.invalidateCaches()
val c = ConfigFactory.parseFile(new File(path-to-file + "/" + "application.conf"))
val config : Config = c.withFallback(ConfigFactory.load()).resolve

Я думаю, что лучший способ переопределить свойства - это предоставить их с помощью -D. Typesafe отдает приоритет системным свойствам, поэтому -D переопределит reference.conf и application.conf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...