2013-05-05 10 views
5

Ich möchte den Durchsatz bei jedem Datenknoten messen, indem ich die Zeit für jeden Lese-/Schreibvorgang mißt. Es ist sehr verwirrend, die Millionen von Funktionen zu lesen und herauszufinden, wo das geschieht. Kann jemand die Reihe von Anrufen auflisten, die beim Lesen/Schreiben eines Datenblocks ausgeführt wurden? verwende Version 1.0.1. Alternativ, wenn es bereits eine API gibt, die dies am Datenknoten misst, könnte ich diese Information verwenden.Durchsatz bei Datenknoten messen

+1

In Bezug auf Ihren Kopfgeld-Kommentar: Wenn Sie einen Knoten in die Blacklist aufnehmen, wird er nicht mehr am Cluster teilnehmen, und der Durchsatz wird sich nie wiederherstellen. – likeitlikeit

+0

Hey Bug Catcher, irgendwelche Gedanken zu meiner Antwort unten? – Engineiro

+0

@likeitlikeit Ich habe etwas in Anlehnung an die existierende Politik für Herzschläge getan: gib ihr drei Möglichkeiten und wenn es immer noch schlecht ist, dann nimm es auf die schwarze Liste. Nicht gedacht für den praktischen Einsatz sowieso –

Antwort

1

Die wichtigen zu untersuchenden Klassen zur Durchsatzmessung sind FSDataOutputStream für Schreibvorgänge und FSDataInputStream für Lesevorgänge.

Datei lesen: Das erste, was ein Knoten ist, wenn eine Datei zu lesen Anruf open() auf das FileSystem Objekt. An diesem Punkt wissen Sie, dass dieser Knoten in Kürze zu lesen beginnt und Sie können Code platzieren, nachdem dieser Aufruf erfolgreich abgeschlossen wurde, um Ihre Messungen vorzubereiten. Der Aufruf von open() auf HDFS instanziiert einen DistributedFileSystem, der mit dem NameNode kommuniziert, um Blockspeicherorte zu sammeln (sortiert nach aufrufender Knotennähe). Schließlich gibt das Objekt DistributedFileSystemFSDataInputStream zurück ("sieht" eine Datei lesen), der wiederum DFSInputStream umschließt ("sieht" Lese-Blöcke, behandelt Fehler). Ihre Messungen würden innerhalb der read() und close() Anruf auf der FSDataInputStream Bereich werden.

Datei schreiben: Der Knoten ruft create() auf der FileSystem. Zu diesem Zeitpunkt werden verschiedene Prüfungen durchgeführt, die Dateiberechtigungen, Verfügbarkeit usw. umfassen, aber nach dem erfolgreichen Abschluss wird ein FSDataOutputStream Objekt zurückgegeben, das eine DFSOutputStream umschließt. Dasselbe Konzept gilt, wenn man einen kontinuierlichen Schreibvorgang sieht, behandelt der andere die Kohärenz des Replikationsfaktors (d. H. Ein Schreibvorgang = drei Schreibvorgänge) und einen Fehler. Ähnlich wie bei einem Lesevorgang würden Ihre Messungen innerhalb des write() und close() Aufrufs unter FSDataInputStream liegen.

Um dies global für alle Knoten in Ihrem Cluster durchzuführen, müssen Sie diese Methoden als Teil der Hadoop-Verteilung überschreiben, die Sie in Ihrem Cluster freigeben.

+0

Erläutert nicht, wie Statistiken für jeden Datenknoten aggregiert werden. Von Clientknoten kann nicht erwartet werden, dass sie die einzelnen Datenknoten profilieren und Informationen an den Namensknoten senden. Wie auch immer, da mein Bedürfnis vorbei ist, werde ich diese Antwort akzeptieren –

Verwandte Themen