2014-10-28 2 views
5

Ich verstehe, wie Arbeiterknoten fehlertolerant sind, aber was passiert, wenn Ihr Treiberprogramm aus einem unerwarteten Grund abstürzt? (Stromausfall/Speicherproblem usw.).Was passiert, wenn das Treiberprogramm abstürzt?

Ich könnte mir vorstellen, dass Sie alle Arbeit verlieren werden, da der Code, der die Ergebnisse liest, nicht mehr läuft, oder weiß Spark irgendwie, wie man es neu startet? Wenn das so ist, wie?

+3

Abhängig davon, wie Sie Ihren Treiber ausführen. Z. B., wenn Sie im Garn-Cluster-Modus laufen, wird Garn Ihren Fahrer erneut versuchen. Dies bedeutet jedoch, dass Sie alle Ihre Jobs erneut ausführen müssen. – zsxwing

+0

Danke. Also muss ich es so entwerfen, dass der Treiber den Fortschritt von Teilberechnungen irgendwo speichert, und die "Phase" der Berechnung in irgendeinem Protokoll aktualisiert, und die Fehlertoleranz intern behandelt, denke ich –

+0

Richtig. Sie müssen den Treiber selbst wiederherstellen. – zsxwing

Antwort

4

Wie @zsxwing darauf hinweist, hängt davon ab, wie Sie Ihren Treiber ausführen. Zusätzlich zum Ausführen in Garn können Sie Ihren Job auch mit einem Bereitstellungsmodus des Clusters ausführen (dies ist ein Parameter, der an Spark übergeben wird). In Spark Streaming geben Sie an - supervise und Spark wird den Job für Sie neu starten. Die Details sind in der Spark Streaming Guide.

+0

Ist bei Verwendung von --supervise ein Checkpoint erforderlich? – okwap

2

Ja, Sie können Funkenanwendungen neu starten. Es gibt einige Optionen, die spezifisch für den Cluster-Manager sind, der verwendet wird. Bei einem Spark-Standalone-Cluster mit Cluster-Bereitstellungsmodus können Sie beispielsweise auch --supervise angeben, um sicherzustellen, dass der Treiber automatisch neu gestartet wird, wenn er mit einem Beendigungscode ungleich Null fehlschlägt. Aufzuzählen, alle diese Optionen zur Verfügung, um Funken einreichen, führen Sie es mit --help:

Run auf einer Spark-Standalone-Cluster in Cluster-deploy-Modus mit Überwachung

./bin/spark-submit \ 
    --class org.apache.spark.examples.SparkPi \ 
    --master spark://207.184.161.138:7077 \ 
    --deploy-mode cluster \ 
    --supervise \ 
    /path/to/examples.jar \ 
    1000 
0

per Funken Dokumentation: -

Spark Standalone - Ein Spark-Anwendungstreiber kann zur Ausführung innerhalb des Spark Standalone-Clusters (siehe Clusterbereitstellungsmodus) gesendet werden, dh der Anwendungstreiber selbst wird auf einem der Worker-Knoten ausgeführt. Darüber hinaus kann der Standalone-Cluster-Manager angewiesen werden, den Treiber zu überwachen und neu zu starten, wenn der Treiber entweder aufgrund eines Nicht-Null-Beendigungscodes oder aufgrund eines Fehlers des Knotens, auf dem der Treiber ausgeführt wird, fehlschlägt. Weitere Informationen finden Sie im Cluster-Modus und im Spark Standalone-Handbuch.

So wird --supervise nur mit Standalone-Cluster-Modus arbeiten, wenn Ihre Anwendung in dem Yarn Cluster-Modus abgegeben wird, dann wird Garn Neustart von Treiber handhaben wie in mapreduce.am.max-Versuchen Eigenschaft konfigurierte in mapred Ort .xml, also sollte Ihr Code so sein, dass er das Ausgabeverzeichnis entfernt und von Grund auf neu startet, sonst wird mit dem Fehler des Ausgabeverzeichnisses gescheitert.