HBase Scan-Leistung

7

Ich führe einen Bereichsscan durch, der mir 500k Datensätze gibt. Wenn ich scan.setCaching(100000) eingestellt habe, dauerte es weniger als eine Sekunde, aber wenn scan.setCaching(100000) nicht gesetzt ist, dauerte es fast 38 Sekunden.

Wenn ich scan.setBlockCache(false) und scan.setCaching(100000) 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?

    
user2392692 20.03.2014, 09:41
quelle

2 Antworten

14

Scan.setCaching ist eine falsche Bezeichnung. Es sollte wirklich so etwas wie Scan.setPrefetch heißen. setCaching gibt an, wie viele Zeilen pro RPC an den Regionserver übertragen werden. Wenn Sie setCaching(1) verwenden, bezahlen Sie jedes Mal, wenn Sie next() 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.

Scan.setBlockCache 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 hfile.block.cache.size config in hbase-site.xml steuern. Ebenso können Sie die Gesamtpoolgröße des MemStore über die Einstellung hbase.regionserver.global.memstore.size steuern.

Sie können setBlockCache(false) 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, setBlockCache in Ruhe zu lassen.

    
b4hand 21.03.2014 00:10
quelle
4

Hbase hat zwei Arten von Cache-Strukturen - memory store und block cache . 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

    
Chandra kant 20.03.2014 10:03
quelle