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: o 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 na nuvem do Google 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 é default.
  • rowKeySeparator: o separador usado para criar chaves de linha. O valor padrão é #.
  • splitLargeRows: a flag 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 que copia os tempos de gravação 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 o Cassandra versão 2.2 ou mais recente para compatibilidade com 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 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 o modelo Cassandra para Cloud Bigtable.
  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/ \
    --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/
{
   "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 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