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?
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
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 ).
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)
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 \