web-dev-qa-db-fra.com

Pyspark: Exception: le processus de passerelle Java s'est terminé avant d'envoyer son numéro de port au pilote

J'essaie d'exécuter pyspark sur mon MacBook Air. Quand j'essaye de le démarrer, j'obtiens l'erreur:

Exception: Java gateway process exited before sending the driver its port number

lorsque sc = SparkContext () est appelé au démarrage. J'ai essayé d'exécuter les commandes suivantes:

./bin/pyspark
./bin/spark-Shell
export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-Shell"

sans résultat. J'ai aussi regardé ici:

Spark + Python - le processus de passerelle Java est terminé avant d'envoyer au pilote son numéro de port

mais la question n'a jamais été répondu. S'il vous plaît aider! Merci.

32
mt88

cela devrait vous aider

Une solution consiste à ajouter pyspark-Shell à la variable d’environnement Shell PYSPARK_SUBMIT_ARGS:

export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-Shell"

Il y a un changement dans python/pyspark/Java_gateway.py, qui nécessite PYSPARK_SUBMIT_ARGS inclut pyspark-Shell si une variable PYSPARK_SUBMIT_ARGS est définie par l'utilisateur.

18
Anup Ash

Une des raisons possibles est que Java_HOME n'est pas défini car Java n'est pas installé.

J'ai rencontré le même problème. Ça dit 

Exception in thread "main" Java.lang.UnsupportedClassVersionError: org/Apache/spark/launcher/Main : Unsupported major.minor version 51.0
    at Java.lang.ClassLoader.defineClass1(Native Method)
    at Java.lang.ClassLoader.defineClass(ClassLoader.Java:643)
    at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
    at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:277)
    at Java.net.URLClassLoader.access$000(URLClassLoader.Java:73)
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:212)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:205)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:323)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:296)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:268)
    at Sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.Java:406)
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/spark/python/pyspark/conf.py", line 104, in __init__
    SparkContext._ensure_initialized()
  File "/opt/spark/python/pyspark/context.py", line 243, in _ensure_initialized
    SparkContext._gateway = gateway or launch_gateway()
  File "/opt/spark/python/pyspark/Java_gateway.py", line 94, in launch_gateway
    raise Exception("Java gateway process exited before sending the driver its port number")
Exception: Java gateway process exited before sending the driver its port number

à sc = pyspark.SparkConf(). Je l'ai résolu en courant

Sudo add-apt-repository ppa:webupd8team/Java
Sudo apt-get update
Sudo apt-get install Oracle-Java8-installer

qui provient de https://www.digitalocean.com/community/tutorials/how-to-install-Java-with-apt-get-on-ubuntu-16-04

17
Old Panda

Avait le même problème avec mon ordinateur portable iphython (IPython 3.2.1) sur Linux (Ubuntu).

Ce qui manquait dans mon cas était de définir l'URL principale dans l'environnement $ PYSPARK_SUBMIT_ARGS comme ceci (en supposant que vous utilisiez bash): 

export PYSPARK_SUBMIT_ARGS="--master spark://<Host>:<port>"

par exemple.

export PYSPARK_SUBMIT_ARGS="--master spark://192.168.2.40:7077"

Vous pouvez mettre cela dans votre fichier .bashrc. Vous obtenez l'URL correcte dans le journal du maître des étincelles (l'emplacement de ce journal est signalé lorsque vous démarrez le maître avec /sbin/start_master.sh).

4
quax

Si ce message d'erreur exécutait pyspark sur Ubuntu, supprimez-le en installant le paquetage openjdk-8-jdk

from pyspark import SparkConf, SparkContext
sc = SparkContext(conf=SparkConf().setAppName("MyApp").setMaster("local"))
^^^ error

Installez Open JDK 8:

apt-get install openjdk-8-jdk-headless -qq    
1
user2314737

Après avoir passé des heures et des heures à essayer de nombreuses solutions différentes, je peux confirmer que Java 10 SDK est à l'origine de cette erreur. Sur Mac, accédez à/Library/Java/JavaVirtualMachines, puis exécutez cette commande pour désinstaller complètement Java JDK 10:

Sudo rm -rf jdk-10.jdk/

Après cela, téléchargez JDK 8, le problème sera résolu.

1
Kiem Nguyen

Dans mon cas, cette erreur est arrivée pour le script qui fonctionnait bien auparavant. J'ai donc compris que cela pouvait être dû à ma mise à jour Java. Avant, j'utilisais Java 1.8 mais j'avais accidentellement mis à jour Java 1.9. Lorsque je suis revenu à Java 1.8, l'erreur a disparu et tout fonctionne correctement. Pour ceux qui obtiennent cette erreur pour la même raison mais ne savent pas comment revenir à une version plus ancienne de Java sur ubuntu: Run

Sudo update-alternatives --config Java 

et faire le choix de la version Java

1
Pankaj Kumar

J'ai le même Exception: Java gateway process exited before sending the driver its port number dans Cloudera VM en essayant de démarrer IPython avec le support CSV avec une erreur de syntaxe:

PYSPARK_DRIVER_PYTHON=ipython pyspark --packages com.databricks:spark-csv_2.10.1.4.0

va jeter l'erreur, tandis que:

PYSPARK_DRIVER_PYTHON=ipython pyspark --packages com.databricks:spark-csv_2.10:1.4.0

ne sera pas.

La différence réside dans le dernier colon du dernier exemple (de travail), en séparant le numéro de version Scala du numéro de version package.

1
Pim Schaaf

J'ai la même erreur en exécutant pyspark dans pycharm . J'ai résolu le problème en ajoutant Java_HOME dans les variables d'environnement de pycharm.

1
Joon

Même problème, après l’installation de Java en utilisant les lignes ci-dessous, le problème était résolu!

Sudo add-apt-repository ppa:webupd8team/Java
Sudo apt-get update
Sudo apt-get install Oracle-Java8-installer
1
Coral

J'ai compris le problème dans le système Windows. Le répertoire d'installation pour Java ne doit pas comporter d'espaces vides dans le chemin d'accès, comme dans C:\Program Files J'ai réinstallé Java dans C\Java. J'ai mis Java_HOME à C:\Java et le problème a disparu.

1
Sujan Mukherjee

Ceci est un vieux fil de discussion mais j'ajoute ma solution pour ceux qui utilisent mac.

Le problème était avec le Java_HOME. Vous devez l'inclure dans votre .bash_profile.

Vérifiez votre Java -version. Si vous avez téléchargé la dernière version de Java, mais que la version la plus récente ne s'affiche pas, vous savez que le chemin est incorrect. Normalement, le chemin par défaut est export Java_HOME= /usr/bin/Java

Alors essayez de changer le chemin en: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/Java

Sinon, vous pouvez également télécharger le dernier JDK . https://www.Oracle.com/technetwork/Java/javase/downloads/index.html et cela remplacera automatiquement usr/bin/Java par la dernière version. Vous pouvez le confirmer en répétant Java -version.

Alors ça devrait marcher.

0
noiivice

J'ai eu la même exception: installer Java jdk a fonctionné pour moi.

0
Julen Rebollo

Pour moi, la réponse a été d'ajouter deux "racines de contenu" dans "Fichier" -> "Structure du projet" -> "Modules" (dans IntelliJ):

  1. YourPath\spark-2.2.1-bin-hadoop2.7\python
  2. YourPath\spark-2.2.1-bin-hadoop2.7\python\lib\py4j-0.10.4-src.Zip
0
Yuuura87

Travaillé heures sur cela. Mon problème était avec l'installation de Java 10. Je l'ai désinstallé et installé Java 8, et maintenant Pyspark fonctionne.

0
Amin Ghaderi

Assurez-vous que votre répertoire Java (figurant dans votre chemin) ET votre interprète Python résident dans des répertoires ne contenant aucun espace. Ce sont la cause de mon problème.

0
Steven

J'ai eu cette erreur parce que mon espace disque était insuffisant.

0
Josh Terrell

J'ai la même erreur.

Mes procédures de dépannage sont les suivantes:

  1. Découvrez le code source Spark.
  2. Suivez le message d'erreur. Dans mon cas: pyspark/Java_gateway.py, ligne 93, dans launch_gateway.
  3. Vérifiez la logique du code pour trouver la cause du problème, puis résolvez-la.

Dans mon cas, le problème est que PySpark n’a pas l’autorisation de créer un répertoire temporaire. Je viens donc d’exécuter mon IDE avec Sudo.

0
J.Bo