web-dev-qa-db-fra.com

Comment passer des variables d'environnement à spark en mode cluster avec spark-submit

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?

12
Gaëtan Lehmann

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 de spark.yarn.appMasterEnv.[EnvironmentVariableName] propriété dans votre conf/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.

12
Arvidaa

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.

3
Jyoti Gupta

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.

3
Sanchay

Avez-vous testé avec

--conf spark.driver.FOO="bar"

puis obtenir de la valeur avec

spark.conf.get("spark.driver.FOO")
0
Rolintocour

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

0
ChikuMiku