web-dev-qa-db-fra.com

Comment passer un paramètre -D ou une variable d'environnement au travail Spark?

Je souhaite changer Typesafe config d'un travail Spark dans un environnement de développement/production. Il me semble que le moyen le plus simple d'y parvenir est de transmettre -Dconfig.resource=ENVNAME au travail. Ensuite, la bibliothèque de configuration Typesafe fera le travail pour moi.

Est-il possible de passer cette option directement au travail? Ou peut-être qu'il y a un meilleur moyen de changer la configuration du travail au moment de l'exécution?

MODIFIER:

  • Rien ne se passe lorsque j'ajoute l'option --conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev" à la commande spark-submit.
  • J'ai eu Error: Unrecognized option '-Dconfig.resource=dev'. quand je passe -Dconfig.resource=dev à la commande spark-submit.
64
kopiczko

Modifiez la ligne de commande spark-submit en ajoutant trois options:

  • --files <location_to_your_app.conf>
  • --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
  • --conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'
46
kopiczko

Voici mon programme d'allumage exécuté avec l'option Java supplémentaire

/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

comme vous pouvez le voir le fichier de configuration personnalisé --files /home/spark/jobs/fact_stats_ad.conf

les options Java de l'exécuteur --conf spark.executor.extraJavaOptions=-Dconfig.fuction.conf

les options Java du pilote . --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'

J'espère que ça peut aider.

15
giaosudau

J'ai eu beaucoup de mal à transmettre les paramètres -D aux responsables de l'exécution et au pilote, j'ai ajouté une citation tirée de mon billet de blog à ce sujet: “spark.driver.extraJavaOptions” et “spark.executor.extraJavaOptions”: J'ai transmis à la fois la propriété de configuration log4J et le paramètre dont j'avais besoin pour les configurations. (Pour le pilote, je n'ai pu transmettre que la configuration log4j) .Par exemple (a été écrit dans un fichier de propriétés passé en spark-submit avec “" fichier de propriétés "): “

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

Vous pouvez lire mon article de blog sur les configurations globales d’étincelles . Je suis aussi sur 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'

si vous écrivez de cette façon, le dernier code --conf écrasera le précédent, vous pourrez le vérifier en regardant sparkUI après le début du travail sous l'onglet Environment.

la méthode correcte consiste donc à placer les options sous la même ligne, comme suit: --conf 'spark.executor.extraJavaOptions=-Da=b -Dc=d' Si vous procédez ainsi, vous pourrez trouver tous vos paramètres qui seront affichés sous sparkUI.

6
linehrr

Je démarre mon application Spark via une commande spark-submit lancée depuis une autre application Scala. J'ai donc un tableau comme

Array(".../spark-submit", ..., "--conf", confValues, ...)

confValues est:

  • pour le mode yarn-cluster:
    "spark.driver.extraJavaOptions=-Drun.mode=production -Dapp.param=..."
  • pour le mode local[*]:
    "run.mode=development"

Cependant, il est un peu difficile de comprendre où (pas) échapper des guillemets et des espaces. Vous pouvez consulter l'interface Web Spark pour connaître les valeurs des propriétés système.

2
tgpfeiffer
spark-submit --driver-Java-options "-Denv=DEV -Dmode=local" --class co.xxx.datapipeline.jobs.EventlogAggregator target/datapipeline-jobs-1.0-SNAPSHOT.jar

La commande ci-dessus fonctionne pour moi:

-Denv=DEV => pour lire le fichier de propriétés de DEV env et
-Dmode=local => pour créer SparkContext dans local - .setMaster ("local [*]") 

1
Yoga Gowda

Utilisez la méthode comme dans la commande ci-dessous, peut être utile pour vous -

spark-submit --master local [2] --conf 'spark.driver.extraJavaOptions = Dlog4j.configuration = fichier: /tmp/log4j.properties'--conf 'spark.executor.extraJavaOptions = -Dlog4j.configuration = fichier: /tmp/log4j.properties' --class com.test.spark.application.TestSparkJob target/application-0.0.1-SNAPSHOT-jar-with-dependencies.jar prod

J'ai essayé et cela a fonctionné pour moi, je suggérerais également de passer par la rubrique ci-dessous, Spark Post, qui est vraiment utile - https://spark.Apache.org/docs/latest/running-on-yarn.html

0
Nitesh Saxena

J'ai eu à l'origine ce fichier de configuration:

my-app {
  environment: dev
  other: xxx
}

Voici comment je charge ma configuration dans mon code spark scala:

val config = ConfigFactory.parseFile(File<"my-app.conf">)
  .withFallback(ConfigFactory.load())
  .resolve
  .getConfig("my-app")

Avec cette configuration, malgré ce que disent la documentation Typesafe Config et toutes les autres réponses, la substitution de la propriété système ne fonctionnait pas pour moi lorsque j'ai lancé mon travail d'allumage de la manière suivante:

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

Pour que cela fonctionne, je devais changer mon fichier de configuration en:

my-app {
  environment: dev
  environment: ${?env.override}
  other: xxx
}

puis lancez-le comme ceci:

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