YARN (Yet Another Resource Negotiator) ist eine Komponente von Hadoop, die für das Management von Ressourcen und die Planung von Aufgaben in einem Hadoop-Cluster verantwortlich ist.
YARN definiert folgende Rollen:
Clients:
Eine unbestimmte Zahl an Clients reicht Jobs für eine Anwendung ein, die auf dem YARN-Cluster läuft (bspw. MapReduce, Spark oder MPI).
Resource Manager (RM):
Hat Überblick über Auslastung von RAM, CPU, etc.
Weist den jeweiligen Anwendungen diese Ressourcen auf Anfrage zu.
Node Manager:
Jeder Node des Clusters kann eine Vielzahl an Containern ausführen.
Der Node Manager verwaltetet diese Container:
Application Master (AM):
Läuft innerhalb einer Node.
Gehört zu einer spezifischen Anwendung (bspw. Spark oder MapReduce).
Verhandelt mit dem Resource Manager über Ressourcen und führt Tasks der entsprechenden Anwendung aus.
Container:
Läuft innerhalb einer Node.
Hat fest zugeteilte Ressourcen (RAM, CPU, Netzwerk, Storage, …).
Führt Jobs/Tasks für einen Application Master aus.
Anmerkung
Beispiel: Memory Allocation beim Starten von Applications in YARN
Wird in YARN ein neuer Application Master gestartet, bspw. durch
pyspark --master yarn
so wird zunächst geprüft, ob genug Ressourcen für den ApplicationMaster zur Verfügung stehen. Stehen nicht ausreichend Ressourcen zur Verfügung, wird gewartet, bis die Ressourcen frei sind.
Anschließend werden die Executors gestartet, bis entweder alle Executors laufen oder keine Ressourcen mehr verfügbar sind.
Sobald ein Executor läuft, kann dieser Anfragen bearbeiten.