2013-01-16 4 views
24

Was ist ein Container in YARN? Ist es dasselbe wie die untergeordnete JVM, in der die Aufgaben auf dem Knotenmanager ausgeführt werden, oder ist es anders?Was ist ein Container in YARN?

Antwort

19

Es stellt eine Ressource (Speicher) auf einem einzelnen Knoten in einem bestimmten Cluster dar.
Ein Container ist

  • durch den Knotenmanager überwacht
  • durch den Ressourcenmanager geplant

Ein MR Aufgabe Behälter in einer solchen läuft (s).

+1

Eine MR-Task wird in einem solchen Container nicht ausgeführt. Es wird auf einer Gruppe von Containern ausgeführt, da jede Map- oder Reduce-Funktion auf einem Container ausgeführt wird. Eine Aufgabe könnte im * über * -Modus für einen Container ausgeführt werden, eine Aufgabe erstreckt sich jedoch normalerweise über Hunderte oder Tausende von Containern mit dem 'MRAppMaster'. Auch ein Container wird durch einen reichen Ressourcenvektor beschrieben und repräsentiert nicht ausschließlich Speicher. – Dyin

+0

Danke, dass Sie darauf hingewiesen haben, Sie haben recht, ich habe die Antwort aktualisiert. Als ich diese Frage vor mehr als 2 Jahren beantwortete, stellte ein Container nur eine Speicherressource dar. –

+1

Wie ist die Beziehung zwischen den Containern und den Executoren? läuft jeder Executor in einem Container? Vielen Dank! – lucian

13

Es kann mehrere Container auf einem einzelnen Knoten (oder einem einzelnen sehr großen) geben.

Jeder Knoten im System wird als aus mehreren Containern mit minimaler Speichergröße bestehend (z. B. 512 MB oder 1 GB) betrachtet. Der ApplicationMaster kann jeden Container als ein Vielfaches der minimalen Speichergröße anfordern.

Source, siehe Abschnitt ResourceManager/Ressourcenmodell.

+0

AFAIK, ApplicationMaster kann jede beliebige Größe anfordern, aber der Yarn Scheduler weist nur ein Vielfaches der in der Eigenschaft gam.scheduler.minimum * definierten Mindestspeichergröße zu. –

2

Wort 'Container' wird in GARN in zwei Kontexten verwendet,

Container: bedeutet einen zugewiesenen Ressourcen zu einem ApplicationMaster. ResourceManager ist verantwortlich für die Ausgabe von Ressourcen/Containern an einen ApplicationMaster. Überprüfen Sie Container API.

Starten eines Containers: Basierend auf zugewiesenen Ressourcen (Containern) ApplicationMaster-Anforderung NodeManager zum Starten von Containern, was zur Ausführung der Task auf einem Knoten führt. Überprüfen Sie ContainerManager API.

1

In einfachen Worten, Container ist ein Ort, an dem eine YARN-Anwendung ausgeführt wird. Es ist in jedem Knoten verfügbar. Application Master verhandelt den Container mit dem Scheduler (einer der Komponenten von Resource Manager). Container werden vom Node Manager gestartet.

2

In Hadoop 2.x ist Container ein Ort, an dem eine Arbeitseinheit auftritt. Zum Beispiel wird jede MapReduce-Task (nicht der gesamte Job) in einem Container ausgeführt.

Eine Anwendung/ein Auftrag wird auf einem oder mehreren Containern ausgeführt.

Systemressourcen werden für jeden Container zugewiesen, derzeit werden CPU-Kern und RAM unterstützt. Jeder Knoten in einem Hadoop-Cluster kann mehrere Container ausführen.

In Hadoop 1.x wird vom JobTracker ein Steckplatz zugewiesen, um jede MapReduce-Task auszuführen. Dann erstellt der TaskTracker eine separate JVM für jede Aufgabe (es sei denn, die JVM-Wiederverwendung ist nicht aktiviert).

0
Container : 

Die logische Lease für Ressourcen und der tatsächliche Prozess, der auf dem Knoten erzeugt wird, wird synonym verwendet. Es ist der gleiche Prozess, in dem Aufgaben (oder AM) ausgeführt wird. Um den Container zu starten, stellen wir Containerobjekt und CLC (ContainerLaunchContext) zur Verfügung, in dem wir eine Liste von Befehlen zum Ausführen von Aufgaben (oder AM) festlegen.

nmClient.startContainer(container, clcObj) 

ContainerLaunchContext code snippet : 

<code> 
. 
. 
. 
/** 
    * Add the list of <em>commands</em> for launching the container. All 
    * pre-existing List entries are cleared before adding the new List 
    * @param commands the list of <em>commands</em> for launching the container 
    */ 
    @Public 
    @Stable 
    public abstract void setCommands(List<String> commands); 
</code> 
0

Je nach Größe der Eingabedaten werden mehrere Eingabeaufteilungen erstellt. Der MR-Job muss diese gesamten Daten verarbeiten, so dass mehrere Aufgaben erstellt werden (Karte & Aufgaben reduzieren). Für jeden Input wird Split also von einer Task verarbeitet. Wie diese Aufgabe ausgeführt wird, wird vom Ressourcenmanager vorgeschlagen. Der Ressourcenmanager weiß, welcher Knotenmanager frei ist und welcher gerade beschäftigt ist, der Leiter der Hochschule und der Knotenmanager sind der Klassenlehrer der Hochschule und der Direktor weiß, welcher Lehrer frei ist. Daher fordert er den Knotenmanager auf, diese Aufgabe (kleiner Bruchteil des gesamten Jobs) in dem Container auszuführen, d. H. Im Speicherbereich, so dass jvm. Daher wird der Job als Anwendungsmaster im Container ausgeführt.