Der Start des Apache Spark YARN-Modus dauert zu lange (10+ Sekunden)

9

Ich führe eine Spark-Anwendung mit dem YARN-Client- oder YARN-Cluster-Modus aus.

Aber es scheint zu lange zu brauchen, um zu starten.

Es dauert 10+ Sekunden, um den Funkenkontext zu initialisieren.

Ist das normal? Oder kann es optimiert werden?

Die Umgebung ist wie folgt:

  • Hadoop: Hortonworks HDP 2.2 (Hadoop 2.6) (Kleiner Testcluster mit 3 Datenknoten)
  • Spark: 1.3.1
  • Client: Windows 7, aber ähnliches Ergebnis auf CentOS 6.6

Der folgende Abschnitt ist der Startabschnitt des Anwendungsprotokolls. (Einige private Informationen wurden bearbeitet)

'Main: Initializing context' in der ersten Zeile und 'MainProcessor: Löschen vorheriger Ausgabedateien' in der letzten Zeile sind die Protokolle der Anwendung. Andere dazwischen sind von Spark selbst. Anwendungslogik wird ausgeführt, nachdem dieses Protokoll angezeigt wird.

%Vor%

Danke.

AKTUALISIEREN

Ich denke, ich habe den (vielleicht teilweise, aber wichtigen) Grund gefunden.

Es liegt zwischen den folgenden Zeilen:

%Vor%

Wenn ich die Protokolle auf der Cluster-Seite lese, wurden die folgenden Zeilen gefunden: (Die genaue Zeit unterscheidet sich von der obigen Zeile, aber es ist der Unterschied zwischen den Maschinen)

%Vor%

Es scheint, dass Spark absichtlich 5 Sekunden schläft.

Ich habe den Spark-Quellcode gelesen, und in org.apache.spark.deploy.yarn.ApplicationMaster.scala hatte launchReporterThread () den Code dafür. Es ruft den allocator.allocateResources () und Thread.sleep () auf. Für den Schlaf liest es die Konfigurationsvariable spark.yarn.scheduler.heartbeat.interval-ms (der Standardwert ist 5000, was 5 Sekunden ist). Laut dem Kommentar "wollen wir vernünftig reagieren, ohne zu viele Anfragen an RM zu senden". Wenn also YARN die Zuteilungsanforderung nicht sofort erfüllt, werden 5 Sekunden verschwendet.

Wenn ich die Konfigurationsvariable auf 1000 änderte, wurde nur 1 Sekunde gewartet.

Hier sind die Protokollzeilen nach der Änderung:

%Vor%

4 Sekunden gespeichert.

Wenn man also nicht 5 Sekunden warten möchte, kann man die spark.yarn.scheduler.heartbeat.interval-ms ändern.

Ich hoffe, dass der zusätzliche Aufwand, den es verursacht, vernachlässigbar wäre.

AKTUALISIEREN

Ein verwandtes JIRA-Problem wurde geöffnet und behoben. Siehe Ссылка

    
zeodtr 07.05.2015, 01:07
quelle

3 Antworten

0

Das ist ziemlich typisch. Mein System benötigt etwa 20 Sekunden von der Ausführung der Spark-Submission bis zum Erhalt eines SparkContext.

Wie es in den Dokumenten an einigen Stellen heißt, besteht die Lösung darin, Ihren Treiber in einen RPC-Server zu verwandeln. Auf diese Weise initialisieren Sie einmal und andere Anwendungen können dann den Kontext des Treibers als Dienst verwenden.

Ich mache das gerade mit meiner Bewerbung. Ich benutze http4s und verwandle meinen Treiber in einen Webserver.

    
David Griffin 07.05.2015, 11:16
quelle
1

Sie können Apache Livy überprüfen, das eine REST API vor Spark ist.

Sie könnten eine Sitzung und mehrere Anfragen an diese Spark / Livy-Sitzung.

    
Tagar 25.05.2017 22:35
quelle
0

Wenn Sie Mac OS verwenden, um einige Aufgaben im eigenständigen Modus auszuführen,

Denken Sie daran, remote ssh connection in Ihrem system preference -> sharing zu aktivieren (ich weiß nicht, warum wir das tun sollten)

Vor der Aktivierung dauert es ca. 1 Minute, um spark-submit xx.py

auszuführen

Nach der Aktivierung dauert es nur 3 Sekunden, um es auszuführen.

Ich hoffe, es kann anderen helfen, Probleme auf der Mac OS-Plattform zu haben.

    
poc.hsu 23.11.2015 03:23
quelle

Tags und Links