webentwicklung-frage-antwort-db.com.de

SparkContext-Fehler - Datei nicht gefunden/tmp/spark-events ist nicht vorhanden

Ausführen einer Python Spark-Anwendung über den API-Aufruf - Beim Übermitteln der Anwendungsantwort: Failed SSH an den Worker

Meine Python-Anwendung existiert in 

/root/spark/work/driver-id/wordcount.py

Fehler kann in gefunden werden 

/root/spark/work/driver-id/stderr

Zeige den folgenden Fehler - 

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)

Gibt an, dass -/tmp/spark-events nicht vorhanden ist - was wahr ist Allerdings in 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 ist der Ort, an dem Spark die Ereignisprotokolle speichert. Erstellen Sie einfach dieses Verzeichnis auf dem Master-Rechner und Sie sind fertig.

$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

Beim Versuch, meinen Spark-Verlaufsserver auf meinem lokalen Computer einzurichten, hatte ich die gleiche Datei "Datei:/tmp/spark-events ist nicht vorhanden". Error. Ich hatte mein Protokollverzeichnis an einen nicht standardmäßigen Pfad angepasst. Um dieses Problem zu lösen, musste ich zwei Dinge tun. 

  1. bearbeiten Sie $ SPARK_HOME/conf/spark-defaults.conf -- fügen Sie diese beiden Zeilen hinzu spark.history.fs.logDirectory /mycustomdir spark.eventLog.enabled true
  2. erstellen Sie einen Link von/tmp/spark-events zu/mycustomdir.
    ln -fs /tmp/spark-events /mycustomdir Idealerweise hätte Schritt 1 mein Problem vollständig gelöst, aber ich musste immer noch den Link erstellen. Nachdem ich dies getan hatte, konnte ich meinen Historyserver laufen lassen und neue Jobs in meinem Webui protokollieren.
7
dman

Verwenden Sie spark.eventLog.dir für das Client-/Treiberprogramm

spark.eventLog.dir=/usr/local/spark/history

und verwenden Sie spark.history.fs.logDirectory für den History-Server

spark.history.fs.logDirectory=/usr/local/spark/history

wie erwähnt in: So aktivieren Sie den Spark-History-Server für den Standalone-Cluster-Nicht-HDFS-Modus

Mindestens gemäß Spark-Version 2.2.1

1
tvee

Ich habe gerade /tmp/spark-events auf dem {master} -Knoten erstellt und dann an andere Knoten im Cluster verteilt, um zu funktionieren.

mkdir /tmp/spark-events
rsync -a /tmp/spark-events {slaves}:/tmp/spark-events

meine spark-default.conf:

spark.history.ui.port=18080
spark.eventLog.enabled=true
spark.history.fs.logDirectory=hdfs:///home/elon/spark/events
0
Elon