Ich führe einen Bereichsscan durch, der mir 500k Datensätze gibt. Wenn ich %code% eingestellt habe, dauerte es weniger als eine Sekunde, aber wenn %code% nicht gesetzt ist, dauerte es fast 38 Sekunden.
Wenn ich %code% und %code% einstelle, was wird passieren? Werden die Zeilen zwischengespeichert oder nicht?
Ich lasse den OS-Cache nach dem ersten Scanvorgang fallen, aber die Zeit zum Scannen der Datensätze ändert sich nicht. Warum?
Wie kann ich dann die Leseleistung überprüfen?
Hbase hat zwei Arten von Cache-Strukturen - %code% und %code% . Der Speicher ist als MemStore implementiert und der Cache, den Sie zum Lesen verwenden, ist Block-Cache Ein Datenblock wird aus HDFS gelesen, er wird im BlockCache zwischengespeichert. Nachfolgende Lesevorgänge benachbarter Daten werden einfach aus dem BlockCache bedient. Wenn Sie also scan.set Block Cache (false) manuell setzen, stoppt das Zwischenspeichern der Zeilen, die es von hdfs liest.
scan.set-caching (100000) ist eine clientseitige Optimierung an Scanner. So funktioniert es immer noch nicht beeinflusst
%code% ist eine falsche Bezeichnung. Es sollte wirklich so etwas wie %code% heißen. %code% gibt an, wie viele Zeilen pro RPC an den Regionserver übertragen werden. Wenn Sie %code% verwenden, bezahlen Sie jedes Mal, wenn Sie %code% aufrufen, die Kosten für einen Hin- und Rückflug zum regionserver. Der Nachteil einer höheren Anzahl ist, dass Sie für zusätzlichen Speicher im Client bezahlen und möglicherweise Zeilen abrufen, die Sie nicht verwenden, z. B. wenn Sie nach Erreichen einer bestimmten Anzahl von Zeilen oder nach dem Scannen aufhören nachdem Sie einen bestimmten Wert gefunden haben.
%code% bedeutet etwas völlig anderes, wie Chandra es ausdrückte. Es weist den Regionserver grundsätzlich an, keine Daten aus diesem Scan in den HBase BlockCache zu ziehen, der ein separater Speicherpool aus dem MemStore ist. Beachten Sie, dass MemStores zum Schreiben verwendet werden und BlockCache zum Lesen verwendet wird und diese beiden Speicherbereiche vollständig voneinander getrennt sind. HBase verwendet den BlockCache derzeit nicht als Write-Back-Cache. Sie können die Größe des Blockcaches mit der Einstellung %code% config in %code% steuern. Ebenso können Sie die Gesamtpoolgröße des MemStore über die Einstellung %code% steuern.
Sie können %code% verwenden, wenn Sie einen vollständigen Tabellenscan durchführen und den aktuellen Arbeitssatz nicht im Blockcache löschen möchten. Andernfalls, wenn Sie Daten scannen, die häufig verwendet werden, wäre es wahrscheinlich besser, %code% in Ruhe zu lassen.