Ich habe Probleme mit einem einfachen Spark Job von mir, der nach der Vereinfachung so aussieht.Kann eine spekulative Aufgabe kurz ausgeführt werden, nachdem ein Spark-Job zurückgegeben wurde?
JavaRDD<ObjectNode> rdd = pullAndProcessData();
ManifestFilesystem fs = getOutputFS();
List<WriteObjectResult> writeObjectResults = rdd.mapPartitions(fs::write).collect();
fs.writeManifest(Manifest.makeManifest(writeObjectResults));
mit diesem Code Meine Erwartung ist, dass alles, was geschieht, writeManifest
genannt werden wird, wenn und nur wenn alle Aufgaben fertig sind und ihre Partition S3 erfolgreich geschrieben haben. Das Problem ist, dass anscheinend einige Aufgaben nach dem Manifest in S3 schreiben, was niemals passieren sollte.
In ManifestFilesystem.write
, lösche ich die vorhandene Manifest (wenn es einen gibt) es ungültig zu machen, weil der normale Arbeitsablauf sein sollte:
- schreiben alle Partitionen bis S3
- das Manifest zu S3 schreiben
ich zu ahnen es wegen spekuliert Aufgaben passieren könnte, in dem folgende Szenario:
- einige Aufgaben sind speculatable markiert und erneut senden, um andere Sklaven
- alle spekulierten Aufgaben Rendite mindestens einen Slave sie gesendet wurden, aber einige von ihnen halten auf langsamen Sklaven
- Funken laufen nicht über die Aufgaben unterbrechen oder gibt das Ergebnis von
collect
dem Fahrer, bevor die Aufgaben - die spekulierten Aufgaben unterbrochen werden, die immer noch das Manifest schließlich ausführen
ManifestTimeslice.write
und löschen ausgeführt wurden, bevor sie ihre Partition zu schreiben
Ist das etwas, das passieren kann? Hat jemand eine andere Hypothese für ein solches Verhalten?
Hinweis: mit integrierten Daten Publishing Methoden ist keine Option
Anmerkung 2: Ich fand this die meine Intuition zu bestätigen neigt, aber es wäre immer noch groß sein, um eine Bestätigung zu haben, weil Ich verwende keine Standard-HDFS- oder S3-Lese-/Schreibmethoden aus Gründen, die außerhalb des Bereichs dieser Frage liegen.
Hallo, können Sie bitte posten Sie Ihren vollständigen Code und Protokolle einen tiefen Tauchgang zu nehmen? –
Hallo Praveen, danke für den Vorschlag, aber ich werde in dieser Frage nicht so weit gehen. Ich habe meinen eigenen tiefen Tauchgang in den Logs gemacht und so kam ich auf diese Hypothese. Ich konnte einfach nicht beweisen, dass es die Hauptursache war, und ich wollte überprüfen, ob es eine vernünftige Erklärung war. Es ist das erste Mal, dass ich auf diese Art von Interaktionen zwischen Nebenaufgaben und spekulativen Aufgaben stoße. – Dici