2017-09-01 1 views
1

Contexte: La configuration du cluster est la suivante:Puis-je exécuter un bloc-notes pyspark jupyter en mode Déploiement en cluster?

  • Tout est en cours d'exécution withing fichiers docker.
  • node1: étincelle maître
  • node2: hub jupyter (où je passe mes ordinateurs portables, ainsi)
  • node3-7: nœuds de travailleurs d'allumage
  • Je peux telnet et ping de mes nœuds de travailleurs à node2 et vice versa en utilisant les ports par défaut pour étincelle

problème: Je suis en train de créer une session d'allumage dans le carnet de pyspark de jupyter qui fonctionne en mode de déploiement du cluster. J'essaye d'obtenir que le conducteur fonctionne sur un noeud qui n'est pas le noeud où le cahier de jupyter est exécuté. Actuellement, je peux exécuter des tâches sur le cluster, mais uniquement avec le pilote s'exécutant sur node2. Après avoir creusé beaucoup, j'ai trouvé ce stackoverflow post qui prétend que si vous exécutez un shell interactif avec spark, vous ne pouvez le faire qu'en mode de déploiement local (où le pilote se trouve sur la machine sur laquelle vous travaillez). Ce message continue à dire que quelque chose comme hub de jupyter en conséquence ne fonctionnera pas en mode de déploiement de cluster, mais je suis incapable de trouver toute la documentation qui peut le confirmer. Quelqu'un peut-il confirmer si jupyter hub peut fonctionner en mode cluster?

Ma tentative en cours d'exécution de la session d'allumage en mode déployé en cluster:

from pyspark.sql import SparkSession 

spark = SparkSession.builder\ 
.enableHiveSupport()\ 
.config("spark.local.ip",<node 3 ip>)\ 
.config("spark.driver.host",<node 3 ip>)\ 
.config('spark.submit.deployMode','cluster')\ 
.getOrCreate() 

Erreur:

/usr/spark/python/pyspark/sql/session.py in getOrCreate(self) 
    167      for key, value in self._options.items(): 
    168       sparkConf.set(key, value) 
--> 169      sc = SparkContext.getOrCreate(sparkConf) 
    170      # This SparkContext may be an existing one. 
    171      for key, value in self._options.items(): 

/usr/spark/python/pyspark/context.py in getOrCreate(cls, conf) 
    308   with SparkContext._lock: 
    309    if SparkContext._active_spark_context is None: 
--> 310     SparkContext(conf=conf or SparkConf()) 
    311    return SparkContext._active_spark_context 
    312 

/usr/spark/python/pyspark/context.py in __init__(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, gateway, jsc, profiler_cls) 
    113   """ 
    114   self._callsite = first_spark_call() or CallSite(None, None, None) 
--> 115   SparkContext._ensure_initialized(self, gateway=gateway, conf=conf) 
    116   try: 
    117    self._do_init(master, appName, sparkHome, pyFiles, environment, batchSize, serializer, 

/usr/spark/python/pyspark/context.py in _ensure_initialized(cls, instance, gateway, conf) 
    257   with SparkContext._lock: 
    258    if not SparkContext._gateway: 
--> 259     SparkContext._gateway = gateway or launch_gateway(conf) 
    260     SparkContext._jvm = SparkContext._gateway.jvm 
    261 

/usr/spark/python/pyspark/java_gateway.py in launch_gateway(conf) 
    93     callback_socket.close() 
    94   if gateway_port is None: 
---> 95    raise Exception("Java gateway process exited before  sending the driver its port number") 
    96 
    97   # In Windows, ensure the Java child processes do not linger after Python has exited. 

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

Répondre

0

You cannot use cluster mode with PySpark at all:

Currently, standalone mode does not support cluster mode for Python applications.

+0

Je voulais juste souligner que cela est vrai pour le mode autonome (comme dans l'original question). Si vous utilisez un autre gestionnaire de cluster (tel que Yarn), vous pouvez soumettre des travaux en mode cluster avec PySpark. – pacha

0

Je ne suis pas un expert en PySpark, mais avez-vous essayé de changer le fichier kernel.json de pyspark jupyter kernel?

Peut-être que vous pouvez ajouter le cluster deploy option de mode en elle

"env": { 
    "SPARK_HOME": "/your_dir/spark", 
    "PYTHONPATH": "/your_dir/spark/python:/your_dir/spark/python/lib/py4j-0.9-src.zip", 
    "PYTHONSTARTUP": "/your_dir/spark/python/pyspark/shell.py", 
    "PYSPARK_SUBMIT_ARGS": "--master local[*] pyspark-shell" 
} 

Et vous changer cette ligne:

"PYSPARK_SUBMIT_ARGS": "--master local[*] pyspark-shell" 

avec votre ip maître du cluster et groupe --deploy mode

Je ne suis pas sûr que cela changera quoi que ce soit, mais peut-être que cela fonctionne, et j'aimerais le savoir aussi!

Bonne chance

EDIT: Je trouve cela peut-être qui peut aider yuo même si elle est de 2015

link jupyter pyspark cluster