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:
--conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev"
à la commande spark-submit.Error: Unrecognized option '-Dconfig.resource=dev'.
quand je passe -Dconfig.resource=dev
à la commande spark-submit.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'
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.
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.
--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.
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, ...)
où confValues
est:
yarn-cluster
:"spark.driver.extraJavaOptions=-Drun.mode=production -Dapp.param=..."
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.
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 [*]")
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
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