web-dev-qa-db-fra.com

Comment spécifier quelle version de Java utiliser dans la commande spark-submit?

Je souhaite exécuter une application spark streaming sur un cluster de fils sur un serveur distant. La version Java par défaut est 1.7, mais je souhaite utiliser la version 1.8 pour mon application, également présente sur le serveur, mais qui n'est pas la version par défaut. Y a-t-il un moyen de spécifier via spark-submit l'emplacement de Java 1.8 afin que je ne reçoive pas d'erreur major.minor?

7
Priyanka

Java_HOME ne suffisait pas dans notre cas, le pilote fonctionnait sous Java 8, mais j'ai découvert par la suite que les travailleurs Spark dans YARN avaient été lancés à l'aide de Java 7 (les deux versions de Java ont été installées dans les nœuds Hadoop).

Je devais ajouter spark.executorEnv.Java_HOME=/usr/Java/<version available in workers> dans spark-defaults.conf. Notez que vous pouvez le fournir en ligne de commande avec --conf.

Voir http://spark.Apache.org/docs/latest/configuration.html#runtime-environment

11
mathieu

Bien que vous puissiez forcer le code du pilote à s'exécuter sur une version Java particulière (export Java_HOME=/path/to/jre/ && spark-submit ... ), Les travailleurs l'exécuteront avec la version Java par défaut à partir de la variable PATH de l'utilisateur de fil depuis l'ordinateur de l'utilisateur.

Ce que vous pouvez faire est de configurer chaque instance Spark pour utiliser un Java_HOME particulier en modifiant les fichiers spark-env.sh ( documentation ).

3
Radu

Ajoutez Java_HOME de votre choix dans spark-env.sh (Sudo find -name spark-env.sh ... ej.: /Etc/spark2/conf.cloudera.spark2_on_yarn/spark-env.sh) 

1
Carlos Gomez

Si vous souhaitez définir un environnement Java pour une étincelle sur fil, vous pouvez le définir avant que l'étincelle soit soumise.

--conf spark.yarn.appMasterEnv.Java_HOME=/usr/Java/jdk1.8.0_121 \
0
Masterbuilder