Optimieren von Apache HBase mit Apache Ambari in Azure HDInsight
Apache Ambari ist eine Webbenutzeroberfläche zum Verwalten und Überwachen von HDInsight-Clustern. Eine Einführung in die Ambari-Webbenutzeroberfläche finden Sie unter Verwalten von HDInsight-Clustern mithilfe der Apache Ambari-Webbenutzeroberfläche.
Die Apache-HBase-Konfiguration wird über die Registerkarte HBase Configs (HBase-Konfigurationen) geändert. In den folgenden Abschnitten werden einige wichtige Konfigurationseinstellungen beschrieben, die sich auf die HBase-Leistung auswirken.
Festlegen von HBASE_HEAPSIZE
Hinweis
Dieser Artikel enthält Verweise auf den Begriff Master, den Microsoft nicht mehr verwendet. Sobald der Begriff aus der Software entfernt wurde, wird er auch aus diesem Artikel entfernt.
Mit der HBase-Heapgröße wird die maximale Heapmenge in MB angegeben, die von Servern vom Typ region und master verwendet werden kann. Der Standardwert ist 1.000 MB. Es ist ratsam, diesen Wert je nach Clusterworkload anzupassen.
Navigieren Sie zum Ändern des Werts auf der HBase-Registerkarte Configs (Konfigurationen) zum Bereich Advanced HBase-env (HBase-env – Erweitert), und suchen Sie nach der Einstellung
HBASE_HEAPSIZE
.Ändern Sie den Standardwert in 5.000 MB.
Optimieren von Workloads mit vielen Lesevorgängen
Die folgenden Konfigurationen sind wichtig, um die Leistung von Workloads mit vielen Lesevorgängen zu verbessern.
Größe des Blockcaches
Der Blockcache ist der Lesecache. Der Parameter hfile.block.cache.size
steuert die Größe des Blockcaches. Der Standardwert ist „0,4“. Dies sind 40 Prozent des gesamten Arbeitsspeichers des Regionsservers. Je größer der Blockcache ist, desto schneller werden die zufälligen Lesevorgänge durchgeführt.
Navigieren Sie zum Ändern dieses Parameters auf der HBase-Registerkarte Configs (Konfigurationen) zur Registerkarte Settings (Einstellungen), und suchen Sie nach % of RegionServer Allocated to Read Buffers (RegionServer-Zuteilung für Lesepuffer in Prozent).
Wählen Sie das Symbol Bearbeiten, um den Wert zu ändern.
Memstore-Größe
Alle Bearbeitungen werden im Arbeitsspeicherpuffer gespeichert, der als Memstore bezeichnet wird. Durch diesen Puffer wird die Gesamtmenge der Daten erhöht, die mit einem einzelnen Vorgang auf den Datenträger geschrieben werden können. Außerdem wird der Zugriff auf die letzten Bearbeitungen beschleunigt. Die Memstore-Größe definiert die beiden folgenden Parameter:
hbase.regionserver.global.memstore.UpperLimit
: Definiert den maximalen Prozentsatz des Regionsservers, der von kombinierten Memstore-Einheiten verwendet werden kann.hbase.regionserver.global.memstore.LowerLimit
: Definiert den minimalen Prozentsatz des Regionsservers, der von kombinierten Memstore-Einheiten verwendet werden kann.
Sie können den oberen und unteren Grenzwert für Memstore reduzieren, um eine Optimierung für zufällige Lesevorgänge zu erzielen.
Anzahl von Zeilen, die beim Scannen vom Datenträger abgerufen werden
Mit der Einstellung hbase.client.scanner.caching
wird die Anzahl von Zeilen definiert, die vom Datenträger gelesen werden, wenn für einen Scanner die next
-Methode aufgerufen wird. Der Standardwert ist 100. Je höher der Wert ist, desto weniger Remoteaufrufe werden vom Client an den Regionsserver gesendet, sodass für die Scans weniger Zeit benötigt wird. Durch diese Einstellung wird aber die Arbeitsspeicherauslastung des Clients erhöht.
Wichtig
Legen Sie den Wert nicht so fest, dass der Zeitraum zwischen dem Aufruf der nächsten Methode auf einem Scanner größer als der Zeitraum für den Scanner-Timeout ist. Die Dauer bis zum Scanner-Timeout wird mit der Eigenschaft hbase.regionserver.lease.period
definiert.
Optimieren von Workloads mit vielen Schreibvorgängen
Die folgenden Konfigurationen sind wichtig, um die Leistung von Workloads mit vielen Schreibvorgängen zu verbessern.
Maximale Regionsdateigröße
HBase speichert Daten in einem internen Dateiformat namens HFile
. Mit der Eigenschaft hbase.hregion.max.filesize
wird die Größe eines einzelnen HFile
-Elements für eine Region definiert. Eine Region wird in zwei Regionen unterteilt, wenn die Summe aller HFiles
-Elemente in einer Region diese Einstellung übersteigt.
Je größer die Regionsdatei ist, desto kleiner ist die Anzahl von Unterteilungen. Sie können die Dateigröße erhöhen, um einen Wert zu ermitteln, der zur maximalen Schreibleistung führt.
Vermeiden der Updateblockierung
Mit der Eigenschaft
hbase.hregion.memstore.flush.size
wird die Größe definiert, mit der für Memstore der Flushvorgang auf den Datenträger durchgeführt wird. Die Standardgröße beträgt 128 MB.Der Blockmultiplikator für die HBase-Region wird mit
hbase.hregion.memstore.block.multiplier
definiert. Der Standardwert ist 4. Der zulässige Höchstwert ist 8.HBase blockiert Updates, wenn der Memstore eine Größe von (
hbase.hregion.memstore.flush.size
*hbase.hregion.memstore.block.multiplier
) Byte hat.Bei den Standardwerten für die Flushgröße und den Blockmultiplikator werden Updates blockiert, wenn die Größe für den Memstore 128 * 4 = 512 MB beträgt. Erhöhen Sie den Wert von
hbase.hregion.memstore.block.multiplier
, um die Anzahl für die Updateblockierung zu reduzieren.
Definieren der Memstore-Größe
Die Memstore-Größe wird mit den Parametern hbase.regionserver.global.memstore.upperLimit
und hbase.regionserver.global.memstore.lowerLimit
definiert. Wenn Sie Werte hierfür gleich festlegen, werden die Pausen zwischen den Schreibvorgängen reduziert (und häufiger Flushvorgänge durchgeführt), und die Schreibleistung verbessert sich.
Festlegen des lokalen Memstore-Zuteilungspuffers
Die Nutzung des lokalen Memstore-Zuteilungspuffers wird mit der Eigenschaft hbase.hregion.memstore.mslab.enabled
definiert. Wenn die Einstellung aktiviert ist (TRUE), wird die Heapfragmentierung bei einer hohen Zahl von Schreibvorgängen verhindert. Der Standardwert lautet „true“.