

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Esegui la migrazione dei carichi di lavoro Apache Cassandra su Amazon Keyspaces utilizzando AWS Glue
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue"></a>

*Nikolai Kolesnikov, Karthiga Priya Chandran e Samir Patel, Amazon Web Services*

## Riepilogo
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-summary"></a>

Questo modello mostra come migrare i carichi di lavoro Apache Cassandra esistenti su Amazon Keyspaces (per Apache Cassandra) utilizzando AWS Glue. CQLReplicator Puoi utilizzarlo CQLReplicator su AWS Glue per ridurre al minimo il ritardo di replica della migrazione dei carichi di lavoro fino a pochi minuti. Scopri anche come usare un bucket Amazon Simple Storage Service (Amazon S3) per archiviare i dati necessari per la migrazione, [inclusi file Apache](https://parquet.apache.org/) Parquet, file di configurazione e script. Questo modello presuppone che i carichi di lavoro Cassandra siano ospitati su istanze Amazon Elastic Compute Cloud (Amazon EC2) in un cloud privato virtuale (VPC).

## Prerequisiti e limitazioni
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-prereqs"></a>

**Prerequisiti**
+ Cluster Cassandra con una tabella di origine
+ Tabella di destinazione in Amazon Keyspaces per replicare il carico di lavoro
+ Bucket S3 per archiviare file Parquet intermedi che contengono modifiche incrementali ai dati
+ Bucket S3 per archiviare i file e gli script di configurazione del lavoro

**Limitazioni**
+ CQLReplicator su AWS Glue richiede del tempo per fornire unità di elaborazione dati (DPUs) per i carichi di lavoro Cassandra. È probabile che il ritardo di replica tra il cluster Cassandra e lo spazio chiave e la tabella di destinazione in Amazon Keyspaces duri solo pochi minuti.

## Architecture
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-architecture"></a>

**Stack tecnologico di origine**
+ Apache Cassandra
+ DataStax Server
+ ScyllaDB

**Stack tecnologico Target**
+ Amazon Keyspaces

**Architettura di migrazione**

Il diagramma seguente mostra un'architettura di esempio in cui un cluster Cassandra è ospitato su EC2 istanze e distribuito su tre zone di disponibilità. I nodi Cassandra sono ospitati in sottoreti private.

![\[Ruolo di servizio personalizzato, Amazon Keyspaces e Amazon S3, con AWS Glue che si connette ai nodi VPC.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e08048da-8996-4f2c-b8ed-da49fe9e693b/images/76256ab3-a1e6-4c9e-9c40-dc78f51edf0f.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Un ruolo di servizio personalizzato fornisce l'accesso ad Amazon Keyspaces e al bucket S3.

1. Un job AWS Glue legge la configurazione del lavoro e gli script nel bucket S3.

1. Il job AWS Glue si connette tramite la porta 9042 per leggere i dati dal cluster Cassandra.

1. Il job AWS Glue si connette tramite la porta 9142 per scrivere dati su Amazon Keyspaces.

## Tools (Strumenti)
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-tools"></a>

**Servizi e strumenti AWS**
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.
+ [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html) è una shell basata su browser che puoi utilizzare per gestire i servizi AWS utilizzando l'AWS Command Line Interface (AWS CLI) e una gamma di strumenti di sviluppo preinstallati.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) è un servizio ETL completamente gestito che ti aiuta a classificare, pulire, arricchire e spostare in modo affidabile i dati tra archivi e flussi di dati.
+ [Amazon Keyspaces (per Apache Cassandra)](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html) è un servizio di database gestito che ti aiuta a migrare, eseguire e scalare i carichi di lavoro Cassandra nel cloud AWS.

**Codice**

Il codice per questo pattern è disponibile nel repository. GitHub [CQLReplicator](https://github.com/aws-samples/cql-replicator/tree/main/glue)

## Best practice
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-best-practices"></a>
+ Per determinare le risorse AWS Glue necessarie per la migrazione, stima il numero di righe nella tabella Cassandra di origine. Ad esempio, 250.000 righe per 0,25 DPU (2 vCPUs, 4 GB di memoria) con disco da 84 GB.
+ Preriscalda le tabelle Amazon Keyspaces prima dell'esecuzione. CQLReplicator Ad esempio, otto CQLReplicator tile (AWS Glue jobs) possono scrivere fino a 22 K WCUs al secondo, quindi il target deve essere preriscaldato a 25-30 K WCUs al secondo.
+ Per abilitare la comunicazione tra i componenti di AWS Glue, utilizza una regola di ingresso autoreferenziale per tutte le porte TCP del tuo gruppo di sicurezza.
+ Utilizza la strategia di traffico incrementale per distribuire il carico di lavoro di migrazione nel tempo.

## Epiche
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-epics"></a>

### Implementare CQLReplicator
<a name="deploy-cqlreplicator"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea uno spazio chiave e una tabella di destinazione.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | Proprietario dell'app, amministratore AWS, DBA, sviluppatore di app | 
| Configura il driver Cassandra per connetterti a Cassandra. | Usa il seguente script di configurazione:<pre>Datastax-java-driver {<br />  basic.request.consistency = "LOCAL_QUORUM"<br />  basic.contact-points = ["127.0.0.1:9042"]<br />   advanced.reconnect-on-init = true<br />   basic.load-balancing-policy {<br />        local-datacenter = "datacenter1"<br />}<br />advanced.auth-provider = {<br />       class = PlainTextAuthProvider<br />       username = "user-at-sample"<br />       password = "S@MPLE=PASSWORD="<br />}<br />}</pre>Lo script precedente utilizza lo Spark Cassandra Connector. [Per ulteriori informazioni, consulta la configurazione di riferimento per Cassandra.](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/) | DBA | 
| Configura il driver Cassandra per la connessione ad Amazon Keyspaces. | Usa il seguente script di configurazione:<pre>datastax-java-driver {<br />basic {<br />  load-balancing-policy {<br />    local-datacenter = us-west-2<br />        }<br />  contact-points = [<br />            "cassandra.us-west-2.amazonaws.com:9142"<br />        ]<br />  request {<br />  page-size = 2500<br />  timeout = 360 seconds<br />  consistency = LOCAL_QUORUM<br />        }<br />    }<br />advanced {<br /> control-connection {<br />  timeout = 360 seconds<br />        }<br /> session-leak.threshold = 6<br /> connection {<br /> connect-timeout = 360 seconds<br /> init-query-timeout = 360 seconds<br /> warn-on-init-error = false<br />        }<br /> auth-provider = {<br />  class = software.aws.mcs.auth.SigV4AuthProvider<br />  aws-region = us-west-2<br /> }<br /><br /> ssl-engine-factory {<br />  class = DefaultSslEngineFactory<br />        }<br />    }<br />}</pre>Lo script precedente utilizza lo Spark Cassandra Connector. [Per ulteriori informazioni, consulta la configurazione di riferimento per Cassandra.](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/) | DBA | 
| Crea un ruolo IAM per il job AWS Glue. | Crea un nuovo ruolo di servizio AWS denominato `glue-cassandra-migration` con AWS Glue come entità affidabile.`glue-cassandra-migration`Dovrebbe fornire l'accesso in lettura e scrittura al bucket S3 e ad Amazon Keyspaces. Il bucket S3 contiene i file.jar, i file di configurazione per Amazon Keyspaces e Cassandra e i file Parquet intermedi. Ad esempio, contiene le, e le politiche gestite. `AWSGlueServiceRole` `AmazonS3FullAccess` `AmazonKeyspacesFullAccess` | AWS DevOps | 
| Scarica CQLReplicator in AWS CloudShell. | Scarica il progetto nella tua cartella home eseguendo il seguente comando:<pre>git clone https://github.com/aws-samples/cql-replicator.git<br />cd cql-replicator/glue<br /># Only for AWS CloudShell, the bc package includes bc and dc. Bc is an arbitrary precision numeric processing arithmetic language<br />sudo yum install bc -y</pre> |  | 
| Modificate i file di configurazione di riferimento. | Copia `CassandraConnector.conf` e `KeyspacesConnector.conf` `../glue/conf` inseriscilo nella cartella del progetto. | AWS DevOps | 
| Avvia il processo di migrazione. | Il comando seguente inizializza l'ambiente. CQLReplicator L'inizializzazione prevede la copia di artefatti.jar e la creazione di un connettore AWS Glue, un bucket S3, un job AWS Glue, il keyspace e la tabella: `migration` `ledger`<pre>cd cql-replicator/glue/bin<br />./cqlreplicator --state init --sg '"sg-1","sg-2"' \ <br />                --subnet "subnet-XXXXXXXXXXXX" \ <br />                --az us-west-2a --region us-west-2 \ <br />                --glue-iam-role glue-cassandra-migration \ <br />                --landing-zone s3://cql-replicator-1234567890-us-west-2<br /></pre>Questo script include i seguenti parametri:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 
| Convalida la distribuzione. | Dopo aver eseguito il comando precedente, l'account AWS dovrebbe contenere quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 

### Esegui CQLReplicator
<a name="run-cqlreplicator"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia il processo di migrazione. | Per operare CQLReplicator su AWS Glue, è necessario utilizzare il `--state run` comando seguito da una serie di parametri. La configurazione precisa di questi parametri è determinata principalmente dai tuoi requisiti di migrazione unici. Ad esempio, queste impostazioni potrebbero variare se scegli di replicare i valori e gli aggiornamenti del time to live (TTL) o se scarichi oggetti superiori a 1 MB su Amazon S3.Per replicare il carico di lavoro dal cluster Cassandra ad Amazon Keyspaces, esegui il seguente comando: <pre>./cqlreplicator --state run --tiles 8  \<br />                --landing-zone s3://cql-replicator-1234567890-us-west-2 \ <br />                --region us-west-2 \                              <br />                --src-keyspace source_keyspace \ <br />                --src-table source_table \  <br />                --trg-keyspace taget_keyspace \<br />                --writetime-column column_name \<br />                --trg-table target_table --inc-traffic</pre>Lo spazio chiave e la tabella di origine si trovano `source_keyspace.source_table` nel cluster Cassandra. Lo spazio chiave e la tabella di destinazione si trovano `target_keyspace.target_table` in Amazon Keyspaces. Il parametro `--inc-traffic` aiuta a evitare che il traffico incrementale sovraccarichi il cluster Cassandra e Amazon Keyspaces con un numero elevato di richieste.Per replicare gli aggiornamenti, `--writetime-column regular_column_name` aggiungili alla riga di comando. La colonna normale verrà utilizzata come fonte del timestamp di scrittura. | AWS DevOps | 

### Monitora il processo di migrazione
<a name="monitor-the-migration-process"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida le righe di Cassandra migrate durante la fase di migrazione storica. | Per ottenere il numero di righe replicate durante la fase di riempimento, esegui il seguente comando:<pre>./cqlreplicator --state stats \<br />                --landing-zone s3://cql-replicator-1234567890-us-west-2 \  <br />                --src-keyspace source_keyspace --src-table source_table --region us-west-2</pre> | AWS DevOps | 

### Interrompi il processo di migrazione
<a name="stop-the-migration-process"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Usa il `cqlreplicator` comando o la console AWS Glue. | Per interrompere correttamente il processo di migrazione, esegui il seguente comando:<pre>./cqlreplicator --state request-stop --tiles 8 \                         <br />                --landing-zone s3://cql-replicator-1234567890-us-west-2 \     <br />                --region us-west-2 \                     <br />                --src-keyspace source_keyspace --src-table source_table</pre>Per interrompere immediatamente il processo di migrazione, utilizza la console AWS Glue. | AWS DevOps | 

### Eliminazione
<a name="clean-up"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare le risorse distribuite. | Il seguente comando eliminerà il job AWS Glue, il connettore, il bucket S3 e la tabella Keyspaces: `ledger`<pre>./cqlreplicator --state cleanup --landing-zone s3://cql-replicator-1234567890-us-west-2</pre> | AWS DevOps | 

## risoluzione dei problemi
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| I job di AWS Glue non sono riusciti e hanno restituito un errore di memoria esaurita (OOM). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | 

## Risorse correlate
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-resources"></a>
+ [CQLReplicator con AWS Glue README.MD](https://github.com/aws-samples/cql-replicator/blob/main/glue/README.MD)
+ [Documentazione AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [Documentazione di Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html)
+ [Apache Cassandra](https://cassandra.apache.org/_/index.html)

## Informazioni aggiuntive
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-additional"></a>

**Considerazioni sulla migrazione**

Puoi utilizzare AWS Glue per migrare il carico di lavoro di Cassandra su Amazon Keyspaces, mantenendo al contempo i database di origine Cassandra completamente funzionanti durante il processo di migrazione. Una volta completata la replica, puoi scegliere di trasferire le tue applicazioni su Amazon Keyspaces con un ritardo di replica minimo (meno di minuti) tra il cluster Cassandra e Amazon Keyspaces. Per mantenere la coerenza dei dati, puoi anche utilizzare una pipeline simile per replicare i dati nel cluster Cassandra da Amazon Keyspaces.

**Scrivi calcoli unitari**

Ad esempio, considera che intendi scrivere 500.000.000 con la dimensione della riga 1 KB nell'arco di un'ora. Il numero totale di unità di scrittura Amazon Keyspaces (WCUs) richieste si basa su questo calcolo:

`(number of rows/60 mins 60s) 1 WCU per row = (500,000,000/(60*60s) * 1 WCU) = 69,444 WCUs required`

69.444 WCUs al secondo è la tariffa per 1 ora, ma potresti aggiungere un po' di protezione per le spese generali.  Ad esempio, `69,444 * 1.10 = 76,388 WCUs` ha spese generali del 10%.

**Crea uno spazio chiave utilizzando CQL**

Per creare uno spazio chiave utilizzando CQL, esegui i seguenti comandi:

```
CREATE KEYSPACE target_keyspace WITH replication = {'class': 'SingleRegionStrategy'}
CREATE TABLE target_keyspace.target_table ( userid uuid, level text, gameid int, description text, nickname text, zip text, email text, updatetime text, PRIMARY KEY (userid, level, gameid) ) WITH default_time_to_live = 0 AND CUSTOM_PROPERTIES = {'capacity_mode':{ 'throughput_mode':'PROVISIONED', 'write_capacity_units':76388, 'read_capacity_units':3612 }} AND CLUSTERING ORDER BY (level ASC, gameid ASC)
```