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?
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.
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:
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.
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.
HBase-Blöcke und HDFS-Blöcke sind verschiedene Dinge:
Die Abstimmung der HDFS-Blockgröße im Vergleich zu Ihren HBase-Parametern und Ihren Anforderungen hat Auswirkungen auf die Leistung, aber dies ist subtiler.