Tutorial: Migrar seus dados para uma conta da API do Cassandra

APLICA-SE AO: Cassandra

Como desenvolvedor, você pode ter cargas de trabalho existentes do Cassandra em execução no local ou na nuvem, mas talvez você queira migrá-las para o Azure. Você pode migrar essas cargas de trabalho para um conta da API do Cassandra no Azure Cosmos DB. Este tutorial fornece instruções sobre as diversas opções disponíveis para migrar dados do Apache Cassandra para a conta da API do Cassandra no Azure Cosmos DB.

Este tutorial cobre as seguintes tarefas:

  • Planejar a migração
  • Pré-requisitos para migração
  • Migrar dados usando o comando cqlshCOPY
  • Migrar dados usando o Spark

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos para migração

  • Estime as necessidades da taxa de transferência: antes de migrar dados para a conta da API do Cassandra no Azure Cosmos DB, você deve estimar as necessidades da taxa de transferência de sua carga de trabalho. Em geral, comece com a taxa de transferência média exigida pelas operações CRUD e, em seguida, inclua a taxa de transferência adicional necessária para o Extract Transform Load ou operações pontiagudas. Você precisa dos seguintes detalhes para planejar a migração:

    • Tamanho dos dados existentes ou tamanho estimado dos dados: Define o tamanho mínimo do banco de dados e o requisito de taxa de transferência. Se você estiver estimando o tamanho dos dados para um novo aplicativo, poderá assumir que os dados são distribuídos uniformemente pelas linhas e estimar o valor multiplicando-os pelo tamanho dos dados.

    • Taxa de transferência exigida: taxa de transferência aproximada das operações de leitura (consulta/obtenção) e gravação (atualização/exclusão/inserção). Esse valor é necessário para calcular as unidades de solicitação exigidas, juntamente com o tamanho dos dados em estado estável.

    • O esquema: conecte-se ao cluster do Cassandra existente por meio de cqlsh e exporte o esquema do Cassandra:

      cqlsh [IP] "-e DESC SCHEMA" > orig_schema.cql
      

      Depois de identificar os requisitos da carga de trabalho existente, crie uma conta, um banco de dados e contêineres do Azure Cosmos DB de acordo com os requisitos de taxa de transferência reunidos.

    • Determine a cobrança da RU para uma operação: você pode determinar as RUs usando os SDKs compatíveis com a API do Cassandra. Este exemplo mostra a versão do .NET da obtenção de custos de RU.

      var tableInsertStatement = table.Insert(sampleEntity);
      var insertResult = await tableInsertStatement.ExecuteAsync();
      
      foreach (string key in insertResult.Info.IncomingPayload)
        {
           byte[] valueInBytes = customPayload[key];
           double value = Encoding.UTF8.GetString(valueInBytes);
           Console.WriteLine($"CustomPayload:  {key}: {value}");
        }
      
  • Aloque a taxa de transferência necessária: o Azure Cosmos DB pode dimensionar automaticamente o armazenamento e a taxa de transferência conforme seus requisitos aumentam. Você pode estimar suas necessidades de taxa de transferência usando a calculadora da unidade de solicitação do Azure Cosmos DB.

  • Crie tabelas na conta da API do Cassandra: antes de iniciar a migração de dados, crie previamente todas as tabelas com base no portal do Azure ou no cqlsh. Se você estiver migrando para uma conta do Azure Cosmos DB com taxa de transferência de nível de banco de dados, não deixe de fornecer uma chave de partição ao criar os contêineres.

  • Aumentar a taxa de transferência: a duração da migração de dados depende da quantidade de taxa de transferência provisionada para as tabelas no Azure Cosmos DB. Aumente o rendimento durante a migração. Com a taxa de transferência mais elevada, você pode evitar a limitação de taxa e migrar em menos tempo. Depois de concluir a migração, diminua a taxa de transferência para economizar custos. Também é recomendável que você tenha a conta do Azure Cosmos DB na mesma região que o seu banco de dados de origem.

  • Habilitar o TLS: O Azure Cosmos DB tem padrões e requisitos de segurança rígidos. Habilite o TLS ao interagir com sua conta. Quando você usar a CQL com SSH, terá a opção de fornecer informações de TLS.

Opções para migrar dados

Você pode mover dados de cargas de trabalho existentes do Cassandra para o Azure Cosmos DB usando o comando cqlshCOPY ou o Spark.

Migrar dados usando o comando cqlsh COPY

Use o comando CQL COPY para copiar dados locais para a conta da API do Cassandra no Azure Cosmos DB.

Aviso

Use apenas a cópia CQL para migrar pequenos conjuntos de dados. Para mover grandes conjuntos de dados, migre-os usando o Spark.

  1. Para ter certeza de que o arquivo CSV contém a estrutura de arquivo correta, use o comando COPY TO para exportar dados diretamente da tabela de origem do Cassandra para um arquivo CSV (verifique se o cqlsh está conectado à tabela de origem usando as credenciais apropriadas):

    COPY exampleks.tablename TO 'data.csv' WITH HEADER = TRUE;   
    
  2. Agora, receba as informações da cadeia de conexão da sua conta da API do Cassandra:

    • Entre no portal do Azure e acesse sua conta do Azure Cosmos DB.

    • Abra o painel Cadeia de Conexão. Aqui você vê todas as informações necessárias para se conectar à conta da API do Cassandra por meio do cqlsh.

  3. Entre no cqlsh usando as informações de conexão do portal.

  4. Use o comando CQLCOPY FROM para copiar data.csv (ainda localizado no diretório raiz do usuário em que o cqlsh está instalado):

    COPY exampleks.tablename FROM 'data.csv' WITH HEADER = TRUE;
    

Observação

A API do Cassandra dá suporte ao protocolo versão 4, que é enviado com o Cassandra 3.11. Podem ocorrer problemas ao usar versões de protocolo posteriores com a API. COPY FROM com a versão de protocolo posterior pode entrar em loop e retornar linhas duplicadas. Adicione a versão do protocolo ao comando cqlsh.

cqlsh <USERNAME>.cassandra.cosmos.azure.com 10350 -u <USERNAME> -p <PASSWORD> --ssl --protocol-version=4
Adicionar opções de limitação de taxa de transferência ao comando CQL Copy

O comando COPY no cqlsh dá suporte a vários parâmetros para controlar a taxa de ingestão de documentos no Azure Cosmos DB.

A configuração padrão do comando COPY tenta ingerir dados em ritmo muito rápido e não contabiliza o comportamento de limitação de taxa do CosmosDB. Você deve reduzir o CHUNKSIZE ou o INGESTRATE, dependendo da taxa de transferência configurada na coleção.

Recomenda-se a configuração abaixo (no mínimo) para uma coleção de 20.000 RUs quando o tamanho do documento ou registro é de 1 KB.

  • CHUNKSIZE = 100
  • INGESTRATE = 500
  • MAXATTEMPTS = 10
Comandos de exemplo
  • Copiar dados da API do Cassandra para o arquivo csv local
COPY standard1 (key, "C0", "C1", "C2", "C3", "C4") TO 'backup.csv' WITH PAGESIZE=100 AND MAXREQUESTS=1 ;
  • Copiar dados do arquivo csv local para a API do Cassandra
COPY standard2 (key, "C0", "C1", "C2", "C3", "C4") FROM 'backup.csv' WITH CHUNKSIZE=100 AND INGESTRATE=100 AND MAXATTEMPTS=10;

Importante

Há suporte somente para a versão do CQLSH COPY do Apache Cassandra de código aberto. As versões Enterprise DSE (Datastax) do CQLSH podem encontrar erros.

Migrar dados usando o Spark

Use as etapas a seguir para migrar dados para a conta da API do Cassandra com o Spark:

  1. Provisione um cluster do Azure Databricks ou um cluster do Azure HDInsight.

  2. Mova dados para o ponto de extremidade da API do Cassandra de destino. Consulte este Guia de instruções para migração com o Azure Databricks.

A migração de dados usando trabalhos do Spark é uma opção recomendada se você tiver dados residindo em um cluster existente nas máquinas virtuais do Azure ou em qualquer outra nuvem. Para fazer isso, você deve configurar o Spark como um intermediário para ingestão única ou regular. Você pode acelerar essa migração usando a conectividade do Azure ExpressRoute entre o ambiente local e o Azure.

Migração ao vivo

Onde for necessário uma migração de tempo de inatividade zero de um cluster nativo do Apache Cassandra, recomendamos configurar gravações duplas e uma carga de dados em massa separada para migrar dados históricos. Implementamos esse padrão de forma mais simples, fornecendo um proxy de gravação dupla de código aberto para permitir alterações mínimas no código do aplicativo. Confira nosso artigo sobre migração ao vivo usando proxy de gravação dupla e Apache Spark para obter mais detalhes sobre como implementar esse padrão.

Limpar os recursos

Quando já não forem necessários, você pode excluir o grupo de recursos, a conta do Azure Cosmos DB e todos os recursos relacionados. Para fazer isso, escolha o grupo de recursos da máquina virtual, escolha Excluir e, em seguida, confirme o nome do grupo de recursos que será excluído.

Próximas etapas

Neste tutorial, você aprendeu como migrar seus dados para uma conta da API do Cassandra no Azure Cosmos DB. Agora você pode aprender mais sobre outros conceitos no Azure Cosmos DB: