Il modello per la migrazione da Apache Cassandra a Bigtable copia una tabella da Apache Cassandra a Bigtable. Questo modello richiede una configurazione minima e replica il più fedelmente possibile la struttura della tabella di Cassandra in Bigtable.
Il modello per la migrazione da Apache Cassandra a Bigtable è utile per:
- Eseguire la migrazione del database Apache Cassandra in caso di tempi di inattività ridotti accettabili.
- Replicare periodicamente le tabelle di Cassandra in Bigtable per il servizio globale.
Requisiti della pipeline
- La tabella Bigtable di destinazione deve esistere prima dell'esecuzione della pipeline.
- Connessione di rete tra i worker di Dataflow e i nodi di Apache Cassandra.
Conversione del tipo
Il modello per la migrazione da Apache Cassandra a Bigtable converte automaticamente i tipi di dati di Apache Cassandra in tipi di dati di Bigtable.
La maggior parte delle primitive è rappresentata in modo analogo in Bigtable e Apache Cassandra, tuttavia le seguenti primitive sono rappresentate in modo diverso:
Date
eTimestamp
vengono convertiti in oggettiDateTime
UUID
viene convertito inString
Varint
viene convertito inBigDecimal
Apache Cassandra supporta in modo nativo anche tipi più complessi come Tuple
, List
, Set
e Map
.
Le tuple non sono supportate da questa pipeline poiché non esiste un tipo corrispondente in Apache Beam.
Ad esempio, supponiamo che in Apache Cassandra tu abbia una colonna del tipo List
denominata "mylist" con valori analoghi a quelli della tabella seguente:
riga | mylist |
---|---|
1 | (a,b,c) |
La pipeline espande semplicemente questa colonna in tre colonne diverse (note in Bigtable come qualificatori di colonna). Il nome delle colonne è "mylist", ma la pipeline aggiunge anche l'indice dell'elemento nell'elenco, ad esempio "mylist[0]".
riga | mylist[0] | mylist[1] | mylist[2] |
---|---|---|---|
1 | a | b | c |
La pipeline gestisce i set allo stesso modo degli elenchi, ma inserisce un suffisso per indicare se la cella è una chiave o un valore.
riga | mymap |
---|---|
1 | {"first_key":"first_value","another_key":"different_value"} |
Dopo la trasformazione, la tabella appare come segue:
riga | mymap[0].key | mymap[0].value | mymap[1].key | mymap[1].value |
---|---|---|---|---|
1 | first_key | first_value | another_key | different_value |
Conversione della chiave primaria
In Apache Cassandra, una chiave primaria viene definita utilizzando il linguaggio DDL (Data Definition Language). La chiave primaria può essere semplice, composita o composta con le colonne di clustering. Bigtable supporta la creazione manuale delle chiavi riga, ordinate lessicograficamente in un array di byte. La pipeline raccoglie automaticamente informazioni sul tipo di chiave e genera una chiave in base alle best practice relative alla creazione di chiavi riga associate a più valori.
Parametri del modello
Parametri obbligatori
- cassandraHosts: gli host dei nodi Apache Cassandra in un elenco separato da virgole.
- cassandraKeyspace: lo spazio delle chiavi Apache Cassandra in cui si trova la tabella.
- cassandraTable: la tabella Apache Cassandra da copiare.
- bigtableProjectId: l'ID progetto Google Cloud associato all'istanza Bigtable.
- bigtableInstanceId: l'ID dell'istanza Bigtable in cui viene copiata la tabella Apache Cassandra.
- bigtableTableId: il nome della tabella Bigtable in cui viene copiata la tabella Apache Cassandra.
Parametri facoltativi
- cassandraPort: la porta TCP da utilizzare per raggiungere Apache Cassandra sui nodi. Il valore predefinito è
9042
. - defaultColumnFamily: il nome della famiglia di colonne della tabella Bigtable. Il valore predefinito è
default
. - rowKeySeparator: il separatore utilizzato per creare le chiavi di riga. Il valore predefinito è
#
. - splitLargeRows: il flag per attivare la suddivisione di righe di grandi dimensioni in più richieste MutateRows. Tieni presente che quando una riga di grandi dimensioni viene suddivisa tra più chiamate API, gli aggiornamenti alla riga non sono atomici. .
- writetimeCassandraColumnSchema: percorso GCS allo schema per copiare i writetime di Cassandra in Bigtable. Il comando per generare questo schema è
cqlsh -e "select json * from system_schema.columns where keyspace_name='$CASSANDRA_KEYSPACE' and table_name='$CASSANDRA_TABLE'`" > column_schema.json
. Imposta $WRITETIME_CASSANDRA_COLUMN_SCHEMA su un percorso GCS, ad esempiogs://$BUCKET_NAME/column_schema.json
. Poi carica lo schema su GCS:gcloud storage cp column_schema.json $WRITETIME_CASSANDRA_COLUMN_SCHEMA
. Richiede Cassandra versione 2.2 o successive per il supporto JSON. - setZeroTimestamp: il flag per impostare il timestamp della cella Bigtable su 0 se writetime di Cassandra non è presente. Il comportamento predefinito quando questo flag non è impostato è impostare il timestamp della cella Bigtable come ora di replica del modello, ovvero ora.
Esegui il modello
Console
- Vai alla pagina Crea job da modello di Dataflow. Vai a Crea job da modello
- Nel campo Nome job, inserisci un nome univoco per il job.
- (Facoltativo) Per Endpoint a livello di regione, seleziona un valore dal menu a discesa. La regione
predefinita è
us-central1
.Per un elenco delle regioni in cui puoi eseguire un job Dataflow, consulta Località di Dataflow.
- Dal menu a discesa Modello di dataflow, seleziona the Cassandra to Cloud Bigtable template.
- Nei campi dei parametri forniti, inserisci i valori dei parametri.
- Fai clic su Esegui job.
gcloud
Nella shell o nel terminale, esegui il modello:
gcloud dataflow jobs run JOB_NAME \ --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cassandra_To_Cloud_Bigtable \ --region REGION_NAME \ --parameters \ bigtableProjectId=BIGTABLE_PROJECT_ID,\ bigtableInstanceId=BIGTABLE_INSTANCE_ID,\ bigtableTableId=BIGTABLE_TABLE_ID,\ cassandraHosts=CASSANDRA_HOSTS,\ cassandraKeyspace=CASSANDRA_KEYSPACE,\ cassandraTable=CASSANDRA_TABLE
Sostituisci quanto segue:
JOB_NAME
: un nome univoco del job a tua sceltaVERSION
: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latest
per utilizzare l'ultima versione del modello, disponibile nella cartella principale senza data nel bucket: gs://dataflow-templates-REGION_NAME/latest/- il nome della versione, ad esempio
2023-09-12-00_RC00
, per utilizzare una versione specifica del modello, che si trova nidificata nella rispettiva cartella principale con data nel bucket: gs://dataflow-templates-REGION_NAME/
REGION_NAME
: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1
BIGTABLE_PROJECT_ID
: il tuo ID progetto in cui si trova BigtableBIGTABLE_INSTANCE_ID
: l'ID istanza BigtableBIGTABLE_TABLE_ID
: il nome della tabella BigtableCASSANDRA_HOSTS
: l'elenco degli host Apache Cassandra. Se vengono forniti più host, segui le istruzioni su come eseguire l'escape delle virgoleCASSANDRA_KEYSPACE
: lo spazio delle chiavi Apache Cassandra in cui si trova la tabellaCASSANDRA_TABLE
: la tabella Apache Cassandra di cui è necessaria la migrazione
API
Per eseguire il modello utilizzando l'API REST, invia una richiesta POST HTTP. Per ulteriori informazioni sull'API e sui relativi ambiti di autorizzazione, consulta projects.templates.launch
.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Cassandra_To_Cloud_Bigtable { "jobName": "JOB_NAME", "parameters": { "bigtableProjectId": "BIGTABLE_PROJECT_ID", "bigtableInstanceId": "BIGTABLE_INSTANCE_ID", "bigtableTableId": "BIGTABLE_TABLE_ID", "cassandraHosts": "CASSANDRA_HOSTS", "cassandraKeyspace": "CASSANDRA_KEYSPACE", "cassandraTable": "CASSANDRA_TABLE" }, "environment": { "zone": "us-central1-f" } }
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto Google Cloud in cui vuoi eseguire il job DataflowJOB_NAME
: un nome univoco del job a tua sceltaVERSION
: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latest
per utilizzare l'ultima versione del modello, disponibile nella cartella principale senza data nel bucket: gs://dataflow-templates-REGION_NAME/latest/- il nome della versione, ad esempio
2023-09-12-00_RC00
, per utilizzare una versione specifica del modello, che si trova nidificata nella rispettiva cartella principale con data nel bucket: gs://dataflow-templates-REGION_NAME/
LOCATION
: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1
BIGTABLE_PROJECT_ID
: il tuo ID progetto in cui si trova BigtableBIGTABLE_INSTANCE_ID
: l'ID istanza BigtableBIGTABLE_TABLE_ID
: il nome della tabella BigtableCASSANDRA_HOSTS
: l'elenco degli host Apache Cassandra. Se vengono forniti più host, segui le istruzioni su come eseguire l'escape delle virgoleCASSANDRA_KEYSPACE
: lo spazio delle chiavi Apache Cassandra in cui si trova la tabellaCASSANDRA_TABLE
: la tabella Apache Cassandra di cui è necessaria la migrazione
Passaggi successivi
- Scopri di più sui modelli Dataflow.
- Consulta l'elenco dei modelli forniti da Google.