Modelo do Apache Cassandra para o Bigtable

O modelo Apache Cassandra para Bigtable copia uma tabela do Apache Cassandra para o Bigtable. Este modelo requer uma configuração mínima e replica a estrutura da tabela no Cassandra o mais próximo possível no Bigtable.

O modelo do Apache Cassandra para o Bigtable é útil para o seguinte:

  • Migrar a base de dados do Apache Cassandra quando um curto período de inatividade é aceitável.
  • Replicação periódica de tabelas do Cassandra para o Bigtable para serviço global.

Requisitos do pipeline

  • A tabela do Bigtable de destino tem de existir antes de executar o pipeline.
  • Ligação de rede entre os trabalhadores do Dataflow e os nós do Apache Cassandra.

Tipo de conversão

O modelo do Apache Cassandra para o Bigtable converte automaticamente os tipos de dados do Apache Cassandra nos tipos de dados do Bigtable.

A maioria dos tipos primitivos é representada da mesma forma no Bigtable e no Apache Cassandra. No entanto, os seguintes tipos primitivos são representados de forma diferente:

  • Date e Timestamp são convertidos em objetos DateTime
  • UUID é convertido em String
  • Varint é convertido em BigDecimal

O Apache Cassandra também suporta nativamente tipos mais complexos, como Tuple, List, Set e Map. As tuplas não são suportadas por este pipeline, uma vez que não existe um tipo correspondente no Apache Beam.

Por exemplo, no Apache Cassandra, pode ter uma coluna do tipo List denominada "mylist" e valores como os da tabela seguinte:

linha mylist
1 (a,b,c)

O pipeline expande a coluna de lista em três colunas diferentes (conhecidas no Bigtable como qualificadores de colunas). O nome das colunas é "mylist", mas a app de pipeline anexa o índice do item na lista, como "mylist[0]".

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

O pipeline processa os conjuntos da mesma forma que as listas, mas adiciona um sufixo para indicar se a célula é uma chave ou um valor.

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

Após a transformação, a tabela é apresentada da seguinte forma:

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

Conversão de chave principal

No Apache Cassandra, uma chave primária é definida através da linguagem de definição de dados. A chave primária é simples, composta ou complexa com as colunas de agrupamento. O Bigtable suporta a construção manual de chaves de linhas, ordenadas lexicograficamente numa matriz de bytes. O pipeline recolhe automaticamente informações sobre o tipo de chave e cria uma chave com base nas práticas recomendadas para criar chaves de linhas com base em vários valores.

Parâmetros de modelos

Parâmetros obrigatórios

  • cassandraHosts: os anfitriões dos nós do Apache Cassandra numa lista separada por vírgulas.
  • cassandraKeyspace: o espaço de chaves do Apache Cassandra onde a tabela está localizada.
  • cassandraTable: a tabela do Apache Cassandra a copiar.
  • bigtableProjectId: o ID do projeto do Google Cloud associado à instância do Bigtable.
  • bigtableInstanceId: o ID da instância do Bigtable para a qual a tabela do Apache Cassandra é copiada.
  • bigtableTableId: o nome da tabela do Bigtable para a qual a tabela do Apache Cassandra é copiada.

Parâmetros opcionais

  • cassandraPort: a porta TCP a usar para alcançar o Apache Cassandra nos nós. O valor predefinido é 9042.
  • defaultColumnFamily: o nome da família de colunas da tabela do Bigtable. O valor predefinido é default.
  • rowKeySeparator: o separador usado para criar chaves de linhas. O valor predefinido é #.
  • splitLargeRows: a flag para ativar a divisão de linhas grandes em vários pedidos MutateRows. Tenha em atenção que, quando uma linha grande é dividida entre várias chamadas da API, as atualizações à linha não são atómicas. .
  • writetimeCassandraColumnSchema: caminho do GCS para o esquema para copiar as horas de gravação do Cassandra para o Bigtable. O comando para gerar este esquema é cqlsh -e "select json * from system_schema.columns where keyspace_name='$CASSANDRA_KEYSPACE' and table_name='$CASSANDRA_TABLE'`" > column_schema.json. Defina $WRITETIME_CASSANDRA_COLUMN_SCHEMA para um caminho do GCS, por exemplo, gs://$BUCKET_NAME/column_schema.json. Em seguida, carregue o esquema para o GCS: gcloud storage cp column_schema.json $WRITETIME_CASSANDRA_COLUMN_SCHEMA. Requer a versão 2.2 ou posterior do Cassandra para suporte de JSON.
  • setZeroTimestamp: o indicador para definir a data/hora da célula do Bigtable como 0 se o writetime do Cassandra não estiver presente. O comportamento predefinido quando esta flag não está definida é definir a data/hora da célula do Bigtable como a hora de replicação do modelo, ou seja, agora.

Execute o modelo

Consola

  1. Aceda à página do fluxo de dados Criar tarefa a partir de um modelo.
  2. Aceda a Criar tarefa a partir de modelo
  3. No campo Nome da tarefa, introduza um nome exclusivo para a tarefa.
  4. Opcional: para Ponto final regional, selecione um valor no menu pendente. A região predefinida é us-central1.

    Para ver uma lista das regiões onde pode executar uma tarefa do Dataflow, consulte as localizações do Dataflow.

  5. No menu pendente Modelo do fluxo de dados, selecione the Cassandra to Cloud Bigtable template.
  6. Nos campos de parâmetros fornecidos, introduza os valores dos parâmetros.
  7. Clique em Executar tarefa.

gcloud

Na shell ou no terminal, execute o modelo:

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

Substitua o seguinte:

  • JOB_NAME: um nome de tarefa exclusivo à sua escolha
  • VERSION: a versão do modelo que quer usar

    Pode usar os seguintes valores:

  • REGION_NAME: a região onde quer implementar a tarefa do Dataflow, por exemplo, us-central1
  • BIGTABLE_PROJECT_ID: o ID do projeto onde o Bigtable está localizado
  • BIGTABLE_INSTANCE_ID: o ID da instância do Bigtable
  • BIGTABLE_TABLE_ID: o nome da tabela do Bigtable
  • CASSANDRA_HOSTS: a lista de anfitriões do Apache Cassandra; se forem fornecidos vários anfitriões, siga a instrução sobre como escapar às vírgulas
  • CASSANDRA_KEYSPACE: o espaço de chaves do Apache Cassandra onde a tabela está localizada
  • CASSANDRA_TABLE: a tabela do Apache Cassandra que tem de ser migrada

API

Para executar o modelo através da API REST, envie um pedido HTTP POST. Para mais informações sobre a API e os respetivos âmbitos de autorização, consulte 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" }
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde quer executar a tarefa do Dataflow Google Cloud
  • JOB_NAME: um nome de tarefa exclusivo à sua escolha
  • VERSION: a versão do modelo que quer usar

    Pode usar os seguintes valores:

  • LOCATION: a região onde quer implementar a tarefa do Dataflow, por exemplo, us-central1
  • BIGTABLE_PROJECT_ID: o ID do projeto onde o Bigtable está localizado
  • BIGTABLE_INSTANCE_ID: o ID da instância do Bigtable
  • BIGTABLE_TABLE_ID: o nome da tabela do Bigtable
  • CASSANDRA_HOSTS: a lista de anfitriões do Apache Cassandra; se forem fornecidos vários anfitriões, siga a instrução sobre como escapar às vírgulas
  • CASSANDRA_KEYSPACE: o espaço de chaves do Apache Cassandra onde a tabela está localizada
  • CASSANDRA_TABLE: a tabela do Apache Cassandra que tem de ser migrada

O que se segue?