Esegui la migrazione dei dati da HBase a Bigtable offline

In questa pagina vengono descritte considerazioni e procedure per la migrazione dei dati da un cluster Apache HBase a un'istanza Bigtable suCloud de Confiance by S3NS.

La procedura descritta in questa pagina richiede di portare l'applicazione offline. Se vuoi eseguire la migrazione senza tempi di inattività, consulta le indicazioni per la migrazione online in Replica da HBase a Bigtable.

Prima di iniziare questa migrazione, devi considerare le implicazioni sul rendimento, la progettazione dello schema di Bigtable, l'approccio all'autenticazione e all'autorizzazione e il set di funzionalità di Bigtable.

Considerazioni pre-migrazione

Questa sezione suggerisce alcuni aspetti da esaminare e considerare prima di iniziare la migrazione.

Prestazioni

In un workload 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 di Bigtable

Nella maggior parte dei casi, puoi utilizzare in Bigtable lo stesso design dello schema che utilizzi in HBase. Se vuoi modificare lo schema o se il tuo caso d'uso sta cambiando, esamina i concetti illustrati in Progettazione dello schema prima di eseguire la migrazione dei dati.

Autenticazione e autorizzazione

Prima di progettare controllo dell'accesso per Bigtable, esamina i processi di autenticazione e autorizzazione HBase esistenti.

Bigtable utilizza i meccanismi standard di Cloud de Confianceper l'autenticazione e Identity and Access Management per fornire controllo dell'accesso, quindi converti l'autorizzazione esistente su HBase in IAM. Puoi mappare i gruppi Hadoop esistenti che forniscono meccanismi di controllo dell'accesso per HBase a diversi service account.

Bigtable ti consente di controllare l'accesso a livello di progetto, istanza e tabella. Per ulteriori informazioni, consulta Controllo dell'accesso.

Requisito del tempo di inattività

L'approccio alla migrazione descritto in questa pagina prevede di portare l'applicazione offline per tutta la durata della migrazione. Se la tua attività non può tollerare tempi di inattività durante la migrazione a Bigtable, consulta le indicazioni per la migrazione online in Replica da HBase a Bigtable.

Esegui la migrazione da HBase a Bigtable

Per eseguire la migrazione dei dati da HBase a Bigtable, esporti uno snapshot HBase per ogni tabella in Cloud Storage e poi importi i dati in Bigtable. Questi passaggi sono relativi a un singolo cluster HBase e sono descritti in dettaglio nelle sezioni successive.

  1. Interrompi l'invio di scritture al cluster HBase.
  2. Acquisisci snapshot 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. Importare i dati HBase da Cloud Storage in Bigtable.
  7. Convalida i dati importati.
  8. Route scrive in Bigtable.

Prima di iniziare

  1. Crea un bucket Cloud Storage per archiviare gli snapshot. Crea il bucket nella stessa località 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 al 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 Installazione del connettore Cloud Storage.

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

  6. Scarica lo strumento di traduzione dello schema:

    wget BIGTABLE_HBASE_TOOLS_URL
    

    Sostituisci BIGTABLE_HBASE_TOOLS_URL con l'URL dell'ultima versione di JAR with dependencies disponibile nel repository Maven dello strumento. Il nome file è simile a https://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-1.x-tools/2.20.2/bigtable-hbase-1.x-tools-2.20.2-jar-with-dependencies.jar.

    Per trovare l'URL o scaricare manualmente il file JAR:

    1. Vai al repository.
    2. Fai clic sul numero di versione più recente.
    3. Identifica il 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. Scarica lo strumento di importazione:

    wget BIGTABLE_BEAM_IMPORT_URL
    

    Sostituisci BIGTABLE_BEAM_IMPORT_URL con l'URL dell'ultima versione di shaded JAR disponibile nel repository Maven dello strumento. Il nome file è simile a https://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-beam-import/2.20.2/bigtable-beam-import-2.20.2-shaded.jar.

    Per trovare l'URL o scaricare manualmente il file JAR, segui questi passaggi:

    1. Vai al repository.
    2. Fai clic sul numero di 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 Cloud de Confiance in cui si trova l'istanza
    • INSTANCE_ID: l'identificatore dell'istanza Bigtable in cui stai importando i dati
    • REGION: una regione che contiene uno dei cluster nella 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 è simile a bigtable-hbase-1.x-tools-2.20.2-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 è simile a bigtable-beam-import-2.20.2-shaded.jar.
    • BUCKET_NAME: il nome del bucket Cloud Storage in cui archivi gli snapshot
    • ZOOKEEPER_QUORUM: l'host ZooKeeper a cui si connetterà lo strumento, nel formato host1.myownpersonaldomain.com
    • MIGRATION_SOURCE_DIRECTORY: la directory sull'host HBase che contiene i dati di cui vuoi eseguire la migrazione, nel formato hdfs://host1.myownpersonaldomain.com:8020/hbase
  9. (Facoltativo) Per verificare che le variabili siano state impostate correttamente, esegui il comando printenv per visualizzare tutte le variabili di ambiente.

Interrompi l'invio di scritture a HBase

Prima di acquisire snapshot delle tabelle HBase, interrompi l'invio di 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 risorse 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 ottimale.

Per ogni snapshot che vuoi 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.

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 trovare gli hash corrispondenti e verificare l'integrità dei dati migrati.

Esegui questo comando per ogni tabella che hai esportato:

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 uno snapshot ed esportato

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 l'autorizzazione bigtable.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 Bigtable corrisponda esattamente allo schema HBase, puoi creare una tabella utilizzando lo strumento a riga di comando cbt o la console Cloud de Confiance .

Lo strumento Bigtable Schema Translation 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 che vuoi 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 Schema Translation utilizza questo nome per la nuova tabella Bigtable.

Se vuoi, puoi anche sostituire TABLE_NAME con un'espressione regolare, ad esempio ".*", che acquisisce tutte le tabelle che vuoi creare, quindi eseguire il comando una sola volta.

Importa i dati HBase in Bigtable utilizzando Dataflow

Una volta che hai 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 questo 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 Schema Translation utilizza questo nome per la nuova tabella Bigtable. I nuovi nomi delle tabelle non sono supportati.
  • SNAPSHOT_NAME: il nome che hai assegnato allo snapshot 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 processo di ripristino dello snapshot può richiedere diversi minuti, a seconda delle dimensioni dello snapshot.

Tieni presente i seguenti suggerimenti durante l'importazione:

  • 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 tale da sovraccaricare l'istanza Bigtable.
    • Se non utilizzi l'istanza Bigtable anche per un altro workload, moltiplica per 3 il numero di nodi nell'istanza Bigtable e utilizza questo numero per maxNumWorkers.
    • Se utilizzi l'istanza per un altro workload 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 saperne di più sul monitoraggio dell'istanza Bigtable, consulta Monitoraggio.

Tabelle compresse con Snappy

Se importi tabelle compresse con Snappy, devi utilizzare un'immagine container personalizzata nella pipeline Dataflow. L'immagine container personalizzata che utilizzi per importare dati compressi in Bigtable fornisce il supporto della libreria di compressione nativa di Hadoop. Per utilizzare Dataflow Runner v2, devi disporre dell'SDK Apache Beam versione 2.30.0 o successive e della libreria client HBase per Java versione 2.3.0 o successive.

Per importare tabelle compresse con 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 confronta con l'output di HashTable calcolato in precedenza.

Per eseguire il job sync-table, esegui questo comando nella shell:

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 del job. Se il job di importazione importa correttamente tutti i dati, il valore di ranges_matched ha un valore 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 worker e filtra per Mancata corrispondenza nell'intervallo. L'output leggibile da macchina di questi log viene archiviato in Cloud Storage nella destinazione di output che crei nell'opzione sync-table outputPrefix.

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 per ogni tabella del cluster, puoi configurare le tue applicazioni in modo che indirizzino tutto il traffico a Bigtable, quindi eseguire il deployment dell'istanza HBase.

Al termine della migrazione, puoi eliminare gli snapshot nell'istanza HBase.

Passaggi successivi