Plantilla de Apache Cassandra a Bigtable

La plantilla de Apache Cassandra a Bigtable copia una tabla de Apache Cassandra a Bigtable. Tiene requisitos de configuración mínimos y replica lo mejor posible la estructura de la tabla de Cassandra en Bigtable.

La plantilla de Apache Cassandra a Bigtable es útil para las siguientes acciones:

  • Migrar la base de datos de Apache Cassandra cuando es aceptable tener un tiempo de inactividad breve
  • Replicar de forma periódica las tablas de Cassandra en Bigtable para fines de entrega global

Requisitos de la canalización

  • La tabla de destino de Bigtable debe existir antes de ejecutar la canalización.
  • Debe existir una conexión de red entre los trabajadores de Dataflow y los nodos de Apache Cassandra.

Conversión de tipos

La plantilla de Apache Cassandra a Bigtable convierte automáticamente los tipos de datos de Apache Cassandra en los de Bigtable.

La mayoría de los tipos de datos primitivos se representan de la misma manera en Bigtable y Apache Cassandra. Sin embargo, los siguientes datos primitivos se representan de forma distinta:

  • Date y Timestamp se convierten en objetos DateTime
  • UUID se convierte en String
  • Varint se convierte en BigDecimal

Apache Cassandra también admite de forma nativa tipos más complejos, como Tuple, List, Set y Map. Esta canalización no admite tuplas, ya que no hay un tipo correspondiente en Apache Beam.

Por ejemplo, en Apache Cassandra puedes tener una columna de tipo List denominada “mylist” y valores como los de la siguiente tabla:

row milista
1 (a,b,c)

La canalización expande la columna de lista en tres diferentes (conocidas en Bigtable como calificadores de columna). El nombre de las columnas es “mylist”, pero la canalización anexa el índice del elemento de la lista, como “mylist[0]”.

row mylist[0] milista[1] milista[2]
1 a b c

La canalización controla los conjuntos del mismo modo que las listas, pero agrega un sufijo para indicar si la celda es una clave o un valor.

row mimapa
1 {"first_key":"first_value","another_key":"different_value"}

Después de la transformación, la tabla aparece de la siguiente manera:

row mymap[0].key mimapa[0].valor mymap[1].key mymap[1].value
1 primera_clave primer_valor otra_clave otro_valor

Conversión de claves primarias

En Apache Cassandra se establece una clave primaria con el lenguaje de definición de datos. La clave primaria puede ser simple, compuesta o conformada por columnas de agrupamiento en clústeres. Bigtable admite la construcción manual de claves de fila, ordenadas de forma lexicográfica en un array de bytes. Esta canalización recopila de manera automática información sobre el tipo de clave y crea la clave según las prácticas recomendadas para compilar claves de filas basadas en varios valores.

Parámetros de la plantilla

Parámetro Descripción
cassandraHosts Los hosts de los nodos de Apache Cassandra en una lista separada por comas.
cassandraPort El puerto TCP para alcanzar a Apache Cassandra en los nodos; el valor predeterminado es 9042 (opcional).
cassandraKeyspace El espacio de claves de Apache Cassandra en el que se encuentra la tabla.
cassandraTable La tabla de Apache Cassandra que se copiará.
bigtableProjectId El ID del proyecto de Google Cloud de la instancia de Bigtable en la que se copia la tabla Apache Cassandra.
bigtableInstanceId El ID de instancia de Bigtable en el que se copiará la tabla de Apache Cassandra.
bigtableTableId El nombre de la tabla de Bigtable en la que se copiará la tabla de Apache Cassandra.
defaultColumnFamily El nombre de la familia de columnas de la tabla de Bigtable; el valor predeterminado es default (opcional).
rowKeySeparator El separador que se usa para compilar la clave de fila; el valor predeterminado es # (opcional).

Ejecuta la plantilla

Consola

  1. Ve a la página Crear un trabajo a partir de una plantilla de Dataflow.
  2. Ir a Crear un trabajo a partir de una plantilla
  3. En el campo Nombre del trabajo, ingresa un nombre de trabajo único.
  4. Opcional: Para Extremo regional, selecciona un valor del menú desplegable. La región predeterminada es us-central1.

    Para obtener una lista de regiones en las que puedes ejecutar un trabajo de Dataflow, consulta Ubicaciones de Dataflow.

  5. En el menú desplegable Plantilla de Dataflow, selecciona the Cassandra to Cloud Bigtable template.
  6. En los campos de parámetros proporcionados, ingresa los valores de tus parámetros.
  7. Haga clic en Ejecutar trabajo.

gcloud

En tu shell o terminal, ejecuta la plantilla:

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

Reemplaza lo siguiente:

  • JOB_NAME: Es el nombre del trabajo que elijas
  • VERSION: Es la versión de la plantilla que deseas usar.

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta superior non-dated en el bucket gs://dataflow-templates-REGION_NAME/latest/
    • el nombre de la versión, como 2023-09-12-00_RC00, para usar una versión específica de la plantilla, que se puede encontrar anidada en la carpeta superior con fecha correspondiente en el bucket gs://dataflow-templates-REGION_NAME/
  • REGION_NAME: La región en la que deseas implementar tu trabajo de Dataflow, por ejemplo, us-central1
  • BIGTABLE_PROJECT_ID: el ID del proyecto en el que se encuentra Bigtable
  • BIGTABLE_INSTANCE_ID: el ID de la instancia de Bigtable
  • BIGTABLE_TABLE_ID: el nombre de tu tabla de Bigtable
  • CASSANDRA_HOSTS: Es la lista de hosts de Apache Cassandra. Si se proporcionan varios hosts, sigue las instrucciones para escapar de las comas.
  • CASSANDRA_KEYSPACE: Es el espacio de claves de Apache Cassandra en el que se encuentra la tabla.
  • CASSANDRA_TABLE: Es la tabla de Apache Cassandra que debe migrarse.

API

Para ejecutar la plantilla con la API de REST, envía una solicitud HTTP POST. Para obtener más información de la API y sus permisos de autorización, 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" }
}

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto de Google Cloud en el que deseas ejecutar el trabajo de Dataflow.
  • JOB_NAME: Es el nombre del trabajo que elijas
  • VERSION: Es la versión de la plantilla que deseas usar.

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta superior non-dated en el bucket gs://dataflow-templates-REGION_NAME/latest/
    • el nombre de la versión, como 2023-09-12-00_RC00, para usar una versión específica de la plantilla, que se puede encontrar anidada en la carpeta superior con fecha correspondiente en el bucket gs://dataflow-templates-REGION_NAME/
  • LOCATION: La región en la que deseas implementar tu trabajo de Dataflow, por ejemplo, us-central1
  • BIGTABLE_PROJECT_ID: el ID del proyecto en el que se encuentra Bigtable
  • BIGTABLE_INSTANCE_ID: el ID de la instancia de Bigtable
  • BIGTABLE_TABLE_ID: el nombre de tu tabla de Bigtable
  • CASSANDRA_HOSTS: Es la lista de hosts de Apache Cassandra. Si se proporcionan varios hosts, sigue las instrucciones para escapar de las comas.
  • CASSANDRA_KEYSPACE: Es el espacio de claves de Apache Cassandra en el que se encuentra la tabla.
  • CASSANDRA_TABLE: Es la tabla de Apache Cassandra que debe migrarse.

¿Qué sigue?