У меня есть работа Spark, которая считывает данные из файла конфигурации. Этот файл является типичным конфигурационным файлом.Использование configate config с Spark on Yarn
код, который читает конфиг выглядит следующим образом:
ConfigFactory.load().getConfig("com.mycompany")
Теперь я не собрать application.conf как часть моей убер банку, так как я хочу, чтобы передать файл как внешний файл
содержание внешнего application.conf Я хочу использовать выглядит следующим образом:
com.mycompany {
//configurations my program needs
}
Этот файл application.conf существует на моей локальной машине файловой системы (а не на HDFS)
Я использую Спарк 1.6.1 с Пряжа
Это как моя искра подать команду выглядит следующим образом:
LOG4J_FULL_PATH=/log4j-path
ROOT_DIR=/application.conf-path
/opt/deploy/spark/bin/spark-submit \
--class com.mycompany.Main \
--master yarn \
--deploy-mode cluster \
--files $ROOT_DIR/application.conf \
--files $LOG4J_FULL_PATH/log4j.xml \
--conf spark.executor.extraClassPath="-Dconfig.file=file:application.conf" \
--driver-class-path $ROOT_DIR/application.conf \
--verbose \
/opt/deploy/lal-ml.jar
Исключение я получаю это:
2016-11-09 12:32:14 ERROR ApplicationMaster:95 - User class threw exception: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'com'
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'com'
at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:147)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)
at com.typesafe.config.impl.SimpleConfig.getObject(SimpleConfig.java:218)
at com.typesafe.config.impl.SimpleConfig.getConfig(SimpleConfig.java:224)
at com.typesafe.config.impl.SimpleConfig.getConfig(SimpleConfig.java:33)
at com.mycompany.Main$.main(Main.scala:36)
at com.mycompany.Main.main(Main.scala)
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:498)
at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:542)
И поэтому мой вопрос: кто-нибудь знает, как я могу загрузить внешний файл typafe application.conf, который сидит на моей локальной машине с помощью spark-submit и пряжи?
Я попытался следующие некоторые из решений в How to add a typesafe config file which is located on HDFS to spark-submit (cluster-mode)? и в Typesafe Config in Spark, а также в How to pass -D parameter or environment variable to Spark job? и ничего не получалось
Я ценю любое направление для решения этой
Спасибо заранее
Вы должны быть в состоянии использовать запятую списка файлов для '--files', а не с указанием пометки Mulitple раза. – vpipkt
Yup, именно это я и сделал – Gideon
'--driver-java-options = '- Dmy.config.path = myConfigValue'' из [другого ответа] (https://stackoverflow.com/a/28214447/519951) – ruhong