

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Migración de cargas de trabajo de Apache Cassandra a Amazon Keyspaces mediante AWS Glue
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue"></a>

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

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

Este patrón le muestra cómo migrar sus cargas de trabajo actuales de Apache Cassandra a Amazon Keyspaces (para Apache Cassandra) mediante AWS Glue. CQLReplicator Puede usarlo CQLReplicator en AWS Glue para minimizar el retraso en la replicación que se produce al migrar sus cargas de trabajo en cuestión de minutos. También aprenderá a usar un bucket de Amazon Simple Storage Service (Amazon S3) para almacenar los datos necesarios para la migración, incluidos los archivos de configuración, los scripts y los archivos de [Apache Parquet](https://parquet.apache.org/). Este patrón supone que las cargas de trabajo de Cassandra están alojadas en instancias de Amazon Elastic Compute Cloud EC2 (Amazon) en una nube privada virtual (VPC).

## Requisitos previos y limitaciones
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-prereqs"></a>

**Requisitos previos **
+ Clúster de Cassandra con tabla de origen
+ Tabla objetivo en Amazon Keyspaces para replicar la carga de trabajo
+ Bucket de S3 para almacenar archivos intermedios de Parquet que contienen cambios de datos graduales
+ Bucket de S3 para almacenar archivos de configuración de trabajos y scripts

**Limitaciones**
+ CQLReplicator en AWS Glue se necesita algún tiempo para aprovisionar las unidades de procesamiento de datos (DPUs) para las cargas de trabajo de Cassandra. El retraso de la replicación entre el clúster de Cassandra y el espacio de claves y la tabla de destino en Amazon Keyspaces se reducirá a pocos minutos.

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

**Pila de tecnología de origen**
+ Apache Cassandra
+ DataStax Servidor
+ ScyllaDB

**Pila de tecnología de destino**
+ Amazon Keyspaces

**Arquitectura de migración **

El siguiente diagrama muestra un ejemplo de arquitectura en el que un clúster de Cassandra se aloja en EC2 instancias y se distribuye en tres zonas de disponibilidad. Los nodos de Cassandra están alojados en subredes privadas.

![\[Rol de servicio personalizado, Amazon Keyspaces y Amazon S3, con AWS Glue conectado a la VPC de los nodos.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e08048da-8996-4f2c-b8ed-da49fe9e693b/images/76256ab3-a1e6-4c9e-9c40-dc78f51edf0f.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. Un rol de servicio personalizado proporciona acceso a Amazon Keyspaces y al bucket de S3.

1. Un trabajo de AWS Glue lee la configuración del trabajo y los scripts del bucket de S3.

1. El trabajo de AWS Glue se conecta a través del puerto 9042 para leer los datos del clúster de Cassandra.

1. El trabajo de AWS Glue se conecta a través del puerto 9142 para escribir los datos en Amazon Keyspaces.

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

**Servicios y herramientas de AWS**
+ La [interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.
+ [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html) es un shell basado en navegador que puede utilizar para administrar los servicios de AWS mediante la interfaz de línea de comandos de AWS (AWS CLI) y una gama de herramientas de desarrollo preinstaladas.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) es un servicio de ETL totalmente gestionado que le permite clasificar, limpiar, enriquecer y mover datos de forma fiable entre almacenes de datos y flujos de datos.
+ [Amazon Keyspaces (para Apache Cassandra)](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html) es un servicio de base de datos administrada que le permite migrar, ejecutar y escalar sus cargas de trabajo de Cassandra en la nube de AWS.

**Código**

El código de este patrón está disponible en el repositorio. GitHub [CQLReplicator](https://github.com/aws-samples/cql-replicator/tree/main/glue)

## Prácticas recomendadas
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-best-practices"></a>
+ Para determinar los recursos de AWS Glue necesarios para la migración, calcule el número de filas de la tabla de Cassandra de origen. Por ejemplo, 250 000 filas por 0,25 DPU (2 vCPUs, 4 GB de memoria) con un disco de 84 GB.
+ Calienta previamente las mesas de Amazon Keyspaces antes de ponerlas en marcha. CQLReplicator Por ejemplo, ocho CQLReplicator mosaicos (trabajos con AWS Glue) pueden escribir hasta 22 K WCUs por segundo, por lo que el objetivo debe precalentarse entre 25 y 30 K WCUs por segundo.
+ Para permitir la comunicación entre los componentes de AWS Glue, utilice una regla de entrada con autorreferencia para todos los puertos TCP del grupo de seguridad.
+ Utilice la estrategia de tráfico gradual para distribuir la carga de trabajo de migración a lo largo del tiempo.

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

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un espacio de claves y una tabla de destino.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | Propietario de la aplicación, administrador de AWS, administrador de bases de datos, desarrollador de aplicaciones | 
| Configure el controlador de Cassandra para conectarse a Cassandra. | Utilice el siguiente script dde configuración:<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>El anterior script usa el conector Spark Cassandra. Para obtener más información, consulte la configuración de referencia para [Cassandra](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/). | Administrador de base de datos | 
| Configure el controlador de Cassandra para conectarse a Amazon Keyspaces. | Utilice el siguiente script dde configuración:<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>El anterior script usa el conector Spark Cassandra. Para obtener más información, consulte la configuración de referencia para [Cassandra](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/). | Administrador de base de datos | 
| Cree un rol de IAM para el trabajo de AWS Glue. | Cree un nuevo rol de servicio de AWS denominado `glue-cassandra-migration` con AWS Glue como entidad de confianza.La `glue-cassandra-migration` debería proporcionar acceso de lectura y escritura al bucket de S3 y a Amazon Keyspaces. El bucket de S3 contiene los archivos .jar, los archivos de configuración para Amazon Keyspaces y Cassandra y los archivos Parquet intermedios. Por ejemplo, contiene las políticas administradas `AWSGlueServiceRole`, `AmazonS3FullAccess` y `AmazonKeyspacesFullAccess`. | AWS DevOps | 
|  CQLReplicator Descárguelo en AWS CloudShell. | Para descargar el proyecto en la carpeta de inicio, ejecute el siguiente 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> |  | 
| Modifique los archivos de configuración de referencia. | Copie `CassandraConnector.conf` y `KeyspacesConnector.conf` en el directorio `../glue/conf` de la carpeta del proyecto. | AWS DevOps | 
| Inicie el proceso de migración. | El siguiente comando inicializa el CQLReplicator entorno. La inicialización implica copiar los artefactos .jar y crear un conector de AWS Glue, un bucket de S3, un trabajo de AWS Glue, el espacio de claves `migration` y la tabla `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>Este script incluye los siguientes parámetros:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 
| Valide la implementación. | Tras ejecutar el comando anterior, la cuenta de AWS debe contener lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicie el proceso de migración. | Para operar CQLReplicator en AWS Glue, debe usar el `--state run` comando seguido de una serie de parámetros. Sus requisitos de migración únicos determinan principalmente la configuración precisa de estos parámetros. Por ejemplo, esta configuración puede variar si decide replicar los valores y las actualizaciones del periodo de vida (TTL) o si descarga objetos que superen 1 MB a Amazon S3.Para replicar la carga de trabajo del clúster de Cassandra a Amazon Keyspaces, ejecute el siguiente 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>El espacio de claves y la tabla de origen son `source_keyspace.source_table` en el clúster de Cassandra. El espacio de claves y la tabla de destino son `target_keyspace.target_table` en Amazon Keyspaces. El parámetro `--inc-traffic` ayuda a evitar que el tráfico gradual sobrecargue el clúster de Cassandra y Amazon Keyspaces con un número elevado de solicitudes.Para replicar las actualizaciones, agregue `--writetime-column regular_column_name` a la línea de comandos. La columna normal se utilizará como origen de la marca de tiempo de escritura. | AWS DevOps | 

### Supervisión del proceso de migración
<a name="monitor-the-migration-process"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide las filas de Cassandra migradas durante la fase de migración del historial. | Para obtener el número de filas replicadas durante la fase de relleno, ejecute el siguiente 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 | 

### Detención del proceso de migración
<a name="stop-the-migration-process"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Utilice el comando `cqlreplicator` o la consola de AWS Glue. | Para detener el proceso de migración correctamente, ejecute el siguiente 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>Para detener el proceso de migración de forma inmediata, utilice la consola AWS Glue. | AWS DevOps | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los recursos implementados. | El siguiente comando eliminará el trabajo de AWS Glue, el conector, el bucket de S3 y la tabla `ledger` de Keyspaces:<pre>./cqlreplicator --state cleanup --landing-zone s3://cql-replicator-1234567890-us-west-2</pre> | AWS DevOps | 

## Resolución de problemas
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Los trabajos de AWS Glue fallaron y devolvieron el error de memoria insuficiente (OOM). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | 

## Recursos relacionados
<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)
+ [Documentación de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [Documentación de Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html)
+ [Apache Cassandra](https://cassandra.apache.org/_/index.html)

## Información adicional
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-additional"></a>

**Consideraciones sobre la migración**

Puede usar AWS Glue para migrar la carga de trabajo de Cassandra a Amazon Keyspaces y, al mismo tiempo, mantener por completo la funcionalidad de sus bases de datos de origen de Cassandra durante el proceso de migración. Una vez completada la replicación, puede transferir sus aplicaciones a Amazon Keyspaces con un retraso de replicación mínimo (inferior a minutos) entre el clúster de Cassandra y Amazon Keyspaces. Para mantener la coherencia de datos, también puede seguir un proceso similar para replicar los datos de nuevo en el clúster de Cassandra desde Amazon Keyspaces.

**Cálculos de unidades de escritura**

Pongamos que, por ejemplo, desea escribir 500.000.000 con un tamaño de fila de 1 KiB durante una hora. El número total de unidades de escritura de Amazon Keyspaces (WCUs) que necesita se basa en este cálculo:

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

La tarifa de 1 hora es de 69.444 WCUs por segundo, pero podría añadir algo de amortiguación a los gastos generales.  Por ejemplo, `69,444 * 1.10 = 76,388 WCUs` tiene una capacidad adicional del 10 por ciento.

**Creación de un espacio de claves con CQL**

Para crear un espacio de claves con CQL, ejecute los siguientes comandos:

```
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)
```