Exécution d'une application Spark Python via un appel d'API - Lors de la soumission de l'application - réponse - Échec SSH dans le travailleur
Mon application python existe dans
/root/spark/work/driver-id/wordcount.py
Une erreur peut être trouvée dans
/root/spark/work/driver-id/stderr
Afficher l'erreur suivante -
Traceback (most recent call last):
File "/root/wordcount.py", line 34, in <module>
main()
File "/root/wordcount.py", line 18, in main
sc = SparkContext(conf=conf)
File "/root/spark/python/lib/pyspark.Zip/pyspark/context.py", line 115, in __init__
File "/root/spark/python/lib/pyspark.Zip/pyspark/context.py", line 172, in _do_init
File "/root/spark/python/lib/pyspark.Zip/pyspark/context.py", line 235, in _initialize_context
File "/root/spark/python/lib/py4j-0.9-src.Zip/py4j/Java_gateway.py", line 1064, in __call__
File "/root/spark/python/lib/py4j-0.9-src.Zip/py4j/protocol.py", line 308, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling None.org.Apache.spark.api.Java.JavaSparkContext.
: Java.io.FileNotFoundException: File file:/tmp/spark-events does not exist.
at org.Apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.Java:402)
at org.Apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.Java:255)
at org.Apache.spark.scheduler.EventLoggingListener.start(EventLoggingListener.scala:100)
at org.Apache.spark.SparkContext.<init>(SparkContext.scala:549)
at org.Apache.spark.api.Java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:526)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.Java:234)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.Java:381)
at py4j.Gateway.invoke(Gateway.Java:214)
at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.Java:79)
at py4j.commands.ConstructorCommand.execute(ConstructorCommand.Java:68)
at py4j.GatewayConnection.run(GatewayConnection.Java:209)
at Java.lang.Thread.run(Thread.Java:745)
Cela indique -/tmp/spark-events n'existe pas - ce qui est vrai Cependant, dans wordcount.py
from pyspark import SparkContext, SparkConf
... few more lines ...
def main():
conf = SparkConf().setAppName("MyApp").setMaster("spark://ec2-54-209-108-127.compute-1.amazonaws.com:7077")
sc = SparkContext(conf=conf)
sc.stop()
if __== "__main__":
main()
/tmp/spark-events
est l'emplacement où Spark stocke les journaux des événements. Il suffit de créer ce répertoire dans la machine principale et vous êtes prêt.
$mkdir /tmp/spark-events
$ Sudo /root/spark-ec2/copy-dir /tmp/spark-events/
RSYNC'ing /tmp/spark-events to slaves...
ec2-54-175-163-32.compute-1.amazonaws.com
Tout en essayant de configurer mon serveur d'historique spark sur mon ordinateur local, j'avais le même message «Fichier: les événements/tmp/spark-n'existe pas». Erreur. J'avais personnalisé mon répertoire de journal sur un chemin autre que celui par défaut. Pour résoudre ce problème, je devais faire 2 choses.
spark.history.fs.logDirectory /mycustomdir
spark.eventLog.enabled true
ln -fs /tmp/spark-events /mycustomdir
Idéalement, l’étape 1 aurait entièrement résolu mon problème, mais j’avais encore besoin de créer le lien; j’imagine qu’un autre paramètre aurait pu me manquer. Quoi qu’il en soit, une fois que j’ai fait cela, j’ai pu exécuter mon serveur d’historique et voir les nouveaux emplois enregistrés dans mon site Web.Utilisez spark.eventLog.dir pour le programme client/pilote
spark.eventLog.dir=/usr/local/spark/history
et utilisez spark.history.fs.logDirectory pour le serveur d'historique
spark.history.fs.logDirectory=/usr/local/spark/history
comme indiqué dans: Comment activer le serveur spark-history pour un mode de cluster autonome non hdfs
Au moins selon la version 2.2.1 de Spark
Je viens de créer /tmp/spark-events
sur le nœud {maître}, puis de le distribuer à d'autres nœuds du cluster pour qu'il fonctionne.
mkdir /tmp/spark-events
rsync -a /tmp/spark-events {slaves}:/tmp/spark-events
mon spark-default.conf:
spark.history.ui.port=18080
spark.eventLog.enabled=true
spark.history.fs.logDirectory=hdfs:///home/elon/spark/events