Questa pagina descrive considerazioni e procedure per la migrazione dei dati da un cluster Apache HBase a un'istanza Bigtable su Google Cloud.
Per eseguire la migrazione dei dati a Bigtable da un cluster HBase ospitato su un servizio Google Cloud, come Dataproc o Compute Engine, consulta Migrazione di HBase da Google Cloud a Bigtable.
Prima di iniziare questa migrazione, devi valutare le implicazioni in termini di prestazioni, la progettazione dello schema di Bigtable, il tuo approccio all'autenticazione e all'autorizzazione e il set di funzionalità di Bigtable.
Considerazioni pre-migrazione
Questa sezione suggerisce alcuni aspetti da rivedere e riflettere prima di iniziare la migrazione.
Prestazioni
In un carico di lavoro tipico, Bigtable offre prestazioni altamente prevedibili. Assicurati di comprendere i fattori che influiscono sulle prestazioni di Bigtable prima di eseguire la migrazione dei dati.
Progettazione dello schema Bigtable
Nella maggior parte dei casi, in Bigtable puoi utilizzare lo stesso design dello schema che in HBase. Se vuoi modificare lo schema o il tuo caso d'uso sta cambiando, rivedi i concetti descritti in Progettazione dello schema prima di eseguire la migrazione dei dati.
autentica e autorizza
Prima di progettare controllo dell'accesso per Bigtable, esamina i processi di autenticazione e autorizzazione HBase esistenti.
Bigtable utilizza i meccanismi standard di Google Cloud per l'autenticazione e Identity and Access Management per fornire controllo dell'accesso dell'accesso, in modo da convertire l'autorizzazione esistente su HBase in IAM. Puoi mappare i gruppi Hadoop esistenti che forniscono meccanismi di controllo dell'accesso per HBase ad account di servizio diversi.
Bigtable consente di controllare l'accesso a livello di progetto, istanza e tabella. Per ulteriori informazioni, vedi Controllo dell'accesso.
Migrazione di HBase a Bigtable
Per eseguire la migrazione dei dati da HBase a Bigtable, devi esportare uno snapshot HBase per ogni tabella in Cloud Storage e quindi importare i dati in Bigtable. Questi passaggi riguardano un singolo cluster HBase e sono descritti dettagliatamente nelle sezioni successive.
- Interrompi l'invio di scritture al cluster HBase.
- Acquisisci snapshot delle tabelle del cluster HBase.
- Esporta i file di snapshot in Cloud Storage.
- Calcola gli hash ed esportali in Cloud Storage.
- Creare tabelle di destinazione in Bigtable.
- Importare i dati HBase da Cloud Storage in Bigtable.
- Convalida i dati importati.
- Instrada le scritture a Bigtable.
Prima di iniziare
Crea un bucket Cloud Storage per archiviare gli snapshot. Crea il bucket nella stessa località in cui prevedi di eseguire il job Dataflow.
Crea un'istanza Bigtable per archiviare le nuove tabelle.
Identifica il cluster Hadoop che stai esportando. Puoi eseguire i job per la migrazione direttamente sul cluster HBase o su un cluster Hadoop separato che dispone della connettività di rete ai nodi Namenode e Datanodes del cluster HBase.
Installa e configura il connettore Cloud Storage su ogni nodo nel cluster Hadoop, nonché sull'host da cui viene avviato il job. Per la procedura dettagliata di installazione, consulta Installazione del connettore Cloud Storage.
Apri una shell di comando su un host in grado di connettersi al cluster HBase e al progetto Bigtable. Qui potrai completare i passaggi successivi.
Scarica lo strumento di traduzione degli schemi:
wget BIGTABLE_HBASE_TOOLS_URL
Sostituisci
BIGTABLE_HBASE_TOOLS_URL
con l'URL del più recenteJAR with dependencies
disponibile nel repository Maven dello strumento. Il nome del file è simile ahttps://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-1.x-tools/1.24.0/bigtable-hbase-1.x-tools-1.24.0-jar-with-dependencies.jar
.Per trovare l'URL o scaricare manualmente il JAR:
- Vai al repository.
- Fai clic sul numero della versione più recente.
- Identifica
JAR with dependencies file
(di solito in alto). - Fai clic con il pulsante destro del mouse e copia l'URL oppure fai clic per scaricare il file.
Scarica lo strumento di importazione:
wget BIGTABLE_BEAM_IMPORT_URL
Sostituisci
BIGTABLE_BEAM_IMPORT_URL
con l'URL del più recenteshaded JAR
disponibile nel repository Maven dello strumento. Il nome del file è simile ahttps://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-beam-import/1.24.0/bigtable-beam-import-1.24.0-shaded.jar
.Per trovare l'URL o scaricare manualmente il JAR:
- Vai al repository.
- Fai clic sul numero della versione più recente.
- Fai clic su Download.
- Passa il mouse su shaded.jar.
- Fai clic con il pulsante destro del mouse e copia l'URL oppure fai clic per scaricare il file.
Imposta le seguenti variabili di ambiente:
#Google Cloud export PROJECT_ID=PROJECT_ID export INSTANCE_ID=INSTANCE_ID export REGION=REGION export CLUSTER_NUM_NODES=CLUSTER_NUM_NODES #JAR files export TRANSLATE_JAR=TRANSLATE_JAR export IMPORT_JAR=IMPORT_JAR #Cloud Storage export BUCKET_NAME="gs://BUCKET_NAME" export MIGRATION_DESTINATION_DIRECTORY="$BUCKET_NAME/hbase-migration-snap" #HBase export ZOOKEEPER_QUORUM=ZOOKEPER_QUORUM export ZOOKEEPER_PORT=2181 export ZOOKEEPER_QUORUM_AND_PORT="$ZOOKEEPER_QUORUM:$ZOOKEEPER_PORT" export MIGRATION_SOURCE_DIRECTORY=MIGRATION_SOURCE_DIRECTORY
Sostituisci quanto segue:
PROJECT_ID
: il progetto Google Cloud in cui si trova l'istanzaINSTANCE_ID
: l'identificatore dell'istanza Bigtable in cui stai importando i datiREGION
: una regione che contiene uno dei cluster nell'istanza Bigtable. Esempio:northamerica-northeast2
CLUSTER_NUM_NODES
: il numero di nodi nell'istanza BigtableTRANSLATE_JAR
: nome e numero di versione del file JARbigtable hbase tools
che hai scaricato da Maven. Il valore deve essere simile abigtable-hbase-1.x-tools-1.24.0-jar-with-dependencies.jar
.IMPORT_JAR
: nome e numero di versione del file JARbigtable-beam-import
che hai scaricato da Maven. Il valore deve essere simile abigtable-beam-import-1.24.0-shaded.jar
.BUCKET_NAME
: il nome del bucket Cloud Storage in cui vengono archiviati gli snapshotZOOKEEPER_QUORUM
: l'host del guardiano dello zoo a cui si collegherà lo strumento, nel formatohost1.myownpersonaldomain.com
MIGRATION_SOURCE_DIRECTORY
: la directory sul tuo host HBase che contiene i dati di cui vuoi eseguire la migrazione, nel formatohdfs://host1.myownpersonaldomain.com:8020/hbase
(Facoltativo) Per confermare che le variabili sono state impostate correttamente, esegui il comando
printenv
per visualizzare tutte le variabili di ambiente.
Interrompi invio di scritture a HBase
Prima di creare snapshot delle tabelle HBase, interrompi l'invio delle scritture al cluster HBase.
Acquisisci snapshot delle tabelle HBase
Quando il cluster HBase non importa più dati, acquisisci uno snapshot di ogni tabella di cui prevedi di eseguire la migrazione a Bigtable.
Inizialmente, uno snapshot ha un ingombro di archiviazione minimo sul cluster HBase, ma nel tempo potrebbe raggiungere le stesse dimensioni della tabella originale. Lo snapshot non consuma alcuna risorsa della CPU.
Esegui questo comando per ogni tabella, utilizzando un nome univoco per ogni snapshot:
echo "snapshot 'TABLE_NAME', 'SNAPSHOT_NAME'" | hbase shell -n
Sostituisci quanto segue:
TABLE_NAME
: il nome della tabella HBase da cui stai esportando i dati.SNAPSHOT_NAME
: il nome del nuovo snapshot
Esporta gli snapshot HBase in Cloud Storage
Dopo aver creato gli snapshot, devi esportarli. Quando esegui job di esportazione su un cluster HBase di produzione, monitora il cluster e altre risorse HBase per assicurarti che i cluster rimangano in uno stato buono.
Per ogni snapshot da esportare, esegui questo comando:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM_AND_PORT -snapshot SNAPSHOT_NAME \
-copy-from $MIGRATION_SOURCE_DIRECTORY \
-copy-to $MIGRATION_DESTINATION_DIRECTORY/data
Sostituisci SNAPSHOT_NAME
con il nome dello snapshot da esportare.
Calcolare ed esportare gli hash
Poi, crea gli hash da utilizzare per la convalida al termine della migrazione.
HashTable è uno strumento di convalida fornito da HBase che calcola gli hash per
gli intervalli di righe e li esporta in file. Puoi eseguire un job sync-table
nella
tabella di destinazione in modo da associare gli hash e acquisire fiducia nell'integrità dei
dati di cui è stata eseguita la migrazione.
Esegui questo comando per ogni tabella esportata:
hbase org.apache.hadoop.hbase.mapreduce.HashTable --batchsize=32000 --numhashfiles=20 \
TABLE_NAME $MIGRATION_DESTINATION_DIRECTORY/hashtable/TABLE_NAME
Sostituisci quanto segue:
TABLE_NAME
: il nome della tabella HBase per cui hai creato ed esportato uno snapshot
Crea tabelle di destinazione
Il passaggio successivo consiste nel creare una tabella di destinazione nell'istanza Bigtable per ogni snapshot esportato. Utilizza un account con autorizzazione bigtable.tables.create
per l'istanza.
Questa guida utilizza lo strumento Bigtable Schema Translation, che crea automaticamente la tabella. Tuttavia, se non vuoi che lo schema di Bigtable corrisponda esattamente allo schema HBase, puoi creare una tabella utilizzando lo strumento a riga di comando cbt
o la console Google Cloud.
Lo strumento Bigtable Schema Translation acquisisce lo schema della tabella HBase, che include il nome della tabella, le famiglie di colonne, i criteri di garbage collection e le suddivisioni. Viene quindi creata una tabella simile in Bigtable.
Per ogni tabella da importare, esegui il comando seguente per copiare lo schema da HBase a Bigtable.
java \
-Dgoogle.bigtable.project.id=$PROJECT_ID \
-Dgoogle.bigtable.instance.id=$INSTANCE_ID \
-Dgoogle.bigtable.table.filter=TABLE_NAME \
-Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM \
-Dhbase.zookeeper.property.clientPort=$ZOOKEEPER_PORT \
-jar $TRANSLATE_JAR
Sostituisci TABLE_NAME
con il nome della tabella HBase che stai importando. Lo strumento Traduzione schemi utilizza questo nome per
la nuova tabella Bigtable.
Facoltativamente, puoi sostituire TABLE_NAME
con un'espressione regolare, come ".*", che acquisisce tutte le tabelle da creare, quindi eseguire il comando una sola volta.
Importa i dati HBase in Bigtable utilizzando Dataflow
Quando una tabella è pronta per la migrazione dei dati, puoi importare e convalidare i dati.
Tabelle non compresse
Se le tabelle HBase non sono compresse, esegui il comando seguente per ogni tabella di cui vuoi eseguire la migrazione:
java -jar $IMPORT_JAR importsnapshot \
--runner=DataflowRunner \
--project=$PROJECT_ID \
--bigtableInstanceId=$INSTANCE_ID \
--bigtableTableId=TABLE_NAME \
--hbaseSnapshotSourceDir=$MIGRATION_DESTINATION_DIRECTORY/data \
--snapshotName=SNAPSHOT_NAME \
--stagingLocation=$MIGRATION_DESTINATION_DIRECTORY/staging \
--tempLocation=$MIGRATION_DESTINATION_DIRECTORY/temp \
--maxNumWorkers=$(expr 3 \* $CLUSTER_NUM_NODES) \
--region=$REGION
Sostituisci quanto segue:
TABLE_NAME
: il nome della tabella HBase che stai importando. Lo strumento di traduzione di schemi utilizza questo nome per la nuova tabella Bigtable. I nuovi nomi di tabella non sono supportati.SNAPSHOT_NAME
: il nome assegnato all'istantanea della tabella che stai importando
Dopo aver eseguito il comando, lo strumento ripristina lo snapshot HBase nel bucket Cloud Storage, quindi avvia il job di importazione. Il completamento del processo di ripristino dello snapshot può richiedere diversi minuti, a seconda delle dimensioni dello snapshot.
Durante l'importazione, tieni presente i seguenti suggerimenti:
- Per migliorare le prestazioni del caricamento dei dati, assicurati di impostare
maxNumWorkers
. Questo valore aiuta a garantire che il job di importazione abbia una potenza di calcolo sufficiente per essere completato in un periodo di tempo ragionevole, ma non così tanto da sovraccaricare l'istanza Bigtable.- Se non utilizzi l'istanza Bigtable anche per un altro carico di lavoro, moltiplica per 3 il numero di nodi nell'istanza Bigtable e utilizza questo numero per
maxNumWorkers
. - Se utilizzi l'istanza per un altro carico di lavoro nello stesso momento in cui importi i dati HBase, riduci il valore di
maxNumWorkers
in modo appropriato.
- Se non utilizzi l'istanza Bigtable anche per un altro carico di lavoro, moltiplica per 3 il numero di nodi nell'istanza Bigtable e utilizza questo numero per
- Utilizza il tipo di worker predefinito.
- Durante l'importazione, devi monitorare l'utilizzo della CPU dell'istanza Bigtable. Se l'utilizzo della CPU nell'istanza di Bigtable è troppo elevato, potresti dover aggiungere altri nodi. Possono essere necessari fino a 20 minuti prima che il cluster fornisca i vantaggi in termini di prestazioni di nodi aggiuntivi.
Per ulteriori informazioni sul monitoraggio dell'istanza Bigtable, consulta Monitoraggio di un'istanza Bigtable.
Tabelle compresse rapide
Se importi tabelle compresse da Snappy, devi utilizzare un'immagine container personalizzata nella pipeline Dataflow. L'immagine container personalizzata che utilizzi per importare dati compressi in Bigtable offre il supporto della libreria di compressione nativa Hadoop. Per utilizzare Dataflow Runner v2 devi disporre dell'SDK Apache Beam versione 2.30.0 o successiva e devi disporre della versione 2.3.0 o successiva della libreria client HBase per Java.
Per importare le tabelle compresse di Snappy, esegui lo stesso comando che esegui per le tabelle non compresse, ma aggiungi la seguente opzione:
--enableSnappy=true
Convalida i dati importati in Bigtable
Per convalidare i dati importati, devi eseguire il job sync-table
. Il job sync-table
calcola gli hash per gli intervalli di righe in Bigtable, quindi li abbina all'output di HashTable che hai calcolato in precedenza.
Per eseguire il job sync-table
, esegui questo comando nella shell dei comandi:
java -jar $IMPORT_JAR sync-table \
--runner=dataflow \
--project=$PROJECT_ID \
--bigtableInstanceId=$INSTANCE_ID \
--bigtableTableId=TABLE_NAME \
--outputPrefix=$MIGRATION_DESTINATION_DIRECTORY/sync-table/output-TABLE_NAME-$(date +"%s") \
--stagingLocation=$MIGRATION_DESTINATION_DIRECTORY/sync-table/staging \
--hashTableOutputDir=$MIGRATION_DESTINATION_DIRECTORY/hashtable/TABLE_NAME \
--tempLocation=$MIGRATION_DESTINATION_DIRECTORY/sync-table/dataflow-test/temp \
--region=$REGION
Sostituisci TABLE_NAME
con il nome della tabella HBase che stai importando.
Quando il job sync-table
è stato completato, apri la pagina Dettagli job Dataflow ed esamina la sezione Contatori personalizzati per il job. Se il job di importazione
importa tutti i dati correttamente, il valore di ranges_matched
contiene
un valore, mentre il valore di ranges_not_matched
è 0.
Se ranges_not_matched
mostra un valore, apri la pagina Log, scegli Log del worker e filtra per Mancata corrispondenza nell'intervallo. L'output leggibile di questi log viene archiviato in Cloud Storage nella destinazione di output creata nell'opzione outputPrefix
della tabella di sincronizzazione.
Puoi riprovare a eseguire il job di importazione o scrivere uno script per leggere i file di output e determinare dove si sono verificate le mancate corrispondenze. Ogni riga nel file di output è un record JSON serializzato di un intervallo non corrispondente.
Route scritture a Bigtable
Dopo aver convalidato i dati per ogni tabella nel cluster, puoi configurare le tue applicazioni per instradare tutto il traffico a Bigtable, quindi ritirare l'istanza HBase.
Al termine della migrazione, puoi eliminare gli snapshot nell'istanza HBase.
Passaggi successivi
- Dai un'occhiata alle altre parti della guida alla migrazione di Hadoop:
- Panoramica
- Guida alla migrazione dei dati
- Guida alla migrazione dei job
- Scopri di più su Cloud Storage.