View a markdown version of this page

Konfigurieren von HBase - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfigurieren von HBase

Obwohl die Standardeinstellungen von HBase für die meisten Anwendungen ausreichen sollten, können Sie Ihre HBase-Konfigurationseinstellungen ändern. Verwenden Sie hierfür Eigenschaften der HBase-Konfigurationsklassifizierungen. Weitere Informationen finden Sie unter Anwendungen konfigurieren.

Im folgenden Beispiel wird ein Cluster mit einem alternativen HBase-Stammverzeichnis basierend auf der Konfigurationsdatei myConfig.json erstellt, die in Amazon S3 gespeichert ist.

Anmerkung

Linux-Zeilenfortsetzungszeichen (\) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

aws emr create-cluster --release-label emr-7.13.0 --applications Name=HBase \ --instance-type m5.xlarge --instance-count 3 --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json

Die Datei myConfig.json gibt die hbase.rootdir-Eigenschaft für die hbase-site-Konfigurationsklassifizierung an, wie im folgenden Beispiel gezeigt. ip-XXX-XX-XX-XXX.ec2.internalErsetzen Sie es durch den internen DNS-Hostnamen des primären Knotens des Clusters.

[ { "Classification":"hbase-site", "Properties": { "hbase.rootdir": "hdfs://ip-XXX-XX-XX-XXX.ec2.internal:8020/user/myCustomHBaseDir" } } ]
Anmerkung

Ab Amazon-EMR-Version 5.21.0 können Sie Cluster-Konfigurationen überschreiben und zusätzliche Konfigurationsklassifikationen für jede Instance-Gruppe in einem ausgeführten Cluster angeben. Dazu verwenden Sie die Amazon EMR-Konsole, das AWS Command Line Interface (AWS CLI) oder das AWS SDK. Weitere Informationen finden Sie unter Angeben einer Konfiguration für eine Instance-Gruppe in einem aktiven Cluster.

Änderungen an der Arbeitsspeicherzuordnung in YARN

HBase wird nicht als YARN Anwendung ausgeführt. Folglich ist es erforderlich, den Arbeitsspeicher, der YARN und seinen Anwendungen zugewiesen ist, neu zu berechnen, was zu einer Reduzierung des Gesamtspeichers führt, der YARN zur Verfügung steht, wenn HBase installiert ist. Sie sollten dies berücksichtigen, wenn Sie planen, YARN-Anwendungen und HBase auf dem gleichen Cluster anzusiedeln. Für Instance-Typen mit weniger als 64 GB Arbeitsspeicher steht die Hälfte des Speichers zur VerfügungNodeManager, der dann der RegionServer HBase zugewiesen wird. Bei Instance-Typen mit mehr als 64 GB Arbeitsspeicher ist der RegionServer HBase-Speicher auf 32 GB begrenzt. Als allgemeine Regel gilt, dass der YARN-Einstellungsspeicher ein Vielfaches des MapReduce Reducer-Task-Speichers ist.

Die Tabellen unter Standardwerte für die Aufgabenkonfigurationseinstellungen zeigen die Änderungen an den YARN-Einstellungen basierend auf dem Arbeitsspeicher, der für HBase erforderlich ist.

HBase-Port-Nummern

Einige Port-Nummern, die für HBase gewählt werden, unterscheiden sich vom Standard. Die folgenden Schnittstellen und Ports sind für HBase in Amazon EMR verfügbar.

HBase-Ports
Schnittstelle Port Protocol (Protokoll)
HMaster 16000 TCP
HMaster-UI 16010 HTTP
RegionServer 16020 TCP
RegionServer Informationen 16030 HTTP
REST-Server 8070 HTTP
REST-UI 8085 HTTP
Thrift-Server 9090 TCP
Thrift-Server-UI 9095 HTTP
Wichtig

In Amazon-EMR-Version 4.6.0 und höher ist der kms-http-port 9700 und der kms-admin-port 9701.

Zu optimierende HBase-Standorteinstellungen

Sie können einzelne oder alle HBase-Standorteinstellungen konfigurieren, um den HBase-Cluster für den Workload Ihrer Anwendung zu optimieren. Wir empfehlen die folgenden Einstellungen als Ausgangspunkt.

zookeeper.session.timeout

Der Timeout-Standardwert beträgt 40 Sekunden (40 000 ms). Wenn ein Regionsserver ausfällt, gibt dieser Wert an, wie lange es dauert, bis der Master-Server die Abwesenheit des Regionsservers erkennt und mit der Wiederherstellung beginnt. Um die Wiederherstellung des Master-Servers zu beschleunigen, können Sie diesen Wert auf einen kürzeren Zeitraum einstellen. Im folgenden Beispiel werden 30 Sekunden oder 30 000 ms verwendet:

[ { "Classification":"hbase-site", "Properties": { "zookeeper.session.timeout": "30000" } } ]

hbase.regionserver.handler.count

Dadurch wird die Anzahl der Threads definiert, die der Regionsserver offen hält, um Tabellenanforderungen zu verarbeiten. Die Standardeinstellung 10 ist niedrig, damit Benutzer ihre Regionsserver nicht überlasten, wenn sie zu große Schreibpuffer mit vielen gleichzeitigen Clients verwenden. In der Regel sollte diese Zahl möglichst gering gehalten werden, wenn die Nutzdaten pro Anforderung den MB-Bereich erreicht (große Puts, Scans mit großem Zwischenspeicher), bzw. hoch, wenn die Nutzdatenlast gering ist (Gets, kleine Puts, ICVs, Löschvorgänge). Im folgenden Beispiel wird die Anzahl der offenen Threads auf 30 erhöht:

[ { "Classification":"hbase-site", "Properties": { "hbase.regionserver.handler.count": "30" } } ]

hbase.hregion.max.filesize

Dieser Parameter steuert die Größe (in Byte) der einzelnen Regionen. Standardmäßig ist der Wert eingestell 10737418240. Wenn Sie große Datenmengen in Ihren HBase-Cluster schreiben und dies häufige Aufteilungen verursacht, können Sie diesen Wert erhöhen, um einzelne Regionen zu vergrößern. Dadurch werden zwar Aufteilungen reduziert, es braucht jedoch mehr Zeit, um die Workloads in den Regionen zwischen den Servern zu verteilen.

[ { "Classification":"hbase-site", "Properties": { "hbase.hregion.max.filesize": "10737418240" } } ]

hbase.hregion.memstore.flush.size

Dieser Parameter steuert die maximale Größe des Memstore (in Byte), bevor er auf den Datenträger ausgelagert wird. Standardmäßig ist dieser 134217728. Wenn Ihr Workload aus Schreibvorgängen in kurzen Spitzen besteht, sollten Sie dieses Limit erhöhen, damit alle Schreibvorgänge während der Spitzenauslastung im Arbeitsspeicher verbleiben und zu einem späteren Zeitpunkt auf den Datenträger ausgelagert werden. Dies kann die Leistung bei Auslastungsspitzen verbessern.

[ { "Classification":"hbase-site", "Properties": { "hbase.hregion.memstore.flush.size": "134217728" } } ]

Leistungsaspekte

Z Garbage Collector (ZGC) für HBase aktivieren

Mit Amazon EMR Version 7.10.0 und höher können Benutzer die Garbage Collection (GC) -Einstellungen für ihren HBase-Cluster nahtlos konfigurieren. Wir empfehlen, Z Garbage Collector (ZGC) zu aktivieren, um GC-Pausenzeiten mit niedriger Latenz und unter einer Millisekunde zu erreichen.

Hier ist eine Konfiguration zur Aktivierung von ZGC für HBase (s): RegionServer

[ { "Classification": "hbase-env", "Properties": {}, "Configurations": [ { "Classification": "export", "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-21", "HBASE_REGIONSERVER_GC_OPTS": "\"-XX:+UseZGC -XX:+ZGenerational\"" } } ] } ]
Anmerkung

Die Umgebungsvariable JAVA_HOME muss gesetzt werden, wenn Generational ZGC verwendet wird (empfohlen), da sie in JDK 21 eingeführt wurde. Wenn Sie den generationsunabhängigen Modus (ohne-XX:+ZGenerational) von ZGC verwenden möchten, müssen Sie JAVA_HOME nicht setzen. In JDK 24 wurde der generationsunabhängige Modus von ZGC entfernt.

ZGC-Optimierung

  1. Aktivieren Sie JVM Fixed Heap

    Der Z Garbage Collector (ZGC) arbeitet effizienter, wenn er mit festem Heap-Speicher konfiguriert ist, wodurch der Mehraufwand für die Rückgabe von Speicher an das Betriebssystem entfällt. Verwenden Sie die folgende Konfiguration, um festen Heap-Speicher für Ihren HBase-Cluster zu konfigurieren:

    [ { "Classification": "hbase", "Properties": { "hbase.regionserver.fixed.heap.enabled": "true" } } ]
  2. Aktivieren Pre-touch

    Durch die Aktivierung von Pre-Touch wird die Leistung der Garbage Collection (GC) verbessert, da die anfängliche Latenz reduziert und die Leistung besser vorhersehbar ist. Verwenden Sie die folgende Konfiguration, um Pre-Touch für Ihren HBase-Cluster zu aktivieren:

    [ { "Classification": "hbase-env", "Properties": {}, "Configurations": [ { "Classification": "export", "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-21", "HBASE_REGIONSERVER_GC_OPTS": "\"-XX:+UseZGC -XX:+ZGenerational -XX:+AlwaysPreTouch\"" } } ] } ]