Ich habe einen Spark-Job, der Daten aus einer Konfigurationsdatei liest. Diese Datei ist eine typsichere Konfigurationsdatei.Verwenden von typesafe config mit Spark on Yarn
Der Code, der die config liest sieht wie folgt aus:
ConfigFactory.load().getConfig("com.mycompany")
Jetzt
ich die application.conf als Teil meiner uber jar nicht zusammenbauen, da ich die Datei als externe Datei übergeben möchtender Inhalt der externen application.conf ich wie folgt aussieht verwenden möchten:
com.mycompany {
//configurations my program needs
}
diese application.conf Datei auf meinem lokalen Rechner Dateisystem vorhanden ist (und nicht auf HDFS)
Ich bin mit Spark-1.6.1 mit Garn
Dies ist, wie mein Funken einreichen Befehl wie folgt aussieht:
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
Die Ausnahme, die ich erhalten ist:
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)
Und also meine frage ist: weiß jemand wie ich eine externe typsichere application.conf-datei laden kann, die auf meinem lokalen Rechner mit funke-submit und garn sitzt?
Ich habe versucht, einige der Lösungen in How to add a typesafe config file which is located on HDFS to spark-submit (cluster-mode)? und in Typesafe Config in Spark folgenden und auch in How to pass -D parameter or environment variable to Spark job? und nichts funktionierte
ich jede Richtung zu schätzen weiß diesen
Vielen Dank im Voraus
helfen Sie sollten verwenden, um das Flag mulitple mal eine durch Kommata getrennte Liste von Dateien für '--files' statt angeben. – vpipkt
Yup, das ist genau das, was ich am Ende tun – Gideon
'--driver-java-Optionen = '- Dmy.config.path = myConfigValue'' von [einem anderen Antwort] (https://stackoverflow.com/a/28214447/519951) – ruhong