Sem categoria

Transformações em massa de dados do Couchbase usando o Apache Spark com uma fonte externa

A necessidade

Ah, as migrações de banco de dados. Depois de migrar para o Couchbase, em que a representação de dados do documento JSON é muito mais flexível, você não precisará mais distorcer seu processo de desenvolvimento com tanta frequência por meio do pipeline de solicitações de alteração, seguido pelo tempo de inatividade, possíveis erros e o desagrado geral quando vinculado a linhas e colunas.

Dito isso, o fato de estar no Couchbase não significa que você estará sempre livre da necessidade de fazer a transformação de dados com dados no Couchbase. Isso será apenas muito menos comum.

Esse é, de fato, um lugar interessante para o Apache Spark!

Um aparte...

Com o conector Spark e o Couchbase 4.0, você tem não apenas uma, mas quatro interfaces que são relevantes para quem usa o Spark. São elas: a interface K-V, a interface de streaming Database Change Protocol (também conhecida como DCP), a interface de consulta N1QL via Spark SQL e a interface View Query.

Eles podem ser combinados com uma série de fontes de dados diferentes do ecossistema do Spark para reunir e manipular dados de várias maneiras. Por exemplo, você pode querer transmitir os dados do Couchbase por meio do DCP, misturá-los com uma fonte de dados do HDFS e colocar os resultados de destino de volta em um bucket diferente do Couchbase.

A solução...

Tomando um caso simples, como podemos usar o Spark para escrever algum código para transformar com eficiência um conjunto de dados dentro do Couchbase?

Imagine o cenário em que você adquiriu um novo conjunto de dados sobre jogadores em formato JSON. Todos eles estarão jogando seu novo jogo FizzBuzz em breve, e os perfis foram enviados por um parceiro. Todos os perfis recebidos são parecidos com este:

O problema é que os perfis do FizzBuzz são todos parecidos com este:

Normalmente, se você tivesse outra forma para os dados, adicionaria um pouco de lógica para o mapeamento no momento da leitura e da gravação. No entanto, essa transição específica é um processo único e vem com um detalhe adicional. Esse "entitlementtoken" precisa ser consultado em um backup do banco de dados MySQL que você também possui. Você não quer ter que provisionar ou manter uma grande implementação do MySQL para lidar com o tráfego do dia do lançamento, portanto, uma transformação única antes do lançamento é melhor.

O ideal seria transmitir os dados, encontrar aqueles com a "forma" que desejamos e transformá-los com o Spark com base em uma consulta SQL.

Primeiro, precisamos configurar nossa conexão e transmitir os dados, procurando a forma do JSON já importado. Isso usará a interface DCP do Couchbase para transmitir os dados.

Uma limitação atual é que o DStream nunca para, mas podemos simplesmente monitorar quando não vemos mais dados sendo transformados como uma solução alternativa para esse caso simples.

Em seguida, por item, precisamos aplicar uma transformação com base nessa pesquisa do MySQL. Para fazer isso, precisaremos carregar os dados do MySQL. Supondo que a tabela do MySQL tenha a seguinte aparência:

Queremos carregar os dados do MySQL como um DataFrame. Como o StreamingContext nos fornece RDDs para unir, nós o converteremos em um conjunto de RDDs para uma união posterior dentro do fluxo. O Spark 1.6 pode tornar isso mais fácil. Essa conversão tem a seguinte aparência (extraída para uma função para facilitar a leitura):

Também precisamos adicionar o novo token de direito (também extraído):

No final, temos uma boa descrição fluente da nossa transformação, modificando os RDDs em voo que precisam de alterações. Por fim, isso grava os dados transformados de volta no Couchbase, substituindo os itens usando a interface K-V.

O O exemplo completo está no couchbase-spark-samples repositório.

A beleza desse exemplo é que ele é fácil de entender o que está acontecendo e bastante trivial para ser dimensionado. É provável que sua própria transformação seja mais complexa, mas esse exemplo deve lhe dar uma noção do que é possível e algo a ser desenvolvido.

Sempre há espaço para melhorias.

Um problema é que o MySQL pode ser maior do que o que eu quero carregar na memória. O Spark leva isso em conta ao oferecer uma maneira de dividir os DataFrames. Eu não precisava disso aqui e queria que a amostra fosse legível. Outra coisa que pode ajudar nisso é a capacidade de fazer referência a um SparkContext em um StreamingContext existente. O Spark não permite isso no momento por boas razões, mas eu diria que esse caso de uso simples de fazer uma pesquisa de registro único de dentro do fluxo faz sentido.

No Conector Couchbase, no momento, a interface DCP é classificada como volátil e deve ser considerada experimental. Além disso, o exemplo acima é muito rápido, mas precisa de ajuda para ser dimensionado. Uma atualização futura do meu colega Sergey Avseyev permitirá dividir os fluxos de DCP entre os trabalhadores do Spark para paralelizar essa transformação.

Para concluir

O Spark é uma nova e excelente ferramenta para esse tipo de transformação. As mesmas técnicas podem certamente ser aplicadas à migração para o Couchbase a partir de uma fonte de dados diferente, como um banco de dados relacional. A técnica pode até ser expandida com o aprendizado de máquina do Spark para criar um modelo em torno do fluxo de dados do Couchbase para antecipar resultados.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Matt Ingenthron, diretor sênior de engenharia de SDK, Couchbase

Matt Ingenthron é o diretor sênior de engenharia da Couchbase, onde se concentra na interface do desenvolvedor em SDKs, conectores e outros projetos. Ele contribuiu para o projeto memcached, foi um dos mantenedores do cliente Java spymemcached e um dos principais desenvolvedores do Couchbase.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.