2016-06-22 3 views
2

Ich habe eine Spark-Streaming-Anwendung, die Daten von Kafka über das Netzwerk liest. Es ist wichtig zu beachten, dass sich der Cluster und die Kafka-Server in verschiedenen Regionen befinden.Spark-Streaming von Kafka eine Aufgabe hinterherhinken verursacht die gesamte Charge zu verlangsamen

Die durchschnittliche Zeit für die Ausführung eines Jobs beträgt etwa 8-10 Minuten (ich arbeite in 10-Minuten-Intervallen). In bestimmten Chargen schießt die Job-Vollzeit jedoch in die Höhe. Die Menge, in der es aufspringt, ist im Allgemeinen zufällig (könnte 20 Minuten oder 50 Minuten oder eine Stunde sein). Beim Graben habe ich festgestellt, dass alle Aufgaben pünktlich abgeschlossen sind, mit Ausnahme einer, aufgrund derer die gesamte Bearbeitungszeit beeinträchtigt wird. Zum Beispiel ist hier die Aufgabe Zeitprotokoll von einem solchen Fall:

Tasks

In diesem Fall Aufgabe 6 getroffen hat, 54 Minuten, während die anderen sehr schnell beendet haben, obwohl der Eingang Split gleich ist. Ich habe dies zu Netzwerkproblemen (langsam/verstopft) erklärt und bin der Meinung, dass ein Neustart dieser Aufgabe viel Zeit gespart haben könnte.

Ermöglicht Funke eine Kontrolle, durch die wir langsame Aufgaben auf einem anderen Knoten neu starten und dann die Ergebnisse für die Aufgabe verwenden können, die zuerst abgeschlossen wurde? Oder gibt es eine bessere Lösung für dieses Problem, die mir nicht bewusst ist?

+0

Wenn Ihre App mehrere Jobs enthält, kann die Konfiguration hilfreich sein: spark.streaming.concurrentJobs – bistaumanga

+0

@bistaumanga Mit mehreren Jobs meinen Sie? Es ist eine Streaming-Anwendung. Für jede Iteration werden ein paar Map-Reduzierungen ausgeführt. – Sohaib

+0

Ich meine, mehrere Dinge in einer Anwendung zu tun, wie die Anzahl der Ereignisse zu zählen, nach einer Gruppe zu zählen, den Durchschnitt einiger Schlüssel zu berechnen ... mehrere Aktionen zu haben – bistaumanga

Antwort

1

würde ich einen Blick auf die Konfigurationsparameter spark.speculation.* haben auf jeden Fall und setzen sie auf viel aggressivere zum Beispiel würde ich denken, ziemlich angemessen sein, diese Parameter in Ihrem Fall zu sein:

  • spark.speculation = true
  • spark.speculation.interval = 1min (Wie oft Funken für Aufgaben überprüfen werden zu spekulieren.)
  • spark.speculation.multiplier = 1.1 (Wie oft langsamer eine Aufgabe ist, als der Median für Spekulation betrachtet werden.)
  • spark.speculation.quantile = 0.5 (Prozentsatz der Aufgaben, die abgeschlossen sein müssen, bevor die Spekulation für eine bestimmte Stufe aktiviert ist.)

Sie können die vollständige Liste der Konfigurationsparameter here finden.

+0

Danke das sieht definitiv interessant aus. Ich werde darüber nachlesen und zurückkommen, wenn es für mich funktioniert! – Sohaib

Verwandte Themen