Ich möchte Typesafe config eines Spark-Jobs in der dev/prod-Umgebung ändern. Mir scheint, dass dies am einfachsten ist, -Dconfig.resource=ENVNAME
an den Job zu übergeben. 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 vielleicht eine bessere Möglichkeit, die Jobkonfiguration zur Laufzeit zu ändern?
EDIT:
--conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev"
zum Befehl spark-submit hinzufüge.Error: Unrecognized option '-Dconfig.resource=dev'.
erhalten, wenn ich -Dconfig.resource=dev
an den Befehl spark-submit übergeben habe.Ä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'
Hier läuft mein Funkenprogramm mit der Zusatzoption Java
/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 sehen können die benutzerdefinierte Konfigurationsdatei --files /home/spark/jobs/fact_stats_ad.conf
die Java-Optionen für den Executor --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.
Ich hatte viele Probleme mit dem Übergeben von -D-Parametern an Spark-Executors und dem Treiber. Ich habe ein Zitat aus meinem Blogbeitrag dazu hinzugefügt: " Der richtige Weg, um den Parameter zu übergeben, ist durch die Eigenschaft: "spark.driver.extraJavaOptions
" und "spark.executor.extraJavaOptions
": Ich habe sowohl die Eigenschaft log4J als auch den für die Konfiguration benötigten Parameter übergeben. (An den Treiber konnte ich nur die Konfiguration von log4j übergeben.) .Beispiel (wurde in eine Eigenschaftsdatei geschrieben, die in spark-submit mit „—properties-file“ übergeben wurde): “
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 mein Blog-Post über die Gesamtkonfiguration von spark lesen. Ich laufe auch mit Yarn.
--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, wird der vorherige Code durch --conf
überschrieben. Sie können dies überprüfen, indem Sie sich sparkUI nach dem Start des Jobs unter Environment
anschauen.
der richtige Weg ist, die Optionen unter der gleichen Zeile wie folgt zu platzieren:
--conf 'spark.executor.extraJavaOptions=-Da=b -Dc=d'
Wenn Sie dies tun, finden Sie alle Einstellungen unter sparkUI.
Ich starte meine Spark-Anwendung über einen Spark-Submit-Befehl, der von einer anderen Scala-Anwendung aus gestartet wird. Also ich habe ein Array gern
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 ein bisschen schwierig zu verstehen, wo (nicht) Anführungszeichen und Leerzeichen zu vermeiden sind. Sie können die Spark-Weboberfläche auf Systemeigenschaftswerte überprüfen.
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-Eigenschaftendatei zu lesen, und-Dmode=local
=> um SparkContext in local - .setMaster ("local [*]") zu erstellen
Verwenden Sie die Methode wie in dem folgenden Befehl. Sie kann hilfreich sein.
spark-submit --master local [2] --conf 'spark.driver.extraJavaOptions = Dlog4j.configuration = Datei: /tmp/log4j.properties'--conf 'spark.executor.extraJavaOptions = -Dlog4j.configuration = file: /tmp/log4j.properties' --class com.test.spark.application.TestSparkJob target/application-0.0.1-SNAPSHOT-jar-with-dependencies.jar prod
Ich habe es ausprobiert und es hat für mich funktioniert, ich würde vorschlagen, dass Sie auch die Überschrift unter dem Funkenpfosten durchgehen, was wirklich hilfreich ist - https://spark.Apache.org/docs/latest/running-on-yarn.html
Ich hatte ursprünglich diese Konfigurationsdatei:
my-app {
environment: dev
other: xxx
}
So lade ich meine config in meinen spark scala code:
val config = ConfigFactory.parseFile(File<"my-app.conf">)
.withFallback(ConfigFactory.load())
.resolve
.getConfig("my-app")
Mit diesem Setup funktionierte die Systemeigenschaftsüberschreibung trotz der Angaben der Typesafe Config-Dokumentation und aller anderen Antworten nicht, als ich meinen Spark-Job 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 starte 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