Modelo do Apache Cassandra para o Bigtable

O modelo do Apache Cassandra para o Bigtable copia uma tabela do Apache Cassandra para o Bigtable. Esse modelo precisa de configuração mínima e replica a estrutura da tabela no Cassandra da maneira mais semelhante possível no Bigtable.

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

  • migrar o banco de dados do Apache Cassandra quando um tempo de inatividade curto é aceitável;
  • replicar periodicamente as tabelas do Cassandra no Bigtable para exibição global.

Requisitos de pipeline

  • A tabela de destino do Bigtable precisa existir antes da execução do pipeline.
  • Conexão de rede entre workers do Dataflow e nós do Apache Cassandra.

Conversão de tipo

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

A maioria dos primitivos é representada da mesma forma no Bigtable e no Apache Cassandra, mas estes são diferentes:

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

O Apache Cassandra também é compatível nativamente com tipos mais complexos como Tuple, List, Set e Map. As tuplas não são compatíveis com esse pipeline por que não há um tipo correspondente no Apache Beam.

Por exemplo, no Apache Cassandra, é possível ter uma coluna do tipo List chamada "mylist" e valores como os da tabela a seguir:

linha mylist
1 (a,b,c)

O pipeline expande a coluna de lista em três colunas diferentes, conhecidas no Bigtable como qualificadoras de colunas. O nome das colunas é "mylist", mas o 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 extra 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 aparece da seguinte maneira:

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 primária

No Apache Cassandra, uma chave primária é definida usando a linguagem de definição de dados. Ela pode ser simples, composta ou constituída por colunas de clustering. O Bigtable é compatível com a construção de chave de linha manual, lexicograficamente ordenada em uma matriz de bytes. O pipeline coleta automaticamente informações sobre o tipo de chave e cria uma chave com base nas práticas recomendadas para criar chaves de linha com base em diversos valores.

Parâmetros do modelo

Parâmetros obrigatórios

  • cassandraHosts: os hosts dos nós do Apache Cassandra em uma lista separada por vírgulas.
  • cassandraKeyspace: espaço de chaves do Apache Cassandra em que a tabela está localizada.
  • cassandraTable: a tabela do Apache Cassandra a ser copiada.
  • bigtableProjectId: o ID do projeto do Google Cloud associado à instância do Bigtable.
  • bigtableInstanceId: o ID da instância do Bigtable em que a tabela do Apache Cassandra é copiada.
  • bigtableTableId: o nome da tabela do Bigtable em que a tabela do Apache Cassandra é copiada.

Parâmetros opcionais

  • cassandraPort: a porta TCP a ser usada para acessar o Apache Cassandra nos nós. O valor padrão é 9042.
  • defaultColumnFamily: o nome do grupo de colunas da tabela do Bigtable. O valor padrão é o padrão.
  • rowKeySeparator: o separador usado para criar chaves de linha. O valor padrão é "#".
  • splitLargeRows: a sinalização para ativar a divisão de linhas grandes em várias solicitações mutateRows. Quando uma linha grande é dividida entre várias chamadas de API, as atualizações da linha não são atômicas. .
  • writetimeCassandraColumnSchema : caminho do GCS para o esquema de cópia de writetimes do Cassandra para o Bigtable. O comando para gerar esse 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 como um caminho do GCS, por exemplo, gs://$BUCKET_NAME/column_schema.json. Em seguida, faça upload do esquema para o GCS: gcloud storage cp column_schema.json $WRITETIME_CASSANDRA_COLUMN_SCHEMA. Requer a versão 2.2 ou mais recente do Cassandra para suporte a JSON.
  • setZeroTimestamp : a flag para definir o carimbo de data/hora da célula do Bigtable como 0 se o writetime do Cassandra não estiver presente. O comportamento padrão para quando essa flag não está definida é definir o carimbo de data/hora da célula do Bigtable como o tempo de replicação do modelo, ou seja, agora.

Executar o modelo

Console

  1. Acesse a página Criar job usando um modelo do Dataflow.
  2. Acesse Criar job usando um modelo
  3. No campo Nome do job, insira um nome exclusivo.
  4. Opcional: em Endpoint regional, selecione um valor no menu suspenso. A região padrão é us-central1.

    Para ver uma lista de regiões em que é possível executar um job do Dataflow, consulte Locais do Dataflow.

  5. No menu suspenso Modelo do Dataflow, selecione the Cassandra to Cloud Bigtable template.
  6. Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
  7. Cliquem em Executar job.

gcloud

No 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:

  • JOB_NAME: um nome de job de sua escolha
  • VERSION: a versão do modelo que você quer usar

    Use estes valores:

  • REGION_NAME: a região em que você quer implantar o job do Dataflow, por exemplo, us-central1
  • BIGTABLE_PROJECT_ID: o ID do projeto em que 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 hosts do Apache Cassandra. Se forem fornecidos vários hosts, siga as instruções sobre como fazer escape de vírgulas.
  • CASSANDRA_KEYSPACE: o espaço de chaves do Apache Cassandra em que a tabela está localizada.
  • CASSANDRA_TABLE: a tabela do Apache Cassandra que precisa ser migrada

API

Para executar o modelo usando a API REST, envie uma solicitação HTTP POST. Para mais informações sobre a API e os respectivos escopos 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:

  • PROJECT_ID: o ID do projeto do Google Cloud em que você quer executar o job do Dataflow
  • JOB_NAME: um nome de job de sua escolha
  • VERSION: a versão do modelo que você quer usar

    Use estes valores:

  • LOCATION: a região em que você quer implantar o job do Dataflow, por exemplo, us-central1
  • BIGTABLE_PROJECT_ID: o ID do projeto em que 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 hosts do Apache Cassandra. Se forem fornecidos vários hosts, siga as instruções sobre como fazer escape de vírgulas.
  • CASSANDRA_KEYSPACE: o espaço de chaves do Apache Cassandra em que a tabela está localizada.
  • CASSANDRA_TABLE: a tabela do Apache Cassandra que precisa ser migrada

A seguir