Direktzugriffsleistung in HBase und Blockgröße in HDFS

8

HBase kann HDFS als verteiltes Back-End-Dateisystem verwenden. Ihre Standardblockgröße ist jedoch ziemlich unterschiedlich. HBase verwendet 64 KB als Standardblockgröße, während HDFS mindestens 64 MB als Standardblockgröße verwendet, die mindestens 1000 Mal größer ist als die von HBase.

Ich verstehe, dass HBase für den wahlfreien Zugriff ausgelegt ist, daher ist eine niedrigere Blockgröße hilfreich. Aber ist es beim Zugriff auf einen 64K-Block in HBase immer noch notwendig, auf einen 64MB-Block in HDFS zuzugreifen? Wenn es wahr ist, kann HBase extrem zufälligen Zugriff gut behandeln?

    
ccshih 18.09.2012, 07:55
quelle

2 Antworten

7

Blöcke werden für verschiedene Dinge in HDFS und HBase verwendet. Blöcke in HDFS sind die Speichereinheit auf der Festplatte. Blöcke in HBase sind eine Speichereinheit für Speicher. Es gibt viele HBase-Blöcke, die in eine einzige HBase-Datei passen. HBase wurde entwickelt, um die Effizienz des HDFS-Dateisystems zu maximieren, und sie nutzen die Blockgröße dort voll aus. Einige Leute haben sogar ihr HDFS auf 20GB Blockgrößen eingestellt, um HBase effizienter zu machen.

Ein Ort, um mehr zu lesen, um zu verstehen, was hinter den Kulissen in HBase vor sich geht, ist: Ссылка

Wenn Sie in einer Tabelle, die viel größer als der Arbeitsspeicher ist, vollkommen zufälligen Zugriff haben, hilft Ihnen der HBase-Cache nicht. Da HBase jedoch intelligent speichert und Daten abruft, muss kein gesamter Dateiblock aus HDFS gelesen werden, um die für eine Anforderung benötigten Daten zu erhalten. Die Daten werden nach Schlüssel indiziert und können effizient abgerufen werden. Wenn Sie Ihre Schlüssel außerdem so entwickelt haben, dass Daten über den gesamten Cluster verteilt werden, werden zufällige Lesevorgänge von jedem Server gleichermaßen gelesen, sodass der Gesamtdurchsatz maximiert wird.

    
David 18.09.2012, 20:33
quelle
6

HBase

HBase speichert Daten in großen Dateien namens HFiles, die eine große Größe haben (Größenordnung von Hunderten von MB oder GB).

Wenn HBase lesen möchte, checkt es zuerst den Memstore ein, wenn sich die Daten im Speicher von einer kürzlichen Aktualisierung oder Einfügung befinden. Wenn diese Daten nicht im Speicher sind, werden die HFiles einen Bereich von Schlüsseln finden, die die Daten enthalten könnten Sie wollen (nur 1 Datei, wenn Sie Verdichtungen durchgeführt haben).

Ein HFile enthält viele Datenblöcke (die HBase-Blöcke von standardmäßig 64 kB), diese Blöcke sind klein, um schnellen Direktzugriff zu ermöglichen. Und am Ende der Datei gibt es einen Index, der auf alle diese Blöcke verweist (mit dem Bereich der Schlüssel im Block und dem Offset des Blocks in der Datei).

Beim ersten Lesen eines HFile wird der Index geladen und für zukünftige Zugriffe im Speicher gehalten, dann:

  • HBase führt eine binäre Suche im Index durch (schnell im Speicher), um den Block zu finden, der möglicherweise den Schlüssel enthält, nach dem Sie gefragt haben
  • Sobald der Block gefunden wurde, kann HBase das Dateisystem bitten, diesen spezifischen 64k-Block an diesem bestimmten Offset in der Datei zu lesen, was dazu führt, dass ein einzelner Datenträger den zu überprüfenden Datenblock lädt.
  • Der geladene 64k-HBase-Block wird nach dem von Ihnen angeforderten Schlüssel durchsucht und der Schlüsselwert zurückgegeben, falls er existiert

Wenn Sie kleine HBase-Blöcke haben, haben Sie bei zufälligen Zugriffen eine effizientere Festplattennutzung, erhöhen aber die Indexgröße und den Speicherbedarf.

HDFS

Alle Dateisystemzugriffe werden von HDFS mit Blöcken ausgeführt (standardmäßig 64 MB). In HDFS werden die Blöcke für die Verteilung und Datenlokalisierung verwendet, was bedeutet, dass eine Datei von 1 GB in 64 MB-Chunks aufgeteilt wird, um sie zu verteilen und zu replizieren. Diese Blöcke sind groß, um sicherzustellen, dass die Stapelverarbeitungszeit nicht nur für die Suche auf der Festplatte verwendet wird, da die Daten in diesem Block nebeneinander liegen.

Fazit

HBase-Blöcke und HDFS-Blöcke sind verschiedene Dinge:

  • HBase-Blöcke sind die Einheit der Indexierung (sowie Caching und Komprimierung) in HBase und ermöglichen einen schnellen Direktzugriff
  • HDFS-Blöcke sind die Einheit der Dateisystemverteilung und der Datenlokalität

Die Abstimmung der HDFS-Blockgröße im Vergleich zu Ihren HBase-Parametern und Ihren Anforderungen hat Auswirkungen auf die Leistung, aber dies ist subtiler.

    
Geoffrey 03.06.2015 20:50
quelle

Tags und Links