Hbase – Erste Schritte

Hbase – Erste Schritte

1. HBase-Übersicht

1.1 Was ist HBase?

HBase ist eine auf HDFS basierende NoSQL-Datenbank für verteilte Datenspeicherung mit hoher Zuverlässigkeit, hoher Leistung, Spaltenspeicherung, Skalierbarkeit und Lesen und Schreiben in Echtzeit.

Hbase kann riesige Datenmengen speichern, weist in den späteren Phasen eine hohe Abfrageleistung auf und kann bei Abfragen von Hunderten Millionen Datenelementen in Sekundenschnelle Ergebnisse zurückgeben.

1.2 Eigenschaften von HBase-Tabellen

1. Groß

  • Hbase-Tabellen können riesige Datenmengen speichern.

2. Kein Modus

  • Die Felder jeder Zeile und Spalte in der MySQL-Tabelle sind gleich, während jede Datenzeile in der HBase-Tabelle völlig unterschiedliche Spalten haben kann.

3. Spaltenorientiert

  • Die Daten in der HBase-Tabelle können mehrere Spalten haben. Später werden die Daten entsprechend der verschiedenen Spalten gespeichert und in verschiedene Dateien geschrieben.
  • Speichern Sie Daten in Spaltenfamilien.

4. Spärlich

  • Spalten, die in einer HBase-Tabelle null sind, belegen keinen tatsächlichen Speicherplatz.

5. Mehrere Versionen von Daten

  • Beim Aktualisieren der Daten in der HBase-Tabelle werden die vorherigen Ergebnisdaten nicht direkt gelöscht, sondern es bleiben mehrere Versionen der Daten erhalten. Jedem Datenwert wird eine Versionsnummer zugewiesen, die anhand des Zeitstempels bestimmt wird, zu dem wir die Daten einfügen.

6. Einzelner Datentyp

  • Unabhängig vom Datentyp werden sie schließlich in ein Byte-Array konvertiert und in der Hbase-Tabelle gespeichert

1.3 Logische Ansicht der HBase-Tabelle

2. HBase-Clusterstruktur

1. Kunde

  • Bietet einige Java-Schnittstellen zum Bedienen von HBase-Tabellen.
  • Der Client verwaltet einen Cache, um den Zugriff auf Hbase zu beschleunigen
  • Der Client speichert und speichert die abgefragten Standortinformationen im Cache. Der Cache läuft nicht automatisch ab.

2. Tierpfleger

Der Client benötigt einen ZK-Cluster, um HBase-Tabellendaten zu betreiben

Wirkung

1. zk speichert die Metadateninformationen des Hbase-Clusters

Speichert das Hbase-Schema, einschließlich der vorhandenen Tabellen und der Spaltenfamilien jeder Tabelle.

2. zk speichert die Adressierungseinträge aller Hbase-Tabellen

Wenn Sie später die Clientschnittstelle zum Bedienen von HBase-Daten verwenden, müssen Sie eine Verbindung zum ZK-Cluster herstellen, um die Adressierungseinträge aller Regionen zu speichern – auf welchem ​​Server befindet sich die Stammtabelle?

3. Nach der Einführung von zk ist der gesamte Hbase-Cluster hochverfügbar

4. zk speichert die Registrierungs- und Heartbeat-Informationen von HMaster und HRegionServer

Wenn ein HRegionServer später ausfällt, erkennt ZooKeeper dies und benachrichtigt den Boss-HMaster darüber.

3. HMaster

Es ist der Chef des gesamten HBase-Clusters

Wirkung

1. Es akzeptiert Clientanforderungen zum Erstellen und Löschen von Tabellen. Verarbeiten von Schemaaktualisierungsanforderungen

2. Es wird die entsprechende Region dem HRegionServer zugewiesen, um die Daten zu verwalten

3. Die vom ausgefallenen HRegionServer verwalteten Regionen werden auf andere aktive HRegionServer umverteilt.

4. Dadurch wird ein HRegionServer-Lastausgleich erreicht, um zu vermeiden, dass zu viele Regionen von einem bestimmten HRegionServer verwaltet werden.

4. HRegionServer

Es ist der jüngere Bruder des integrierten HBase-Clusters

Wirkung

1. Verantwortlich für die Verwaltung der ihm von HMaster zugewiesenen Region

2. Es akzeptiert die Lese- und Schreibanforderungen des Clients

3. Es teilt die Regionsdaten auf, die während des Betriebs zu groß werden

5. Region

Es ist die kleinste Einheit des verteilten Speichers in der gesamten HBase-Tabelle.

Die Daten werden auf HDFS-Basis gespeichert.

3. Installation und Bereitstellung des HBase-Clusters

Voraussetzungen

  • Erstellen Sie zuerst die ZK- und Hadoop-Cluster

1. Laden Sie das entsprechende Installationspaket herunter

  • http://archive.apache.org/dist/hbase/1.2.1/hbase-1.2.1-bin.tar.gz
  • hbase-1.2.1-bin.tar.gz

2. Planen Sie das Installationsverzeichnis

  • /export/server

3. Laden Sie das Installationspaket auf den Server hoch

4. Entpacken Sie das Installationspaket in das angegebene Planungsverzeichnis

  • tar -zxvf hbase-1.2.1-bin.tar.gz -C /export/servers

5. Benennen Sie das Dekomprimierungsverzeichnis um

  • mv hbase-1.2.1 hbase

6. Ändern Sie die Konfigurationsdatei

Sie müssen das Hadoop-Installationsverzeichnis in den Ordner /etc/hadoop legen

  • core-site.xml
  • hdfs-site.xml

Sie müssen die beiden oben genannten Hadoop-Konfigurationsdateien in den Ordner conf im Hbase-Installationsverzeichnis kopieren.

1. vim hbase-env.sh

#Java-Umgebungsvariablen konfigurieren export JAVA_HOME=/export/servers/jdk
#Geben Sie an, dass der HBase-Cluster von einem externen ZK-Cluster verwaltet wird, und verwenden Sie nicht den integrierten ZK-Cluster-Export HBASE_MANAGES_ZK = false

2. vim hbase-site.xml

       <!-- Geben Sie den Pfad an, unter dem HBase auf HDFS gespeichert ist -->
    <Eigenschaft>
        <name>hbase.rootdir</name>
<Wert>hdfs://node1:9000/hbase</Wert>
    </Eigenschaft>
        <!-- Geben Sie an, dass HBase verteilt ist -->
    <Eigenschaft>
<name>hbase.cluster.distributed</name>
        <Wert>wahr</Wert>
    </Eigenschaft>
        <!-- Geben Sie die Adresse von zk an. Trennen Sie mehrere Adressen mit „,“ -->
    <Eigenschaft>
        <name>hbase.zookeeper.quorum</name>
<Wert>Knoten1:2181,Knoten2:2181,Knoten3:2181</Wert>
    </Eigenschaft>

3. vim Regionserver

#Geben Sie an, welche Knoten HRegionServer sind
Knoten2
Knoten3

4. vim Backup-Master

#Geben Sie an, welche Knoten Standby-Hmaster sind
Knoten2

7. Konfigurieren Sie die HBase-Umgebungsvariablen

vim /etc/profil

export HBASE_HOME=/export/servers/hbase
export PATH=$PATH:$HBASE_HOME/bin

8. Verteilen Sie Hbase-Verzeichnisse und Umgebungsvariablen

scp -r hbase node2:/export/servers
scp -r hbase node3:/export/servers
scp /etc/Profil Knoten2:/etc
scp /etc/Profil Knoten3:/etc

9. Machen Sie die Umgebungsvariablen aller HBase-Knoten wirksam

Auf allen Knoten ausführen

  • Quelle /etc/Profil

4. Starten und stoppen Sie den HBase-Cluster

1. Starten Sie den HBase-Cluster

Starten Sie zuerst die ZK- und Hadoop-Cluster

Dann durch hbase/bin

start-hbase.sh

  • Wo starten Sie dieses Skript? Starten Sie zunächst einen HMaster-Prozess auf der aktuellen Maschine (es ist der aktive HMaster).
  • Starten Sie HRegionServer auf dem entsprechenden Knoten über die Regionservers-Datei
  • Starten Sie den Standby-HMaster auf dem entsprechenden Knoten über die Backup-Master-Datei

2. Stoppen Sie den HBase-Cluster

Über hbase/bin

stop-hbase.sh

Webverwaltungsschnittstelle für HBase-Cluster

1. Nach dem Start des HBase-Clusters

Zugriffsadresse

HMaster-Hostname: 16010

5. Hbase-Shell-Befehlszeilenoperation

hbase/bin/hbase shell Geben Sie den Befehlsvorgang für den Hbase-Shell-Client ein

1. Erstellen Sie eine Tabelle

Erstellen Sie „t_user_info“, „base_info“, „extra_info“.
erstelle 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}

2. Überprüfen Sie, welche Tabellen vorhanden sind

Liste
Ähnlich wie sql:show tables in mysql table

3. Zeigen Sie die Beschreibungsinformationen der Tabelle an

beschreibe 't_user_info'

4. Tabelleneigenschaften ändern

#Ändern Sie die maximale Anzahl von Versionen der Spaltenfamilie alter 't_user_info', NAME => 'base_info', VERSIONS => 3

5. Daten zur Tabelle hinzufügen

setze 't_user_info','00001','base_info:name','zhangsan'
setze 't_user_info','00001','base_info:age','30'
setze 't_user_info','00001','base_info:address','beijing'
setze 't_user_info','00001','extra_info:Schule','shanghai'
setze 't_user_info','00002','base_info:name','lisi'

6. Tabellendaten abfragen

//Abfrage gemäß den Bedingungen get 't_user_info','00001'
erhalte 't_user_info','00001', {COLUMN => 'base_info'}
erhalte 't_user_info','00001', {COLUMN => 'base_info:name'}
Holen Sie sich 't_user_info', '00001', {TIMERANGE => [1544243300660,1544243362660]}
Holen Sie sich 't_user_info', '00001', {COLUMN => 'base_info:age',VERSIONS =>3}
//Vollständiger Tabellenabfrage-Scan 't_user_info'

7. Löschung von Daten

lösche 't_user_info','00001','base_info:name'
lösche alles 't_user_info','00001'

8. Tabelle löschen

deaktiviere 't_user_info'
't_user_info' löschen

6. Das interne Prinzip von hbase

  • Alle Zeilen in der Tabelle sind lexikographisch nach Zeilenschlüssel sortiert.
  • Die Tabelle ist in Zeilenrichtung in mehrere H-Regionen unterteilt
  • Regionen werden nach Größe aufgeteilt (standardmäßig 10 G). Jede Tabelle hat zu Beginn nur eine Region. Die Region wächst weiter. Wenn sie einen Schwellenwert erreicht, wird die H-Region gleichmäßig in zwei neue H-Regionen aufgeteilt. Mit zunehmender Zeilenanzahl in der Tabelle gibt es immer mehr H-Regionen.
  • Hregion ist die kleinste Einheit für verteilten Speicher und Lastausgleich in Hbase. Die kleinste Einheit bedeutet, dass verschiedene HRegions auf verschiedene HRegion-Server verteilt werden können.
  • Obwohl HRegion die kleinste Einheit zum Lastausgleich ist, handelt es sich nicht um die kleinste Einheit für physischen Speicher. HRegion besteht aus einem oder mehreren Stores, und jeder Store speichert eine Spaltenfamilie. Jeder Strore besteht aus einem MemStore und 0 bis mehreren StoreFiles. Schreibvorgänge werden zuerst in den Memstore geschrieben. Wenn die Datenmenge im Memstore einen bestimmten Schwellenwert erreicht (standardmäßig 128 MB oder 1 Stunde), startet Hregionserver den Flashcache-Prozess, um in die Storefile zu schreiben. Jeder Schreibvorgang bildet eine separate Storefile.
  • Wenn die Anzahl der Storefiles einen bestimmten Schwellenwert überschreitet (Standardparameter hbase.hstore.blockingStoreFiles=10), werden mehrere Storefiles zusammengeführt. Wenn die Summe der Storefile-Größen aller Stores in der Region, d. h. die Größe aller Stores, hbase.hregion.max.filesize=10G überschreitet, wird die Region aufgeteilt und die aktuelle Region in zwei Teile geteilt. Der Hmaster weist sie den entsprechenden Regionsservern zu, um einen Lastenausgleich zu erreichen.
  • Jeder HRegionServer hat ein HLog-Objekt. HLog ist eine Klasse, die Write Ahead Log implementiert. Jedes Mal, wenn ein Benutzer Daten in MemStore schreibt, wird auch eine Kopie der Daten in die HLog-Datei geschrieben. Die HLog-Datei stellt in regelmäßigen Abständen neue Dateien bereit und löscht alte Dateien (Daten, die in StoreFile gespeichert wurden). Wenn HRegionServer unerwartet beendet wird, erkennt HMaster dies über Zookeeper. HMaster verarbeitet zunächst die verbleibenden HLog-Dateien, teilt die Protokolldaten verschiedener Regionen auf und legt sie in den Verzeichnissen der entsprechenden Regionen ab. Anschließend werden die ausgefallenen Regionen neu zugewiesen. Der HRegionServer, der diese Regionen empfängt, stellt fest, dass während des Ladevorgangs „Region“ historische HLogs vorhanden sind, die verarbeitet werden müssen. Daher spielt er die Daten im HLog erneut in den MemStore ein und schreibt sie dann in die StoreFiles, um die Datenwiederherstellung abzuschließen.

7. HBase-Adressierungsmechanismus

RegionServer suchen

  • ZooKeeper–> -ROOT-(einzelne Region)–> .META.–> Benutzertabelle

-ROOT-Tabelle

  • Die Tabelle enthält die Regionsliste, in der sich die .META.-Tabelle befindet. Die Tabelle hat nur eine Region.
  • Die Stammregion wird nie geteilt, sodass sichergestellt ist, dass zum Auffinden einer Region höchstens drei Sprünge erforderlich sind.
  • Zookeeper zeichnet den Speicherort der -ROOT--Tabelle auf.

.META.-Tabelle

  • Die Tabelle enthält eine Liste aller Userspace-Regionen und die Serveradresse des RegionServers
  • Jede Zeile der .META.-Tabelle speichert die Standortinformationen einer Region und der Zeilenschlüssel setzt sich aus dem Tabellennamen + der letzten Zeile der Tabelle zusammen.
  • Um den Zugriff zu beschleunigen, werden alle Bereiche der .META.-Tabelle im Speicher abgelegt.

Kontaktieren Sie den Regionserver, um Zieldaten abzufragen

Der Regionserver lokalisiert die Region, in der sich die Zieldaten befinden, und stellt eine Abfrageanforderung

Die Region wird zuerst im Memstore durchsucht und zurückgegeben, wenn sie übereinstimmt

Wenn es nicht im Memstore gefunden wird, durchsucht es die Store-Datei (es kann viele Store-Dateien durchsuchen – Bloomfilter). Der Bloomfilter kann schnell zurückgeben, ob sich der abgefragte Rowkey in dieser Store-Datei befindet, aber es treten auch Fehler auf. Wenn es „nein“ zurückgibt, darf es nicht da sein. Wenn es „ja“ zurückgibt, darf es nicht da sein.

8. Erweiterte Hbase-Anwendungen

Erstellen einer Tabelle

BLOOMFILTER ist standardmäßig der Row Bloom-Filter

  • Für ROW wird bei jedem Einfügen einer Zeile ein Hash des Zeilenschlüssels zum Bloom hinzugefügt.
  • Für ROWCOL wird bei jedem Einfügen einer Zeile ein Hash des Zeilenschlüssels + der Spaltenfamilie + des Spaltenfamilienmodifikators zur Bloom-Tabelle hinzugefügt.

VSRSIONS verwendet standardmäßig 1 Datenversion

  • Wenn wir der Meinung sind, dass es nicht notwendig ist, so viele Daten aufzubewahren, und dass diese jederzeit aktualisiert werden und die alte Version der Daten für uns wertlos ist, können wir durch das Setzen dieses Parameters auf 1 2/3 des Speicherplatzes sparen.

KOMPRESSION Der Standardwert ist KEINE Komprimierung

  • GZIP / LZO / Zippy / Snappy

disable_all 'toplist.*' disable_all unterstützt reguläre Ausdrücke und listet die aktuell passenden Tabellen auf. drop_all ist das gleiche

Vorabpartitionierung von HBase-Tabellen – manuelle Partitionierung

Eine Möglichkeit, das Schreiben im Stapel zu beschleunigen, besteht darin, im Voraus einige leere Regionen zu erstellen. Wenn Daten in HBase geschrieben werden, wird die Datenlast innerhalb des Clusters entsprechend der Regionenpartitionierung ausgeglichen. Reduzieren Sie die automatische Partitionierung, wenn die Daten die Storefile-Größe erreichen

Zeitaufwand, und es gibt noch einen weiteren Vorteil: Durch das vernünftige Design des Zeilenschlüssels können die gleichzeitigen Anforderungen der einzelnen Regionen gleichmäßig verteilt werden (tendenziell einheitlich), um die E/A-Effizienz zu maximieren.

Zeilenschlüsseldesign

Halten Sie die Anzahl der Spaltenfamilien so gering wie möglich, normalerweise 2-3

Zeilenschlüssel

  • Entsprechend den Merkmalen der lexikografischen Reihenfolge sollten die Daten, die stapelweise abgefragt werden müssen, so kontinuierlich wie möglich gespeichert werden (Speer).
  • Fassen Sie die Schlüsselwörter der Abfragebedingungen so weit wie möglich im Zeilenschlüssel zusammen und platzieren Sie die am häufigsten abgefragten Bedingungen so weit vorne wie möglich.
  • Es wird empfohlen, dass der Zeilenschlüssel so kurz wie möglich ist und 16 Bytes nicht überschreitet.

Minimieren Sie die Größe von Zeilenschlüsseln und Spaltenfamilien. In HBase wird ein Wert immer zusammen mit seinem Schlüssel übertragen.
Jede Zelle in HFile speichert den Zeilenschlüssel. Wenn der Zeilenschlüssel zu groß ist, wirkt sich dies auf die Speichereffizienz aus.
MemStore speichert einen Teil der Daten im Speicher. Wenn das Rowkey-Feld zu lang ist, verringert sich die effektive Speichernutzung und das System kann nicht mehr Daten zwischenspeichern, was die Abrufeffizienz verringert.

Es wird empfohlen, das höchste Bit des Zeilenschlüssels als Hash-Feld zu verwenden, das vom Programm zufällig generiert wird, und das niedrigste Bit als Zeitfeld. Dadurch wird die Wahrscheinlichkeit einer gleichmäßigen Datenverteilung in jedem RegionServer erhöht, um einen Lastenausgleich zu erreichen. (Schild)

Rowkey-Widerspruch

  • Die Zeilen in HBase werden in der lexikografischen Reihenfolge des Zeilenschlüssels sortiert. Dieses Design optimiert den Scanvorgang und ermöglicht die Speicherung verwandter Zeilen und Zeilen, die zusammen gelesen werden, an benachbarten Speicherorten zum einfachen Scannen. Eine schlechte Zeilenschlüsselgestaltung ist jedoch die Ursache für Hotspots.

Hotspot-Auflösung

  • Fügen Sie Salt hinzu, um vor dem Zeilenschlüssel eine zufällige Zeichenfolge einzufügen
  • Beim Hashen einer Zeile wird immer ein Präfix mit einem Salt versehen.
  • Durch das Umkehren von Zeilenschlüsseln mit fester Länge oder numerischen Zeilenschlüsseln geht die Reihenfolge der Zeilenschlüssel verloren.
  • Zeitstempelumkehr

Sie können Long.Max_Value - Zeitstempel verwenden, um ihn an das Ende des Schlüssels anzuhängen, z. B. [Schlüssel][Reverse_Timestamp]. Der neueste Wert von [Schlüssel] kann durch Scannen von [Schlüssel] ermittelt werden, um den ersten Datensatz von [Schlüssel] zu erhalten, da der Zeilenschlüssel in HBase geordnet ist und der erste Datensatz die zuletzt eingegebenen Daten sind.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Allgemeines MapReduce-Programm zum Kopieren von HBase-Tabellendaten
  • Schritte zum Erstellen einer verteilten Hadoop+HBase+ZooKeeper-Clusterumgebung
  • Zusammenfassung der 10 gängigen HBase-Betriebs- und Wartungstools
  • HBase-Einführung
  • Detaillierte Analyse der Vorteile von hbase
  • Tutorial zur Hbase-Spaltenspeicherung
  • Detaillierte Erläuterung des Datenmodells von HBase-Tabellen

<<:  Zusammenfassung verschiedener MySQL-Installationsmethoden und Konfigurationsprobleme

>>:  So vereinfachen Sie Redux mit Redux Toolkit

Artikel empfehlen

Lösen Sie das Problem beim Ausführen von Jupyter Notebook auf dem Server

Inhaltsverzeichnis Auf dem Server läuft Jupyter N...

Kurze Analyse der verschiedenen Versionen des mysql.data.dll-Treibers

Hier ist der MySQL-Treiber mysql.data.dll Beachte...

Detaillierte grafische Erläuterung der MySql5.7.18-Zeichensatzkonfiguration

Hintergrund: Vor langer Zeit (2017.6.5, der Artik...

Zusammenfassung von über 50 Hilfsfunktionen in JavaScript

JavaScript kann viele tolle Dinge. Dieser Artikel...

Berechtigungen für Cross-Origin-Image-Ressourcen (CORS-fähiges Image)

Das HTML-Spezifikationsdokument führt das Crossor...

So erhalten Sie USB-Scannerdaten mit js

In diesem Artikel wird der spezifische Prozess zu...

So vereinheitlichen Sie den Zeichensatz einer vorhandenen MySQL-Datenbank

Vorwort In der Datenbank sind einige Datentabelle...

So installieren Sie Tomcat-8.5.39 auf centos7.6

So installieren Sie Tomcat-8.5.39 auf CentOS 7.6....

Asynchroner Lebenszyklus von AsyncHooks in Node8

Async Hooks ist eine neue Funktion von Node8. Sie...

Zusammenfassung häufig verwendeter Escape-Zeichen in HTML

Die in HTML häufig verwendeten Escape-Zeichen wer...