Plantilla de Apache Cassandra a Bigtable

La plantilla de migración de Apache Cassandra a Bigtable copia una tabla de Apache Cassandra y la migra a Bigtable. Requiere un proceso de configuración mínimo y replica la estructura de las tablas de Cassandra lo más fielmente posible en Bigtable.

La plantilla de migración de Apache Cassandra a Bigtable es útil para:

  • Migrar bases de datos de Apache Cassandra si se puede aceptar un periodo breve de inactividad.
  • Replicar periódicamente tablas de Cassandra en Bigtable para permitir su publicación en todo el mundo.

Requisitos del flujo de procesamiento

  • La tabla de destino de Bigtable debe existir antes de ejecutar el flujo de procesamiento.
  • Debe haber conexión de red entre los trabajadores de Dataflow y los nodos de Apache Cassandra.

Conversión de tipo

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

Aunque la mayoría de los elementos básicos se representan de la misma forma en Bigtable y en Apache Cassandra, los que se indican a continuación se representan de forma diferente:

  • 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. Este flujo de procesamiento aún no es compatible con Tuple porque no se corresponde con ningún tipo de Apache Beam.

Por ejemplo, en Apache Cassandra puedes tener una columna de tipo List llamada "mylist" y valores como los que aparecen en la siguiente tabla:

fila mylist
1 (a,b,c)

El flujo de procesamiento amplía la columna de la lista en tres columnas diferentes (conocidas en Bigtable como "calificadores de columnas"). El nombre de las columnas es "mylist", pero el flujo de procesamiento añade el índice del elemento de la lista; por ejemplo, "mylist[0]".

fila mylist[0] mylist[1] mylist[2]
1 a b c

El flujo de procesamiento gestiona los conjuntos de la misma forma que las listas, pero añade un sufijo para especificar si la celda es una clave o un valor.

fila mymap
1 {"first_key":"first_value","another_key":"different_value"}

Después de la transformación, la tabla tendrá el siguiente aspecto:

fila mymap[0].key mymap[0].value mymap[1].key mymap[1].value
1 first_key first_value another_key different_value

Conversión de clave principal

En Apache Cassandra, una clave principal se define mediante el lenguaje de definición de datos y puede ser simple, compuesta o compuesta de columnas en agrupación. Bigtable admite la creación manual de claves de registro, ordenadas lexicográficamente en una matriz de bytes. El flujo de procesamiento recoge información automáticamente sobre el tipo de clave y la genera según las prácticas recomendadas para crear claves de registro basadas en varios valores.

Parámetros de plantilla

Parámetros obligatorios

  • cassandraHosts los hosts de los nodos de Apache Cassandra en una lista separada por comas.
  • cassandraKeyspace el espacio de claves de Apache Cassandra donde se encuentra la tabla.
  • cassandraTable la tabla de Apache Cassandra que se va a copiar.
  • bigtableProjectId ID del proyecto de Google Cloud asociado a la instancia de Bigtable.
  • bigtableInstanceId el ID de la instancia de Bigtable en la que se copia la tabla de Apache Cassandra.
  • bigtableTableId nombre de la tabla de Bigtable en la que se copia la tabla de Apache Cassandra.

Parámetros opcionales

  • cassandraPort puerto TCP que se usará para acceder a Apache Cassandra en los nodos. El valor predeterminado es 9042.
  • defaultColumnFamily el nombre de la familia de columnas de la tabla de Bigtable. El valor predeterminado es default.
  • rowKeySeparator el separador que se usa para crear claves de fila. El valor predeterminado es #.
  • splitLargeRows marca para habilitar la división de filas grandes en varias solicitudes MutateRows. Ten en cuenta que, cuando una fila grande se divide entre varias llamadas a la API, las actualizaciones de la fila no son atómicas. .
  • writetimeCassandraColumnSchema ruta de GCS al esquema para copiar las horas de escritura de Cassandra en Bigtable. El comando para generar este esquema es cqlsh -e "select json * from system_schema.columns where keyspace_name='$CASSANDRA_KEYSPACE' and table_name='$CASSANDRA_TABLE'`" > column_schema.json. Asigna a $WRITETIME_CASSANDRA_COLUMN_SCHEMA una ruta de GCS, por ejemplo, gs://$BUCKET_NAME/column_schema.json. A continuación, sube el esquema a GCS: gcloud storage cp column_schema.json $WRITETIME_CASSANDRA_COLUMN_SCHEMA. Requiere la versión 2.2 de Cassandra o una posterior para admitir JSON.
  • setZeroTimestamp marca que indica si se debe asignar el valor 0 a la marca de tiempo de la celda de Bigtable si no se encuentra el tiempo de escritura de Cassandra. Si no se define esta marca, el comportamiento predeterminado es definir la marca de tiempo de la celda de Bigtable como la hora de replicación de la plantilla, es decir, ahora.

Ejecutar la plantilla

Consola

  1. Ve a la página Crear tarea a partir de plantilla de Dataflow.
  2. Ir a Crear tarea a partir de plantilla
  3. En el campo Nombre de la tarea, introduce un nombre único.
  4. Opcional: En Endpoint regional, seleccione un valor en el menú desplegable. La región predeterminada es us-central1.

    Para ver una lista de las regiones en las que puedes ejecutar una tarea de Dataflow, consulta Ubicaciones de Dataflow.

  5. En el menú desplegable Plantilla de flujo de datos, seleccione the Cassandra to Cloud Bigtable template.
  6. En los campos de parámetros proporcionados, introduzca los valores de los parámetros.
  7. Haz 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

Haz los cambios siguientes:

  • JOB_NAME: un nombre de trabajo único que elijas
  • VERSION: la versión de la plantilla que quieres usar

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: 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 encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
  • REGION_NAME: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo, us-central1
  • BIGTABLE_PROJECT_ID: el ID del proyecto en el que se encuentra Bigtable
  • BIGTABLE_INSTANCE_ID: ID de la instancia de Bigtable
  • BIGTABLE_TABLE_ID: el nombre de tu tabla de Bigtable
  • CASSANDRA_HOSTS: lista de hosts de Apache Cassandra. Si se proporcionan varios hosts, sigue las instrucciones sobre cómo escapar comas.
  • CASSANDRA_KEYSPACE: el espacio de claves de Apache Cassandra donde se encuentra la tabla
  • CASSANDRA_TABLE: la tabla de Apache Cassandra que se debe migrar

API

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

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto Google Cloud en el que quieres ejecutar la tarea de Dataflow
  • JOB_NAME: un nombre de trabajo único que elijas
  • VERSION: la versión de la plantilla que quieres usar

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: 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 encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
  • LOCATION: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo, us-central1
  • BIGTABLE_PROJECT_ID: el ID del proyecto en el que se encuentra Bigtable
  • BIGTABLE_INSTANCE_ID: ID de la instancia de Bigtable
  • BIGTABLE_TABLE_ID: el nombre de tu tabla de Bigtable
  • CASSANDRA_HOSTS: lista de hosts de Apache Cassandra. Si se proporcionan varios hosts, sigue las instrucciones sobre cómo escapar comas.
  • CASSANDRA_KEYSPACE: el espacio de claves de Apache Cassandra donde se encuentra la tabla
  • CASSANDRA_TABLE: la tabla de Apache Cassandra que se debe migrar

Siguientes pasos