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()
/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
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.
spark.history.fs.logDirectory /mycustomdir
spark.eventLog.enabled true
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.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
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