Ich bin ein Funke auf Garn Cluster mit Pyspark. Ich habe ein Dataset, das das Laden mehrerer Binärdateien pro Schlüssel und das Ausführen einiger Berechnungen erfordert, die schwer in Teile zu zerlegen sind. Daher muss es im Allgemeinen über alle Daten für einen einzelnen Schlüssel arbeiten.Spark + Garn - Skala Speicher mit Eingangsgröße
Momentan setze ich spark.executor.memory und spark.yarn.executor.memoryOverhead auf "gesunde" Werte, die die meiste Zeit arbeiten, aber bestimmte Schlüssel am Ende haben eine viel größere Menge an Daten als der Durchschnitt, und In diesen Fällen reicht der Speicher nicht aus und der Executor wird getötet.
ich momentan tut Sie eine der folgenden: 1) Führen Sie Aufträge mit der Standardspeichereinstellung und erneut ausführen, nur, wenn bestimmte Tasten mit mehr Speichern nicht 2) Wenn ich weiß, eine meines Schlüssel hat viel mehr Daten, kann ich maßstab Speicher für den Job als Ganzes, aber dies hat den Nachteil, dass die Anzahl laufender Container, die ich bekomme/die Anzahl der Jobs, die parallel laufen, drastisch reduziert wird.
Idealerweise hätte ich ein System, bei dem ich einen Job abschicken könnte und den Speicher in einer Executor-Skala mit Eingabegröße hätte, aber ich weiß, das ist kein Funkenmodell. Gibt es irgendwelche zusätzlichen Einstellungen, die mir hier helfen können oder irgendwelche Tricks, um mit diesem Problem umzugehen? Alles offensichtliche, was ich als Fix fehlt?
Das funktioniert zwar, aber es ist immer noch halb flockig auf lange laufende Jobs und einen Teil der Zeit habe ich immer noch mit vollem Job-Fehler (auch mit einem sehr hohen maxFailures [> 30-50]). Aber immer noch viel besser als vorher. Vielen Dank – user2721897