database-scan

___ tag123caching ___ Ein Cache ist ein Mechanismus, um Daten lokal zwischenzuspeichern (Caching), um die Zugriffszeit auf weit entfernte Daten zu reduzieren. Für CPU / Disk / Web-Browsing verwenden Sie bitte relevante Tags (cpu-cache, diskcache, ...) ___ tag123hadoop ___ Hadoop ist ein Apache-Open-Source-Projekt, das Software für zuverlässiges und skalierbares verteiltes Computing bereitstellt. Das Projekt selbst enthält eine Vielzahl anderer ergänzender Ergänzungen. ___ tag123hbase ___ HBase ist die Hadoop-Datenbank (columnar). Verwenden Sie es, wenn Sie in Echtzeit auf Ihre Big Data zugreifen müssen. Das Ziel dieses Projekts ist das Hosting von sehr großen Tabellen - Milliarden von Zeilen X Millionen von Spalten - auf Clustern von Standardhardware. ___ qstntxt ___

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?

    
___ answer22529439 ___

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

    
___ tag123databasescan___ hilft uns dabei, dieses Wiki zu bearbeiten ___ qstnhdr ___ HBase Scan-Leistung ___ answer22547731 ___

%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.

    
___
2
Antworten

HBase Scan-Leistung

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....
20.03.2014, 09:41