Ich möchte die typesichere Konfiguration eines Spark-Jobs in einer dev / prod-Umgebung ändern . Es scheint mir, dass der einfachste Weg, dies zu erreichen, darin besteht, -Dconfig.resource=ENVNAME
auf den Job überzugehen. Dann erledigt die Typesafe-Konfigurationsbibliothek die Arbeit für mich.
Gibt es eine Möglichkeit, diese Option direkt an den Job zu übergeben? Oder gibt es eine bessere Möglichkeit, die Jobkonfiguration zur Laufzeit zu ändern?
BEARBEITEN:
- Es passiert nichts, wenn ich dem Befehl spark-submit eine
--conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev"
Option hinzufüge . - Ich habe,
Error: Unrecognized option '-Dconfig.resource=dev'.
als ich-Dconfig.resource=dev
zum Spark-Submit- Befehl übergehe .
scala
apache-spark
kopiczko
quelle
quelle
-Dx=y
in der Befehlszeile bleiben .Antworten:
Ändern Sie die
spark-submit
Befehlszeile und fügen Sie drei Optionen hinzu:--files <location_to_your_app.conf>
--conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
--conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'
quelle
--conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
Option nicht funktioniert, wenn spark den Treiber im Client-Modus sendet. Verwenden Sie--driver-java-options "-Dconfig.resource=app"
stattdessen. Siehe Spark-Konfiguration .--files <location_to_your.conf>#application.conf --driver-java-options -Dconfig.file=your.conf
Die#
In-Dateien geben den Namen relativ zu den Ausführenden an; Daher wird die angegebene Datei als application.conf angezeigt.spark-submit --driver-java-options='-Dmy.config.path=myConfigValue'
Hier ist mein Spark-Programm, das mit der zusätzlichen Java-Option ausgeführt wird
/home/spark/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \ --files /home/spark/jobs/fact_stats_ad.conf \ --conf spark.executor.extraJavaOptions=-Dconfig.fuction.conf \ --conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH -Dalluxio.user.file.write.location.policy.class=alluxio.client.file.policy.MostAvailableFirstPolicy -Dconfig.file=/home/spark/jobs/fact_stats_ad.conf' \ --class jobs.DiskDailyJob \ --packages com.databricks:spark-csv_2.10:1.4.0 \ --jars /home/spark/jobs/alluxio-core-client-1.2.0-RC2-jar-with-dependencies.jar \ --driver-memory 2g \ /home/spark/jobs/convert_to_parquet.jar \ AD_COOKIE_REPORT FACT_AD_STATS_DAILY | tee /data/fact_ad_stats_daily.log
wie Sie die benutzerdefinierte Konfigurationsdatei sehen können
--files /home/spark/jobs/fact_stats_ad.conf
die Java-Optionen des Executors
--conf spark.executor.extraJavaOptions=-Dconfig.fuction.conf
die Treiber-Java-Optionen.
--conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH -Dalluxio.user.file.write.location.policy.class=alluxio.client.file.policy.MostAvailableFirstPolicy -Dconfig.file=/home/spark/jobs/fact_stats_ad.conf'
Hoffe es kann helfen.
quelle
Ich hatte viele Probleme mit der Übergabe von -D-Parametern an Spark-Executoren und den Treiber. Ich habe ein Zitat aus meinem Blog-Beitrag dazu hinzugefügt: "Der richtige Weg, den Parameter zu übergeben, ist über die Eigenschaft:"
spark.driver.extraJavaOptions
"und"spark.executor.extraJavaOptions
": Ich habe sowohl die log4J-Konfigurationseigenschaft als auch den Parameter übergeben, den ich für die Konfigurationen benötigte. (An den Treiber konnte ich nur die log4j-Konfiguration übergeben.) Zum Beispiel (wurde in eine Eigenschaftendatei geschrieben, die in spark-submit mit „- Eigenschaftendatei ”):“spark.driver.extraJavaOptions –Dlog4j.configuration=file:///spark/conf/log4j.properties - spark.executor.extraJavaOptions –Dlog4j.configuration=file:///spark/conf/log4j.properties -Dapplication.properties.file=hdfs:///some/path/on/hdfs/app.properties spark.application.properties.file hdfs:///some/path/on/hdfs/app.properties
„
Sie können meinen Blog-Beitrag über allgemeine Konfigurationen von Funken lesen . Ich laufe auch auf Garn.
quelle
--files <location_to_your_app.conf> --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app' --conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'
Wenn Sie auf diese Weise schreiben,
--conf
wird der vorherige den vorherigen überschreiben. Sie können dies überprüfen, indem Sie sich sparkUI ansehen, nachdem der Job unterEnvironment
tab gestartet wurde .Der richtige Weg ist also, die Optionen wie folgt unter dieselbe Zeile zu setzen:
--conf 'spark.executor.extraJavaOptions=-Da=b -Dc=d'
Wenn Sie dies tun, werden Sie feststellen, dass alle Ihre Einstellungen unter sparkUI angezeigt werden.quelle
--conf
zweimal verwenden.Ich starte meine Spark-Anwendung über einen Spark-Submit-Befehl, der in einer anderen Scala-Anwendung gestartet wird. Also habe ich ein Array wie
Array(".../spark-submit", ..., "--conf", confValues, ...)
wo
confValues
ist:yarn-cluster
Modus:"spark.driver.extraJavaOptions=-Drun.mode=production -Dapp.param=..."
local[*]
Modus:"run.mode=development"
Es ist jedoch etwas schwierig zu verstehen, wo (nicht) Anführungszeichen und Leerzeichen zu vermeiden sind. Sie können die Spark-Weboberfläche auf Systemeigenschaftswerte überprüfen.
quelle
local[*]
Modus). Ich werde mityarn-cluster
Modus versuchen und den Kommentar aktualisieren (wenn ich nicht vergesse ..: D)spark-submit --driver-java-options "-Denv=DEV -Dmode=local" --class co.xxx.datapipeline.jobs.EventlogAggregator target/datapipeline-jobs-1.0-SNAPSHOT.jar
Der obige Befehl funktioniert für mich:
-Denv=DEV
=> um die DEV env-Eigenschaftendatei zu lesen und-Dmode=local
=> um SparkContext in local - .setMaster ("local [*]") zu erstellenquelle
Verwenden Sie die Methode wie im folgenden Befehl, kann für Sie hilfreich sein -
Ich habe es versucht und es hat bei mir funktioniert. Ich würde vorschlagen, dass Sie auch die Überschrift unter Spark Post durchgehen, was wirklich hilfreich ist - https://spark.apache.org/docs/latest/running-on-yarn.html
quelle
Ich hatte ursprünglich diese Konfigurationsdatei:
So lade ich meine Konfiguration in meinen Spark-Scala-Code:
val config = ConfigFactory.parseFile(File<"my-app.conf">) .withFallback(ConfigFactory.load()) .resolve .getConfig("my-app")
Bei diesem Setup funktionierte die Überschreibung der Systemeigenschaften trotz der Angaben in der Typesafe Config-Dokumentation und aller anderen Antworten nicht, als ich meinen Spark-Job wie folgt startete:
spark-submit \ --master yarn \ --deploy-mode cluster \ --name my-app \ --driver-java-options='-XX:MaxPermSize=256M -Dmy-app.environment=prod' \ --files my-app.conf \ my-app.jar
Damit es funktioniert, musste ich meine Konfigurationsdatei ändern in:
my-app { environment: dev environment: ${?env.override} other: xxx }
und starten Sie es dann so:
spark-submit \ --master yarn \ --deploy-mode cluster \ --name my-app \ --driver-java-options='-XX:MaxPermSize=256M -Denv.override=prod' \ --files my-app.conf \ my-app.jar
quelle