Daten von HBase zu Cloud Bigtable migrieren

In diesem Artikel werden Überlegungen und Prozesse für das Migrieren der Daten von einem Apache HBase-Cluster zu einem Cloud Bigtable-Cluster auf der Google Cloud Platform (GCP) beschrieben.

Bevor Sie mit der Migration beginnen, bedenken Sie die Auswirkungen auf die Leistung, das Schemadesign von Cloud Bigtable, die Auswirkungen auf die Authentifizierung und Autorisierung und den Funktionsumfang von Cloud Bigtable.

Auswirkungen auf die Leistung

Bei typischer Arbeitslast liefert Cloud Bigtable genau vorhersehbare Leistungen. Wenn alles reibungslos funktioniert, können Sie abhängig vom Speichertyp des Clusters für jeden Knoten im Cloud Bigtable-Cluster folgende Leistung erwarten.

Speichertyp Lesevorgänge   Schreibvorgänge Scans
SSD 10.000 Zeilen pro Sekunde bei 6 ms oder 10.000 Zeilen pro Sekunde bei 6 ms 220 MB/s
HDD 500 Zeilen pro Sekunde bei 200 ms oder 10.000 Zeilen pro Sekunde bei 50 ms 180 MB/s

Die in der Liste aufgeführten Schätzwerte basieren auf Zeilen mit 1 KB Daten. Außerdem beziehen sie sich auf eine Arbeitslast mit ausschließlich Lese- oder Schreibvorgängen. Die Leistung weicht bei gemischten Arbeitslasten mit Lese- und Schreibvorgängen ab.

Diese Leistungsdaten sind Richtlinien, keine verbindlichen Angaben. Die Leistung pro Knoten kann je nach Arbeitslast und der typischen Größe des Wertes einer Anfrage oder Antwort variieren. Weitere Informationen finden Sie unter Leistung in Cloud Bigtable verstehen.

Schemadesign von Cloud Bigtable

Der Entwurfsprozess für ein Schema von Cloud Bigtable unterscheidet sich vom Entwurfsprozess für ein Schema einer relationalen Datenbank. Lesen Sie vor dem Entwerfen des Schemas die Informationen zu den Konzepten, die unter Schema entwerfen aufgeführt werden.

Sorgen Sie außerdem dafür, dass beim Schema die empfohlenen Größenbeschränkungen eingehalten werden. Als Richtlinie sollten einzelne Zeilen nicht größer als 100 MB und einzelne Werte nicht größer als 10 MB sein. In einigen Szenarien müssen ggf. größere Werte gespeichert werden. Die Speicherung großer Werte kann sich auf die Leistung auswirken, da für die Extraktion großer Werte mehr Zeit und Speicherplatz benötigt wird. Entscheiden Sie in diesen Szenarien von Fall zu Fall.

Authentifizierung und Autorisierung

Lesen Sie die Informationen zu den vorhandenen HBase-Authentifizierungs- und Autorisierungsprozessen, bevor Sie die Zugriffssteuerung für Cloud Bigtable entwerfen.

Cloud Bigtable verwendet die Standardmechanismen für die Authentifizierung der GCP und Cloud Identity and Access Management, um Zugriffssteuerungsfunktionen bereitzustellen. Entsprechend wird die vorhandene Autorisierung auf HBase in Cloud IAM konvertiert. Sie können die vorhandenen Hadoop-Gruppen, die Zugriffssteuerungsmechanismen für HBase ermöglichen, verschiedenen Dienstkonten zuordnen.

Cloud Bigtable ermöglicht Zugriffssteuerung auf Instanzebene, enthält jedoch keine detailgenaue Steuerung auf Tabellenebene. Eine Möglichkeit zur Bereitstellung eines Detaillierungsgrades auf Tabellenebene besteht darin, Tabellen mit ähnlichen Zugriffsmustern unter einer Cloud Bigtable-Instanz zu gruppieren. Bei diesem Ansatz müssen Sie jedoch ggf. mehrere Cloud Bigtable-Instanzen verwenden, um alle Tabellen zu migrieren.

Weitere Informationen finden Sie unter Zugriffssteuerung.

HBase zu Cloud Bigtable migrieren

Exportieren Sie die Daten als eine Reihe von Hadoop-Sequenzdateien, um sie von Hbase zu Cloud Bigtable zu migrieren. Dieses von HBase verwendete Dateiformat besteht aus binären Schlüssel/Wert-Paaren.

Führen Sie die folgenden Schritte aus, um die HBase-Tabelle zu Cloud Bigtable zu migrieren:

  1. Erfassen Sie die Details von HBase.
  2. Exportieren Sie die HBase-Tabellen in Sequenzdateien.
  3. Verschieben Sie die Sequenzdateien in Cloud Storage.
  4. Importieren Sie die Sequenzdateien mithilfe von Cloud Dataflow in Cloud Bigtable.
  5. Überprüfen Sie die Verschiebung.

Migration planen: Details von HBase erfassen

Erfassen Sie die folgenden Informationen aus dem vorhandenen HBase-Cluster, um die Migration vorzubereiten. Sie benötigen die Informationen, um die Zieltabelle zu erstellen.

  • Liste der Tabellen
  • Anzahl der Zeilen
  • Anzahl der Zellen
  • Informationen zu Spaltenfamilien (einschließlich Gültigkeitsdauer, maximale Anzahl von Versionen)

Diese Informationen zu einer Quelltabelle können einfach mit dem folgenden Skript erfasst werden, das das Ergebnis auf dem HDFS speichert:

#!/usr/bin/env bash
# Table Name is the Source HBase Table Name
TABLENAME="$1"
# Export Directory will be located on HDFS
EXPORTDIR="$2"
hadoop fs -mkdir -p ${EXPORTDIR}
hbase shell << EOQ
describe ${TABLENAME}
EOQ | hadoop fs -put - ${EXPORTDIR}/${TABLENAME}-schema.json
hbase shell << EOQ
get_splits ${TABLENAME}
EOQ | hadoop fs -put - ${EXPORTDIR}/${TABLENAME}-splits.txt

HBase-Tabelle in Cloud Storage exportieren

Wenn Sie die grundlegenden Informationen zu den HBase-Tabellen, die migriert werden sollen, kennen, müssen Sie die Tabelle in Sequenzdateien exportieren und in Cloud Storage verschieben. Führen Sie die folgenden Schritte aus, um sicherzustellen, dass der Cluster die Anforderungen auf die GCP erfüllt, bevor Sie mit der Migration von Onlinedaten beginnen:

  • Cloud Storage-Connector installieren

    Wenn Sie Onlinedaten mit distcp migrieren möchten, müssen Sie den Cloud Storage-Connector konfigurieren. Identifizieren Sie zuerst das HDFS-Dateisystem, mit dem die Daten für die Migration verwaltet werden. Bestimmen Sie als Nächstes, welcher Clientknoten im Hadoop-Cluster Zugriff auf dieses Dateisystem hat. Installieren Sie schließlich den Connector für den Clientknoten. Eine ausführliche Installationsanleitung finden Sie unter Installation des Cloud Storage-Connectors.

  • Cloud SDK installieren

    Installieren Sie das Cloud SDK auf dem Clientknoten des Hadoop-Clusters, auf dem die Migration initiiert wird, um Daten mit distcp oder gsutil zu migrieren. Eine ausführliche Installationsanleitung finden Sie in der Cloud SDK-Dokumentation.

HBase-Tabelle in HDFS exportieren

Exportieren Sie als Nächstes die HBase-Tabelle, die migriert werden soll, an einen Speicherort im Hadoop-Cluster. Angenommen, der Name der HBase-Tabelle lautet [MY_NEW_TABLE]. Das Zielverzeichnis befindet sich im Nutzerverzeichnis in HDFS. Exportieren Sie die HBase-Tabelle mit den folgenden Befehlen als Sequenzdateien:

TABLENAME="my-new-table"
EXPORTDIR=/usr/[USERNAME]/hbase-${TABLENAME}-export
hadoop fs -mkdir -p ${EXPORTDIR}
MAXVERSIONS=2147483647
cd ${HBASE_HOME}
bin/hbase org.apache.hadoop.hbase.mapreduce.Export my-new-table \
    /user/hbase-${TABLENAME} \
    -export ${MAXVERSIONS}
bin/hbase org.apache.hadoop.hbase.mapreduce.Export \
    -Dmapred.output.compress=true \
    -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
    -DRAW_SCAN=true \
    -Dhbase.client.scanner.caching=100 \
    -Dmapred.map.tasks.speculative.execution=false \
    -Dmapred.reduce.tasks.speculative.execution=false \
    ${TABLENAME} ${EXPORTDIR} ${MAXVERSIONS}

Sequenzdateien von HDFS in Cloud Storage migrieren

Im nächsten Schritt verschieben Sie die Sequenzdateien in einen Cloud Storage-Bucket. Abhängig von der Datengröße, der Anzahl von Dateien, der Datenquelle und der verfügbaren Bandbreite können Sie eine entsprechende Option zum Verschieben der Sequenzdateien in Cloud Storage auswählen: Transfer Appliance, distcp, gsutil oder Storage Transfer Service.

Mit Transfer Appliance

In den folgenden Fällen bietet sich die Verwendung von Transfer Appliance zur Datenmigration an:

  • Sie möchten die ausgehende Bandbreite nach einem Zeitplan steuern
  • Die Größe der Daten liegt über 20 TB

Bei dieser Option müssen Sie kein zusätzliches Netzwerk von Google erwerben oder bereitstellen. Die End-to-End-Übertragungszeit (Appliance-Lieferzeit, Rehydration usw.) beträgt durchschnittlich 100 Mbit/s.

Verschieben Sie Daten mit Transfer Appliance, indem Sie die Sequenzdateien in die Appliance kopieren und diese dann zurück an Google senden. Google lädt die Daten auf die GCP. Weitere Informationen finden Sie in dieser Transfer Appliance-Dokumentation.

Mit distcp

In den folgenden Fällen bietet sich die Verwendung von distcp zur Datenmigration an:

  • Für die Migration steht eine Bandbreite von mehr als 100 Mbit/s zur Verfügung
  • Der Cloud Storage-Connector und das Cloud SDK können in der Hadoop-Quellumgebung installiert werden
  • Die Verwaltung eines neuen Hadoop-Auftrags für die Datenmigration ist akzeptabel
  • Die Datengröße liegt bei weniger als 20 TB

Verwenden Sie den Clientknoten des Hadoop-Clusters, für den der Cloud Storage-Connector konfiguriert wurde, um einen MapReduce-Auftrag zum Kopieren der Sequenzdateien in Cloud Storage zu übertragen, wenn Sie die Daten mit distcp verschieben möchten:

hadoop distcp hdfs://[NAMENODE]:[NAMENODE_PORT]/[SOURCE_DIRECTORY] \
gs://[BUCKET]/DESTINATION_DIRECTORY]

Mit gsutil

In den folgenden Fällen bietet sich die Verwendung von gsutil zur Datenmigration an:

  • Für die Migration steht eine Bandbreite von mehr als 100 Mbit/s zur Verfügung
  • Das Cloud SDK kann in der Quell-Hadoop-Umgebung installiert werden
  • Die Verwaltung eines neuen Hadoop-Auftrags für die Datenmigration ist nicht akzeptabel
  • Die Datengröße liegt bei weniger als 10 TB

Verwenden Sie den Clientknoten des Hadoop-Clusters zum Initiieren der Datenmigration, um Daten mit gsutil zu verschieben:

TABLENAME="my-new-table"
EXPORTDIR=/usr/[USERNAME]/hbase-${TABLENAME}-export
gsutil -m cp -r  ${EXPORTDIR} gs://[BUCKET]

Mit Storage Transfer Service

In den folgenden Fällen bietet sich die Verwendung des Storage Transfer Service für die Datenmigration an:

  • Die Datenquelle ist ein Amazon S3-Bucket, ein HTTP-/HTTPS-Speicherort oder ein Cloud Storage-Bucket
  • Die Datengröße liegt bei weniger als 10 TB

Der Storage Transfer Service bietet Optionen, die Datenübertragungen sowie die Synchronisierung zwischen Datenquellen und Datensenken vereinfachen. Beispiele:

  • Einmalige oder wiederkehrende Übertragungsvorgänge planen
  • Vorhandene Objekte im Ziel-Bucket löschen, wenn es kein entsprechendes Objekt in der Quelle gibt
  • Quellobjekte nach der Übertragung löschen
  • Regelmäßige Synchronisierung von Datenquelle zu Datensenke mit erweiterten Filtern planen, die auf dem Datum der Dateierstellung, auf Dateinamensfiltern und auf für den Datenimport bevorzugten Tageszeiten basieren

Weitere Informationen finden Sie in dieser Dokumentation zum Storage Transfer Service.

Zieltabelle erstellen

Im nächsten Schritt erstellen Sie die Zieltabelle in Cloud Bigtable.

Installieren Sie zuerst das Cloud Bigtable-Clienttool cbt mit dem gcloud-Befehlszeilentool.

gcloud components update
gcloud components install cbt

Erstellen Sie dann eine Tabelle in Cloud Bigtable mit den entsprechenden Spaltenfamilien aus der vorherigen Datenerfassung.

Teilen Sie die Zieltabelle bei der Erstellung anhand der vorhandenen Aufteilungen auf. Dies verbessert die Ladeleistung für Bulk-Uploads.

Angenommen, Sie haben die folgenden Aufteilungen:

'15861', '29374', '38173', '180922', '203294', '335846', '641111', '746477', '807307', '871053', '931689', '1729462', '1952670', '4356485', '4943705', '5968738', '6917370', '8993145', '10624362', '11309714', '12056747', '12772074', '14370672', '16583264', '18835454', '21194008', '22021148', '23702800', '25532516', '55555555'

Richten Sie dann ein Standardprojekt und eine Cloud Bigtable-Instanz für das cbt-Tool ein, sodass Ihr Nutzerkonto folgendermaßen aussieht:

$ cat > ${HOME}/.cbtrc << EOF
project = [YOUR-GCP-PROJECT]
instance = [BIGTABLE-INSTANCE-NAME]
EOF

Erstellen Sie diese Aufteilungen in der Zieltabelle:

cbt -instance my-instance createtable my-new-table \
splits=15861,29374,38173,180922,203294,335846,641111,746477,807307,871053,931689,\
1729462,1952670,4356485,4943705,5968738,6917370,8993145,10624362,11309714,\
12056747,12772074,14370672,16583264,18835454,21194008,22021148,23702800,\
5532516,55555555

Erstellen Sie Spaltenfamilien in der Zieltabelle, die mit den zuvor ermittelten Spaltenfamilien übereinstimmen. Wenn Sie beispielsweise entdeckt haben, dass es die zwei Spaltenfamilien cf1 und cf2 gibt, erstellen Sie die Spaltenfamilie cf1 in Cloud Bigtable so:

cbt createfamily my-new-table cf1

Erstellen Sie die Spaltenfamilie cf2 so:

cbt createfamily my-new-table cf2

Es ist wichtig, nach dem Erstellen der Spaltenfamilien die Richtlinie zur automatischen Speicherbereinigung für jede Spaltenfamilie zu aktualisieren, u. a. das maximale Alter und die maximale Anzahl von Versionen für die Werte in der Spaltenfamilie. Das müssen Sie auch dann, wenn Sie die HBase-Standardeinstellungen für die HBase-Tabelle verwendet haben, da die nativen Tools von Cloud Bigtable eine andere Standardeinstellung verwenden als HBase.

cbt setgcpolicy [TABLE] [FAMILY] ( maxage=[D]| maxversions=[N] )

HBase-Daten mit Cloud Dataflow in Cloud Bigtable importieren

Es gibt zwei Möglichkeiten für das Importieren von Daten in Cloud Bigtable. Weitere Informationen finden Sie in der Cloud Bigtable-Dokumentation unter Sequenzdateien importieren.

Beachten Sie die folgenden Tipps:

  • Achten Sie darauf, maxNumWorkers festzulegen, um die Leistung beim Datenupload zu verbessern. Mit diesem Wert wird sichergestellt, dass der Importjob über genügend Compute-Leistung verfügt, um den Vorgang in einer akzeptablen Zeit abzuschließen, aber nicht so viel, dass der Cloud Bigtable-Cluster überlastet wird

  • Überwachen Sie während des Imports die CPU-Auslastung des Cloud Bigtable-Clusters. Weitere Informationen zu diesem Thema finden Sie im Dokument zu Monitoring von Cloud Bigtable im Abschnitt zur CPU-Auslastung. Wenn die CPU-Auslastung im Cloud Bigtable-Cluster zu hoch ist, müssen Sie ggf. weitere Knoten hinzufügen. Es kann bis zu 20 Minuten dauern, bis sich die Leistung aufgrund der zusätzlichen Knoten erhöht

Weitere Informationen zum Überwachen der Cloud Bigtable-Instanz finden Sie unter Cloud Bigtable-Instanzen überwachen.

Importierte Daten in Cloud Bigtable überprüfen

Sie können verschiedene Prüfungen durchführen, um die importierten Daten zu validieren:

  • Auf übereinstimmende Zeilenanzahl prüfen. Die Gesamtzahl der Zeilen wird vom Cloud Dataflow-Job angegeben. Dieser Wert muss mit der Anzahl der Zeilen der HBase-Quelltabelle übereinstimmen
  • Stichprobenprüfung mit bestimmten Zeilenabfragen. Sie können eine bestimmte Gruppe von Zeilenschlüsseln aus der Quelltabelle auswählen und damit eine Abfrage der Zieltabelle ausführen, um deren Übereinstimmung zu gewährleisten:
cbt lookup [destination-table] [rowkey1]
cbt lookup [destination-table] [rowkey2]

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Von Hadoop zur GCP migrieren