web-dev-qa-db-fra.com

Erreur SparkContext - Le fichier est introuvable/tmp/spark-events n'existe pas

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()
12
Chaitanya Bapat

/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
20
Kien Truong

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. 

  1. edit $ SPARK_HOME/conf/spark-defaults.conf -- ajoute ces 2 lignes spark.history.fs.logDirectory /mycustomdir spark.eventLog.enabled true
  2. créez un lien entre/tmp/spark-events et/mycustomdir.
    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.
7
dman

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

1
tvee

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