HBase Scan-Leistung
Trete ich ein range-scan, dass ist mir 500k Datensätze.
Wenn ich scan.setCaching(100000)
es dauerte weniger als eine Sekunde, aber wenn scan.setCaching(100000)
ist nicht festgelegt, es dauerte fast 38 Sek.
Wenn ich scan.setBlockCache(false)
und scan.setCaching(100000)
was wird passieren? Werden die Zeilen zwischengespeichert werden oder nicht?
Ich bin fallenlassen OS-cache nach dem ersten scan, aber es ist keine änderung in der Zeit für das Scannen der Datensätze. Warum?
Dann wie kann ich die lese-performance?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scan.setCaching
ist irreführend. Es sollte wirklich sein genannt etwas wieScan.setPrefetch
.setCaching
tatsächlich angibt, wie viele Zeilen übertragen werden, per RPC auf die regionserver. Wenn SiesetCaching(1)
dann jedes mal, wenn Sie rufennext()
Sie zahlen die Kosten für ein round-trip-für die regionserver. Der Seite nach unten, um die Einstellung einer größeren Zahl ist, dass Sie zahlen für den extra-Speicher in den client, und möglicherweise sind Sie das abrufen der Zeilen, die Sie nicht verwenden, zum Beispiel, wenn Sie den Scanvorgang anhalten nach erreichen einer bestimmten Anzahl von Zeilen oder nachdem Sie gefunden haben, einen bestimmten Wert.Scan.setBlockCache
bedeutet etwas ganz anderes wie Chandra hingewiesen. Es ist im Grunde weist regionserver zu ziehen nicht alle Daten aus dieser überprüfung in die HBase BlockCache, die einen separaten pool von Speicher aus dem MemStore. Beachten Sie, dass MemStores sind zum schreiben und BlockCache ist zum Lesen, und diese zwei Stücke von Speicher sind komplett getrennt. HBase derzeit nicht den BlockCache als write-back-cache. Sie können Steuern, die Größe des block-cache mit derhfile.block.cache.size
config-Einstellung inhbase-site.xml
. Ebenso können Sie die Steuerung des gesamten pool-Größe des MemStore über diehbase.regionserver.global.memstore.size
Einstellung.Möchten Sie vielleicht die Verwendung
setBlockCache(false)
wenn Sie einen full table scan, und Sie nicht wollen, zu leeren Ihre aktuelle Arbeit in der block-cache. Andernfalls, wenn Sie das Scannen der Daten wird Häufig verwendet, wäre es wahrscheinlich besser, lassen Sie diesetBlockCache
allein.Hbase hat 2 Arten von cache-Strukturen -
memory store
undblock cache
.Speicher implementiert MemStore und den cache, die Sie für das Lesen ist block-cache.
Wenn ein Datenblock Lesen aus HDFS, wird es zwischengespeichert, in der BlockCache. Nachfolgende liest von benachbarten Daten sind einfach serviert von den BlockCache.
So, wenn Sie manuell Scannen.set Block-Cache(false), dann wird es wird halt das caching der Zeilen liest es von hdfs.
scan.set-caching(100000) ist ein client-Optimierung im Hinblick auf Scanner. Es wird also immer noch gearbeitet
setCaching
wirkt sich auf client-Seite Verhalten währendsetBlockCache
betrifft regionserver-Seite Verhalten, so Ihre Argumentation, warumsetCaching
keine Wirkung haben, ist falsch.