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
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