Daten von HBase zu Cloud Bigtable migrieren

In diesem Artikel werden Überlegungen und Verfahren zur Migration der Daten von einem Apache HBase-Cluster zu einem Cloud Bigtable-Cluster in Google Cloud beschrieben.

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

Auswirkungen auf die Leistung

Bei typischer Arbeitslast liefert Bigtable genau vorhersehbare Leistungen. Weitere Informationen finden Sie unter Informationen zur Leistung in Bigtable.

Bigtable-Schemadesign

Der Entwurfsprozess für ein Bigtable-Schema 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ößenlimits 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 Arbeitsspeicher 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 Bigtable entwerfen.

Bigtable verwendet die Standardmechanismen für die Authentifizierung von Google Cloud und die Identitäts- und Zugriffsverwaltung, um Zugriffssteuerungsfunktionen bereitzustellen. Entsprechend wird die auf HBase vorhandene Autorisierung in IAM konvertiert. Sie können die vorhandenen Hadoop-Gruppen, die Zugriffssteuerungsmechanismen für HBase ermöglichen, verschiedenen Dienstkonten zuordnen.

Mit Bigtable können Sie den Zugriff auf Projekt-, Instanz- und Tabellenebene verwalten. Weitere Informationen finden Sie unter Zugriffssteuerung.

Von HBase zu Bigtable migrieren

Exportieren Sie die Daten als eine Reihe von Hadoop-Sequenzdateien, um sie von Hbase zu 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 Bigtable zu migrieren:

  1. Erfassen Sie die Details von HBase.
  2. Exportieren Sie die HBase-Tabellen in Sequenzdateien.
  3. Verschieben Sie die Sequenzdateien nach Cloud Storage.
  4. Importieren Sie die Sequenzdateien mithilfe von Dataflow in Bigtable.
  5. Prü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

Nachdem Sie die grundlegenden Informationen zu den HBase-Tabellen, die migriert werden sollen, gesammelt haben, müssen Sie die Tabelle in Sequenzdateien exportieren und nach Cloud Storage verschieben. Führen Sie die folgenden Schritte aus, um zu prüfen, ob der Cluster die Zugangsanforderungen für Google Cloud 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 installieren und konfigurieren. Identifizieren Sie zuerst das HDFS-Dateisystem, mit dem die zu migrierenden Daten 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 Cloud Storage-Connector installieren.

  • 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
bin/hbase org.apache.hadoop.hbase.mapreduce.Export \
    -Dmapred.output.compress=true \
    -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
    -Dhbase.client.scanner.caching=100 \
    -Dmapred.map.tasks.speculative.execution=false \
    -Dmapred.reduce.tasks.speculative.execution=false \
    ${TABLENAME} ${EXPORTDIR} ${MAXVERSIONS}

Sequenzdateien von HDFS zu 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 nach 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 in Google Cloud. 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

Wenn Sie die Daten mit distcp verschieben möchten, verwenden Sie den Clientknoten des Hadoop-Clusters, für den der Cloud Storage-Connector konfiguriert wurde. Senden Sie von dort einen MapReduce-Job zum Kopieren der Sequenzdateien nach Cloud Storage:

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

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

gcloud components update
gcloud components install cbt

Erstellen Sie dann eine Tabelle in 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.

Beispiel: 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 Bigtable-Instanz für das cbt-Tool ein, sodass Ihr Nutzerkonto so 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 in Übereinstimmung mit den zuvor ermittelten Spaltenfamilien. Wenn Sie beispielsweise zwei Spaltenfamilien, cf1 und cf2, ermittelt haben, erstellen Sie die Spaltenfamilie cf1 in 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, unter anderem das maximale Alter und die maximale Anzahl von Versionen für die Werte in der Spaltenfamilie. Das müssen Sie auch dann tun, wenn Sie die HBase-Standardeinstellungen für die HBase-Tabelle verwendet haben, da die nativen Tools von Bigtable eine andere Standardeinstellung verwenden als HBase.

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

HBase-Daten mit Dataflow in Bigtable importieren

Weitere Informationen zum Importieren von Daten in Bigtable finden Sie in der Bigtable-Dokumentation unter Daten importieren und exportieren.

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 Rechenleistung verfügt, um den Vorgang in einer akzeptablen Zeit abzuschließen, aber nicht so viel, dass der Bigtable-Cluster überlastet wird

  • Achten Sie während des Imports auf die CPU-Auslastung des Bigtable-Clusters. Weitere Informationen zu diesem Thema finden Sie im Dokument zum Monitoring von Bigtable im Abschnitt zur CPU-Auslastung. Wenn die CPU-Auslastung im 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 Bigtable-Instanz finden Sie unter Bigtable-Instanzen überwachen.

Importierte Daten in 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 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