Esegui la migrazione dei dati da HBase a Bigtable

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.

  1. Interrompi l'invio di scritture al cluster HBase.
  2. Acquisisci istantanee delle tabelle del cluster HBase.
  3. Esporta i file degli snapshot in Cloud Storage.
  4. Calcola gli hash ed esportali in Cloud Storage.
  5. Crea tabelle di destinazione in Bigtable.
  6. Importa i dati di HBase da Cloud Storage in Bigtable.
  7. Convalida i dati importati.
  8. Instrada le scritture in Bigtable.

Prima di iniziare

  1. Crea un bucket Cloud Storage per memorizzare gli snapshot. Crea il bucket nella stessa posizione in cui prevedi di eseguire il job Dataflow.

  2. Crea un'istanza Bigtable per archiviare le nuove tabelle.

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

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

  5. Apri una shell di comando su un host che può connettersi al cluster HBase e al progetto Bigtable. Qui completerai i passaggi successivi.

  6. 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 a https://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:

    1. Vai al repository.
    2. Fai clic sul numero della versione più recente.
    3. Individua il pulsante JAR with dependencies file (di solito in alto).
    4. Fai clic con il tasto destro del mouse e copia l'URL oppure fai clic per scaricare il file.
  7. 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 a https://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:

    1. Vai al repository.
    2. Fai clic sul numero della versione più recente.
    3. Fai clic su Download.
    4. Passa il mouse sopra shaded.jar.
    5. Fai clic con il tasto destro del mouse e copia l'URL oppure fai clic per scaricare il file.
  8. 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 istanza
    • INSTANCE_ID: l'identificatore dell'istanza Bigtable in cui stai importando i dati
    • REGION: una regione che contiene uno dei cluster della tua istanza Bigtable. Esempio: northamerica-northeast2
    • CLUSTER_NUM_NODES: il numero di nodi nell'istanza Bigtable
    • TRANSLATE_JAR: il nome e il numero di versione del file JAR bigtable hbase tools che hai scaricato da Maven. Il valore dovrebbe avere un aspetto simile a bigtable-hbase-1.x-tools-1.24.0-jar-with-dependencies.jar.
    • IMPORT_JAR: il nome e il numero di versione del file JAR bigtable-beam-import che hai scaricato da Maven. Il valore dovrebbe avere un aspetto simile a bigtable-beam-import-1.24.0-shaded.jar.
    • BUCKET_NAME: il nome del bucket Cloud Storage in cui memorizzi gli snapshot
    • ZOOKEEPER_QUORUM: l'host zookeeper a cui si collegherà lo strumento, nel formato host1.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
  9. (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.
  • 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.

Contatori personalizzati di Dataflow

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.

Log dei worker Dataflow

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