Questa pagina descrive considerazioni e procedure per la migrazione dei dati da un cluster Apache HBase a un'istanza Bigtable su Google Cloud.
La procedura descritta in questa pagina richiede di mettere offline l'applicazione. Se vuoi eseguire la migrazione senza tempi di inattività, consulta le indicazioni per la migrazione online in Eseguire la replica da HBase a Bigtable.
Per eseguire la migrazione dei dati a Bigtable da un cluster HBase in hosting su un servizio Google Cloud, come Dataproc o Compute Engine, consulta Eseguire la migrazione di HBase su Google Cloud a Bigtable.
Prima di iniziare questa migrazione, devi considerare le implicazioni sul rendimento, il design dello schema Bigtable, il tuo approccio all'autenticazione e all'autorizzazione e il set di funzionalità di Bigtable.
Considerazioni preliminari alla migrazione
Questa sezione suggerisce alcuni aspetti da esaminare e considerare prima di iniziare la migrazione.
Prestazioni
In un carico di lavoro tipico, Bigtable offre prestazioni altamente prevedibili. Prima di eseguire la migrazione dei dati, assicurati di comprendere i fattori che influiscono sul rendimento di Bigtable.
Progettazione dello schema di Bigtable
Nella maggior parte dei casi, puoi utilizzare lo stesso design dello schema in Bigtable come faresti in HBase. Se vuoi modificare lo schema o se il tuo caso d'uso sta cambiando, esamina i concetti descritti in Progettazione dello schema prima di eseguire la migrazione dei dati.
Autenticazione e autorizzazione
Prima di progettare controllo dell'accesso per Bigtable, esamina le procedure 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, quindi puoi convertire l'autorizzazione esistente su HBase in IAM. Puoi mappare i gruppi Hadoop esistenti che forniscono meccanismi di controllo dell'accesso per HBase a diversi account di servizio.
Bigtable ti consente di controllare l'accesso a livello di progetto, istanza e tabella. Per ulteriori informazioni, consulta Controllo dell'accesso.
Requisito relativo al tempo di riposo
L'approccio alla migrazione descritto in questa pagina prevede l'interruzione della connessione a internet dell'applicazione per tutta la durata della migrazione. Se la tua attività non può tollerare i tempi di inattività durante la migrazione a Bigtable, consulta le indicazioni per la migrazione online in Eseguire la replica da HBase a Bigtable.
Esegui la migrazione di HBase a Bigtable
Per eseguire la migrazione dei dati da HBase a Bigtable, esporta uno snapshot HBase per ogni tabella in Cloud Storage e poi importa i dati in Bigtable. Questi passaggi si riferiscono a un singolo cluster HBase e sono descritti in dettaglio nelle sezioni successive.
- Interrompi l'invio di scritture al cluster HBase.
- Acquisisci istantanee delle tabelle del cluster HBase.
- Esporta i file degli snapshot in Cloud Storage.
- Calcola gli hash ed esportali in Cloud Storage.
- Crea tabelle di destinazione in Bigtable.
- Importa i dati di HBase da Cloud Storage in Bigtable.
- Convalida i dati importati.
- Instrada le scritture in Bigtable.
Prima di iniziare
Crea un bucket Cloud Storage per memorizzare gli snapshot. Crea il bucket nella stessa posizione 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 con connettività di rete ai Namenode e ai Datanode del cluster HBase.
Installa e configura il connettore Cloud Storage su ogni nodo del cluster Hadoop e sull'host da cui viene avviato il job. Per i passaggi di installazione dettagliati, consulta Installare il connettore Cloud Storage.
Apri una shell di comando su un host che può connettersi al cluster HBase e al progetto Bigtable. Qui completerai i passaggi successivi.
Ottieni lo strumento di traduzione dello schema:
wget BIGTABLE_HBASE_TOOLS_URL
Sostituisci
BIGTABLE_HBASE_TOOLS_URL
con l'URL dell'JAR with dependencies
più recente 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 file JAR:
- Vai al repository.
- Fai clic sul numero della versione più recente.
- Individua il pulsante
JAR with dependencies file
(di solito in alto). - Fai clic con il tasto destro del mouse e copia l'URL oppure fai clic per scaricare il file.
Ottieni lo strumento di importazione:
wget BIGTABLE_BEAM_IMPORT_URL
Sostituisci
BIGTABLE_BEAM_IMPORT_URL
con l'URL dell'shaded JAR
più recente 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 file JAR:
- Vai al repository.
- Fai clic sul numero della versione più recente.
- Fai clic su Download.
- Passa il mouse sopra shaded.jar.
- Fai clic con il tasto 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 la tua istanzaINSTANCE_ID
: l'identificatore dell'istanza Bigtable in cui stai importando i datiREGION
: una regione che contiene uno dei cluster della tua istanza Bigtable. Esempio:northamerica-northeast2
CLUSTER_NUM_NODES
: il numero di nodi nell'istanza BigtableTRANSLATE_JAR
: il nome e il numero di versione del file JARbigtable hbase tools
che hai scaricato da Maven. Il valore dovrebbe avere un aspetto simile abigtable-hbase-1.x-tools-1.24.0-jar-with-dependencies.jar
.IMPORT_JAR
: il nome e il numero di versione del file JARbigtable-beam-import
che hai scaricato da Maven. Il valore dovrebbe avere un aspetto simile abigtable-beam-import-1.24.0-shaded.jar
.BUCKET_NAME
: il nome del bucket Cloud Storage in cui memorizzi gli snapshotZOOKEEPER_QUORUM
: l'host zookeeper a cui si collegherà lo strumento, nel formatohost1.myownpersonaldomain.com
MIGRATION_SOURCE_DIRECTORY
: la directory sull'hosting HBase che contiene i dati di cui vuoi eseguire la migrazione, nel formatohdfs://host1.myownpersonaldomain.com:8020/hbase
(Facoltativo) Per verificare che le variabili siano impostate correttamente, esegui il comando
printenv
per visualizzare tutte le variabili di ambiente.
Interrompi l'invio di scritture in HBase
Prima di acquisire gli snapshot delle tabelle HBase, interrompi l'invio di scritture al cluster HBase.
Scatta 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'impronta di archiviazione minima sul cluster HBase, ma con il tempo potrebbe raggiungere le stesse dimensioni della tabella originale. Lo snapshot non consuma risorse della CPU.
Esegui il seguente 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
Esportare 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 le altre risorse HBase per assicurarti che i cluster rimangano in buono stato.
Per ogni istantanea che vuoi esportare, esegui quanto segue:
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.
Calcola ed esporta gli hash
Successivamente, 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
sulla tabella di destinazione per abbinare gli hash e acquisire la certezza dell'integrità dei dati sottoposti a migrazione.
Esegui il seguente 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 di cui hai creato e esportato uno snapshot
Creare tabelle di destinazione
Il passaggio successivo consiste nel creare una tabella di destinazione nell'istanza Bigtable per ogni snapshot esportato. Utilizza un account con autorizzazionebigtable.tables.create
per l'istanza.
Questa guida utilizza lo strumento di traduzione dello schema Bigtable, che crea automaticamente la tabella. Tuttavia, se non vuoi che lo schema di Bigtable corrisponda esattamente a quello di HBase, puoi creare una tabella utilizzando lo strumento a riga di comando cbt
o la console Google Cloud.
Lo strumento di traduzione dello schema Bigtable acquisisce lo schema della tabella HBase, inclusi il nome della tabella, le famiglie di colonne, i criteri di garbage collection e le suddivisioni. Poi crea una tabella simile in Bigtable.
Per ogni tabella da importare, esegui il seguente comando 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 di traduzione dello schema utilizza questo nome per la nuova tabella Bigtable.
Se vuoi, puoi anche sostituire TABLE_NAME
con un'espressione regolare, ad esempio ".*", che acquisisca tutte le tabelle che vuoi creare, quindi eseguire il comando una sola volta.
Importa i dati di HBase in Bigtable utilizzando Dataflow
Dopo aver creato una tabella in cui eseguire la migrazione dei dati, puoi procedere con l'importazione e la convalida dei dati.
Tabelle non compresse
Se le tabelle HBase non sono compresse, esegui il seguente comando 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 dello schema utilizza questo nome per la nuova tabella Bigtable. I nuovi nomi di tabella non sono supportati.SNAPSHOT_NAME
: il nome assegnato allo screenshot della tabella che stai importando
Dopo aver eseguito il comando, lo strumento ripristina lo snapshot HBase nel tuo bucket Cloud Storage e avvia il job di importazione. Il completamento del processo di ripristino dell'istantanea può richiedere diversi minuti, a seconda delle dimensioni dell'istantanea.
Tieni presente i seguenti suggerimenti durante l'importazione:
- Per migliorare le prestazioni del caricamento dei dati, assicurati di impostare
maxNumWorkers
. Questo valore contribuisce ad assicurare che il job di importazione abbia potenza di calcolo sufficiente per completarsi in un periodo di tempo ragionevole, ma non così tanta da sopraffare l'istanza Bigtable.- Se non utilizzi l'istanza Bigtable anche per un altro
caricamento di lavoro, moltiplica il numero di nodi nell'istanza
Bigtable per 3 e utilizza questo numero per
maxNumWorkers
. - Se utilizzi l'istanza per un altro carico di lavoro contemporaneamente all'importazione dei dati HBase, riduci il valore di
maxNumWorkers
in modo appropriato.
- Se non utilizzi l'istanza Bigtable anche per un altro
caricamento di lavoro, moltiplica il numero di nodi nell'istanza
Bigtable per 3 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 Bigtable è troppo elevato, potrebbe essere necessario aggiungere altri nodi. Potrebbero essere necessari fino a 20 minuti prima che il cluster fornisca il vantaggio in termini di prestazioni dei nodi aggiuntivi.
Per ulteriori informazioni sul monitoraggio dell'istanza Bigtable, consulta Monitorare un'istanza Bigtable.
Tabelle compresse con Snappy
Se importi tabelle compresse con Snappy, devi utilizzare un'immagine contenitore personalizzata nella pipeline Dataflow. L'immagine contenitore personalizzata che utilizzi per importare i dati compressi in Bigtable fornisce il supporto della libreria di compressione nativa di Hadoop. Per utilizzare Dataflow Runner 2.0, devi disporre della versione 2.30.0 o successiva dell'SDK Apache Beam e della versione 2.3.0 o successiva della libreria client HBase per Java.
Per importare tabelle compresse con Snappy, esegui lo stesso comando che utilizzi 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 della tabella Hash calcolato in precedenza.
Per eseguire il job sync-table
, esegui quanto segue 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.
Al termine del job sync-table
, apri la pagina Dettagli job Dataflow e esamina la sezione Contatori personalizzati per il job. Se il job di importazione importa correttamente tutti i dati, il valore di ranges_matched
è impostato e il valore di ranges_not_matched
è 0.
Se ranges_not_matched
mostra un valore, apri la pagina Log, scegli Log dei worker e filtra per Mancata corrispondenza nell'intervallo. L'output di questi log in formato leggibile dalla macchina viene archiviato in Cloud Storage nella destinazione di output che crei nell'opzione outputPrefix
sync-table.
Puoi riprovare 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 del file di output è un record JSON serializzato di un intervallo non corrispondente.
Instrada le scritture in Bigtable
Dopo aver convalidato i dati di ogni tabella del cluster, puoi configurare le tue applicazioni in modo che indirizzino tutto il loro trafico a Bigtable, quindi ritirare l'istanza HBase.
Al termine della migrazione, puoi eliminare gli snapshot nell'istanza HBase.
Passaggi successivi
- Consulta le 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.