it-swarm.com.de

Wie kann man -D-Parameter oder Umgebungsvariable an den Spark-Job übergeben?

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:

  • Es passiert nichts, wenn ich die Option --conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev" zum Befehl spark-submit hinzufüge.
  • Ich habe Error: Unrecognized option '-Dconfig.resource=dev'. erhalten, wenn ich -Dconfig.resource=dev an den Befehl spark-submit übergeben habe.
64
kopiczko

Ä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'
46
kopiczko

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.

15
giaosudau

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.

7
Demi Ben-Ari

--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.

6
linehrr

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:

  • für yarn-cluster modus:
    "spark.driver.extraJavaOptions=-Drun.mode=production -Dapp.param=..."
  • für 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.

2
tgpfeiffer
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 

1
Yoga Gowda

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

0
Nitesh Saxena

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
0
nemo