spark-submit
permet de configurer les variables d'environnement exécuteur avec --conf spark.executorEnv.FOO=bar
, et le Spark REST permet de passer certaines variables d'environnement avec le champ environmentVariables
. Malheureusement, je n'ai rien trouvé de semblable à configurer la variable d'environnement du pilote lors de la soumission du pilote avec spark-submit
en mode cluster:
spark-submit --deploy-mode cluster myapp.jar
Est-il possible de définir les variables d'environnement du pilote avec spark-submit
en mode cluster?
Sur YARN au moins, cela fonctionne:
spark-submit --deploy-mode cluster --conf spark.yarn.appMasterEnv.FOO=bar myapp.jar
Il est mentionné dans http://spark.Apache.org/docs/latest/configuration.html#environment-variables que:
Remarque: lors de l'exécution de Spark sur YARN en mode
cluster
, les variables d'environnement doivent être définies à l'aide despark.yarn.appMasterEnv.[EnvironmentVariableName]
propriété dans votreconf/spark-defaults.conf
fichier.
J'ai testé qu'il peut être passé avec --conf
drapeau pour spark-submit
, afin que vous n'ayez pas à modifier les fichiers de configuration globaux.
Sur Yarn en mode cluster, cela a fonctionné en ajoutant les variables d'environnement dans la commande spark-submit en utilisant --conf comme ci-dessous-
spark-submit --master yarn-cluster --num-executors 15 --executor-memory 52g --executor-cores 7 --driver-memory 52g --conf "spark.yarn.appMasterEnv.FOO =/Path/foo "--conf" spark.executorEnv.FOO2 =/path/foo2 "app.jar
Vous pouvez également le faire en les ajoutant dans le fichier conf/spark-defaults.conf.
Vous pouvez utiliser la classification ci-dessous pour configurer les variables d'environnement sur l'exécuteur et le nœud maître:
[
{
"Classification": "yarn-env",
"Properties": {},
"Configurations": [
{
"Classification": "export",
"Properties": {
"VARIABLE_NAME": VARIABLE_VALUE,
}
}
]
}
]
Si vous venez de définir spark.yarn.appMasterEnv.FOO = "foo"
, alors la variable env ne sera pas présente sur les instances d'exécuteur.
Avez-vous testé avec
--conf spark.driver.FOO="bar"
puis obtenir de la valeur avec
spark.conf.get("spark.driver.FOO")
Oui, c'est possible. Quelles sont les variables dont vous avez besoin que vous puissiez publier dans spark-submit comme vous le faites?
spark-submit --deploy-mode cluster myapp.jar
Prenez des variables de http://spark.Apache.org/docs/latest/configuration.html et dépend de votre optimisation, utilisez-les. Cela lien pourrait également être utile.
J'avais l'habitude d'utiliser en mode cluster mais maintenant j'utilise dans YARN donc mes variables sont les suivantes: (j'espère utile)
hastimal@nm:/usr/local/spark$ ./bin/spark-submit --class com.hastimal.Processing --master yarn-cluster --num-executors 15 --executor-memory 52g --executor-cores 7 --driver-memory 52g --driver-cores 7 --conf spark.default.parallelism=105 --conf spark.driver.maxResultSize=4g --conf spark.network.timeout=300 --conf spark.yarn.executor.memoryOverhead=4608 --conf spark.yarn.driver.memoryOverhead=4608 --conf spark.akka.frameSize=1200 --conf spark.io.compression.codec=lz4 --conf spark.rdd.compress=true --conf spark.broadcast.compress=true --conf spark.shuffle.spill.compress=true --conf spark.shuffle.compress=true --conf spark.shuffle.manager=sort /users/hastimal/Processing.jar Main_Class /inputRDF/rdf_data_all.nt /output /users/hastimal/ /users/hastimal/query.txt index 2
En cela, mon pot suivant est des arguments de classe.
cc /inputData/data_all.txt/output/users/hastimal//users/hastimal/query.txt index 2