Welchen Clustertyp soll ich für Spark wählen?

76

Ich bin neu in Apache Spark und habe gerade erfahren, dass Spark drei Arten von Clustern unterstützt:

  • Standalone - das heißt, Spark verwaltet seinen eigenen Cluster
  • YARN - mit dem YARN-Ressourcenmanager von Hadoop
  • Mesos - Apaches dediziertes Ressourcenmanagerprojekt

Da ich neu bei Spark bin, sollte ich zuerst Standalone ausprobieren . Aber ich frage mich, welches das empfohlene ist. Angenommen, ich muss in Zukunft einen großen Cluster (Hunderte von Instanzen) erstellen. Zu welchem ​​Clustertyp soll ich wechseln?

David S.
quelle

Antworten:

74

Ich denke, die besten Antworten sind diejenigen, die an Spark arbeiten. Also, von Learning Spark

Beginnen Sie mit einem eigenständigen Cluster, wenn es sich um eine neue Bereitstellung handelt. Der Standalone-Modus ist am einfachsten einzurichten und bietet fast dieselben Funktionen wie die anderen Cluster-Manager, wenn Sie nur Spark ausführen.

Wenn Sie Spark zusammen mit anderen Anwendungen ausführen oder umfangreichere Ressourcenplanungsfunktionen (z. B. Warteschlangen) verwenden möchten, bieten sowohl YARN als auch Mesos diese Funktionen. Von diesen wird YARN wahrscheinlich in vielen Hadoop-Distributionen vorinstalliert sein.

Ein Vorteil von Mesos gegenüber dem YARN- und dem Standalone-Modus ist die fein abgestimmte Freigabeoption, mit der interaktive Anwendungen wie die Spark-Shell die CPU-Zuordnung zwischen Befehlen verkleinern können. Dies macht es attraktiv in Umgebungen, in denen mehrere Benutzer interaktive Shells ausführen.

In allen Fällen ist es am besten, Spark auf denselben Knoten wie HDFS auszuführen, um einen schnellen Zugriff auf den Speicher zu erhalten. Sie können Mesos oder den eigenständigen Cluster-Manager manuell auf denselben Knoten installieren, oder die meisten Hadoop-Distributionen installieren YARN und HDFS bereits zusammen.

Justin Pihony
quelle
12
"Ein Vorteil von Mesos gegenüber dem YARN- und dem Standalone-Modus ist die feinkörnige Freigabeoption": Die feinkörnige Freigabe wird ab Apache Spark 2.0.0
jgp
Gut geschrieben, nur noch ein Kommentar. Der eigenständige Cluster unterstützt nur den Client-Modus für Python-Anwendungen.
Daisy QL
70

Spark Standalone Manager : Ein einfacher Cluster-Manager, der in Spark enthalten ist und das Einrichten eines Clusters vereinfacht. Standardmäßig verwendet jede Anwendung alle verfügbaren Knoten im Cluster.

Einige Vorteile von YARN gegenüber Standalone & Mesos:

  1. Mit YARN können Sie denselben Pool von Clusterressourcen dynamisch für alle auf YARN ausgeführten Frameworks freigeben und zentral konfigurieren .

  2. Sie können alle Funktionen von YARN- Schedulern zum Kategorisieren, Isolieren und Priorisieren von Workloads nutzen.

  3. Im Spark-Standalone-Modus muss jede Anwendung auf jedem Knoten im Cluster einen Executor ausführen. Bei YARN wählen Sie die Anzahl der zu verwendenden Executoren

  4. YARN kümmert sich bei Ihren Anforderungen direkt um die Rack- und Maschinenlokalität, was praktisch ist.

  5. Das Ressourcenanforderungsmodell ist in Mesos seltsamerweise rückwärts . In YARN fordern Sie (das Framework) Container mit einer bestimmten Spezifikation an und geben Lokalitätspräferenzen an. In Mesos erhalten Sie Ressourcen- "Angebote" und können diese basierend auf Ihrer eigenen Planungsrichtlinie annehmen oder ablehnen. Das Mesos-Modell ist wohl flexibler, aber anscheinend mehr Arbeit für die Person, die das Framework implementiert.

  6. Wenn Sie bereits einen großen Hadoop-Cluster eingerichtet haben, ist YARN die bessere Wahl.

  7. Der Standalone-Manager erfordert, dass der Benutzer jeden der Knoten mit dem gemeinsamen Geheimnis konfiguriert. Das Standardauthentifizierungsmodul von Mesos , Cyrus SASL, kann durch ein benutzerdefiniertes Modul ersetzt werden. YARN bietet Sicherheit für Authentifizierung, Service Level-Autorisierung, Authentifizierung für Webkonsolen und Datenvertraulichkeit. Bei der Hadoop-Authentifizierung wird mithilfe von Kerberos überprüft, ob jeder Benutzer und Dienst von Kerberos authentifiziert wurde.

  8. Alle drei Cluster-Manager bieten Hochverfügbarkeit, aber Hadoop YARN muss keinen separaten ZooKeeper-Failover-Controller ausführen.

Nützliche Links:

Funken- Dokumentationsseite

agildata Artikel

Ravindra Babu
quelle
1
In der Tabelle wird Mesos nicht erwähnt. YARN-Cluster und YARN-Client sind verwirrend.
Flyrain
Die Tabelle ist für Spark Standalone falsch, da sie auch die Modi "Client" und "Cluster" unterstützt: spark.apache.org/docs/latest/spark-standalone.html
Ruslan
Entfernte den Tisch
Ravindra babu
Entfernte mein Minus :-)
Ruslan
"Im Standalone-Modus von Spark muss jede Anwendung auf jedem Knoten im Cluster einen Executor ausführen. Bei YARN wählen Sie die Anzahl der zu verwendenden Executoren." Trifft diese Aussage für Spark 2.0 und höher noch zu? Ich weiß, dass dies vor 1.4 wahr war, aber seitdem habe ich widersprüchliche Berichte gesehen.
Blaisem
9

Standalone ist ziemlich klar, wie andere erwähnt, es sollte nur verwendet werden, wenn Sie nur Funkenarbeitslast haben.

Zwischen Garn und Mesos ist zu berücksichtigen, dass Spark im Gegensatz zu Mapreduce die Executoren packt und sie für die gesamte Lebensdauer eines Jobs hält. Wo in Mapreduce ein Job Mapper und Reduzierer über die gesamte Lebensdauer erhalten und freigeben kann.

Wenn Sie Spark-Jobs mit langer Laufzeit haben, die während der Lebensdauer eines Jobs nicht alle Ressourcen nutzen, die sie zu Beginn erhalten haben, möchten Sie diese Ressourcen möglicherweise für andere Apps freigeben und dies nur über Mesos oder Spark Dynamic Scheduling tun . https://spark.apache.org/docs/2.0.2/job-scheduling.html#scheduling-across-applications Bei Garn ist die dynamische Zuordnung von Funken nur durch die Verwendung von Funken möglich. Garn wird sich nicht einmischen, während Mesos es tut. Auch dieser ganze Punkt ist nur wichtig, wenn Sie eine lang laufende Funkenanwendung haben und diese dynamisch vergrößern und verkleinern möchten.

nir
quelle
-2

Mesos verfügt über ein ausgefeilteres Planungsdesign, mit dem Anwendungen wie Spark mit ihm verhandeln können. Es ist heute besser für die Vielfalt der Anwendungen geeignet. Ich fand diese Seite wirklich aufschlussreich:

https://www.oreilly.com/ideas/a-tale-of-two-clusters-mesos-and-yarn

"... YARN ist für die Planung von Hadoop-Jobs optimiert, bei denen es sich historisch (und immer noch typischerweise) um Batch-Jobs mit langen Laufzeiten handelt. Dies bedeutet, dass YARN weder für lang laufende Dienste noch für kurzlebige interaktive Abfragen (wie kleine) konzipiert wurde und schnelle Spark-Jobs), und obwohl es möglich ist, andere Arten von Workloads zu planen, ist dies kein ideales Modell. Die Ressourcenanforderungen, das Ausführungsmodell und die Architekturanforderungen von MapReduce unterscheiden sich stark von denen von Diensten mit langer Laufzeit, z als Webserver oder SOA-Anwendungen oder Echtzeit-Workloads wie die von Spark oder Storm ... "

James D.
quelle
1
Dies (2/2015) bezieht sich auf frühe Versionen von Hadoop 2.x und ist jetzt völlig veraltet, da sich das YARN-Schedulling in den letzten drei Jahren stark verändert hat, mit nachfolgenden Versionen von Hadoop 2.x und 3.x, um dies zu erreichen Andere Probleme und das aktuelle YARN-Design haben fast nichts mit der frühen MapReduce-Architektur zu tun. -
Luis Vazquez