Conector Couchbase Spark - Atualização da visualização para desenvolvedores

Já faz algum tempo que não apresentamos a primeira prévia para desenvolvedores do nosso novíssimo Couchbase Spark Connector. Por isso, achamos que era hora de fazer outra versão, com aprimoramentos e alguns recursos novos. Em especial:

  1. Suporte nativo para Spark SQL
  2. Suporte nativo para Spark Streaming
  3. Locais preferenciais para acesso a chave/valor
  4. Atualizações de dependências

O mais importante é que agora usamos Apache Spark 1.3que será a versão de destino para a versão GA do conector.

Se você quiser mergulhar de cabeça agora mesmo, aqui estão as coordenadas:

  1. ID do grupo: com.couchbase.client
  2. ID do artefato: spark-connector_2.10 ou spark-connector_2.11
  3. Versão: 1.0.0-dp2

Certifique-se de incluir o repositório do Couchbase, pois ele é uma versão preliminar:

Além da dependência simples do maven, agora também estamos disponíveis em spark-packages.org!

Suporte ao Spark SQL

O principal motivo da atualização para o Spark 1.3 é o suporte à nova API DataFrame. A nova API DataFrame é baseada em SQL e nos permite integrar fortemente a implementação específica de linguagem do couchbase, o N1QL. Isso proporciona uma experiência perfeita de ponta a ponta, que é familiar e totalmente integrada.

O conector permite que você defina relações (o Couchbase em si não impõe um esquema) e você pode fornecer um esquema manualmente ou deixar que o conector o infira para você. Se quiser a inferência automática do esquema, é uma boa ideia fornecer algum tipo de filtro (por exemplo, em um campo de tipo) para obter melhor precisão. Ele carregará documentos de amostra de forma transparente e criará um esquema para você, que poderá ser consultado.

Aqui está um exemplo com a amostra de viagem atual:

Isso primeiro imprimirá um esquema como:

E, em seguida, os resultados no formato de:

Embora seja ótimo trabalhar com isso, o verdadeiro poder vem quando você deseja combinar DataFrames de fontes diferentes. O exemplo a seguir busca dados do HDFS e do Couchbase e os consulta em conjunto:

Observe que atualmente não há suporte para objetos e matrizes JSON aninhados, mas haverá na próxima versão. Eles podem aparecer no esquema, mas falharão durante o tempo de consulta (quando você quiser consultar um desses campos ou incluir no resultado).

Suporte ao Spark Streaming

A primeira visualização do desenvolvedor já oferecia suporte para a gravação de dados de um Spark Stream no Couchbase. Nesta visualização para desenvolvedores, adicionamos suporte experimental para a utilização do nosso protocolo "DCP" para alimentar o Spark com mutações e informações de instantâneos o mais rápido possível. Você pode usar isso para fazer uma análise quase em tempo real dos dados à medida que eles chegam ao cluster do Couchbase.

Observe que, no momento, o suporte a snapshot e reversão não está implementado, portanto, o failover e o rebalanceamento não funcionarão como esperado.

Aqui está um exemplo simples de como alimentar as alterações de seu balde:

Isso é tudo o que você precisa fazer neste momento. Certifique-se de testá-lo em um bucket vazio, pois atualmente ele também fornecerá todos os dados do bucket. Os recursos para iniciar no instantâneo atual serão adicionados em uma versão futura. Se você executar o código e depois escrever documentos no bucket, o Spark Streaming o notificará sobre essas alterações:

Em seguida, você pode filtrar as mutações e executar qualquer tipo de operação de fluxo sobre elas, inclusive alimentá-las em um algoritmo de aprendizado de máquina ou armazená-las em um armazenamento de dados diferente após o processamento (ou até mesmo de volta ao couchbase).

Locais preferenciais para acesso a chave/valor

Um dos fatores que prejudicam o desempenho ao usar o Spark são as operações de embaralhamento. Um "shuffle" é uma operação que envolve a transferência de dados de um trabalhador para outro pela rede. Como o tráfego de rede é sempre ordens de magnitude mais lento do que o processamento na memória, o embaralhamento precisa ser evitado o máximo possível.

Quando você está carregando documentos por meio de seus IDs exclusivos, o conector agora sempre (e de forma transparente) indica ao Spark onde o documento está localizado no Couchbase. Como resultado, se você implantar um Spark Worker em cada nó do Couchbase, o Spark será inteligente o suficiente para despachar a tarefa diretamente para esse worker, eliminando a necessidade de transferir o documento pela rede e permitindo o processamento local.

Como o local é apenas uma dica, você ainda pode executar seus workers em nós diferentes e o Spark os despachará adequadamente se não conseguir encontrar uma correspondência perfeita.

No futuro, também planejamos locais preferenciais para pesquisas N1QL e View com base no nó de destino em que a consulta será executada.

Recursos planejados e próximas etapas

Embora essa versão nos aproxime da conclusão, ainda temos muitas coisas a concluir. O próximo marco será uma versão beta e incluirá recursos como a API java, aprimoramentos no suporte ao Spark SQL e Streaming e, é claro, correções e melhorias de estabilidade à medida que as encontrarmos.

Como ainda não chegamos à versão beta, forneça o máximo de feedback possível para que possamos alterar a API conforme necessário.

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

Autor

Postado por Michael Nitschinger

Michael Nitschinger trabalha como engenheiro de software principal na Couchbase. Ele é o arquiteto e mantenedor do Couchbase Java SDK, um dos primeiros drivers de banco de dados totalmente reativos na JVM. Ele também é o autor e mantenedor do Couchbase Spark Connector. Michael participa ativamente da comunidade de código aberto e contribui para vários outros projetos, como RxJava e Netty.

11 Comentários

  1. Existe uma porta Java disponível para esse conector?

    1. há um pacote java \"japi\" que fornece wrappers orientados a java: https://github.com/couchbasela

  2. sobre a criação de um índice :

    criar índice testResult_E em resultado do teste(Teste12._asda) usando gsi;
    {
    \"requestID\": \”7c7ddd6c-55c5-4aec-9c61-d805c350fdfe\”,
    \"assinatura\": nulo,
    \"results\": [
    ],
    \"status\": \"success\",
    \"metrics\": {
    \"elapsedTime\": \"4.970636925s\",
    \"executionTime\": \"4.969727845s\",
    \"resultCount\": 0,
    \"resultSize\": 0
    }
    }

    De fato, o _asda a chave no jsonDoc \'Test12\' não existe.
    Por que ele alerta as informações de erro?

    1. criar índice não indexa um documento específico... aqui o que você instruiu foi \"no bucket testResult, se ele existir, indexe o campo JSON _asda dentro do campo JSON Test12\". criar um índice para um único documento não faz sentido, basta usar \"WHERE META(bucketName).id = documentId\".

      Em resumo, a sintaxe é \"CREATE INDEX indexName ON bucketName(oneFieldInJSON, orMore, or.even.path.in.JSON)\".

      Você pode até colocar uma cláusula where no final, por exemplo, se um dos campos for uma categoria, indexe somente uma categoria específica: CREATE INDEX topProductsByPrice ON products(price) WHERE category = \"bestseller\".

      Também prefira os fóruns (http://forums.couchbase.com) para interações com a equipe e perguntas técnicas, é muito mais vigiado e fácil de acompanhar para nós ;)

      1. Olá,
        No sdk do couchbase, existe uma API de gerador de uuid?

          1. Obrigado!
            Onde posso usar a visualização de uuid do guia?

            Você pode me dizer qual mecanismo js o CS utiliza?

          2. Olá,
            Como posso descobrir o caminho do js-lib usado pelo CS?
            E como posso adicionar a js-lib definida por sef ao CS?

          3. use os fóruns (http://forums.couchbase.com) para interações com a equipe e perguntas técnicas, pois é muito mais monitorado, mais fácil de trabalhar para todos os envolvidos e você pode postar perguntas mais detalhadas lá.

          4. Desculpe, mas agora não consigo acessar o site. Porque a resposta httpresponse está sempre em branco. Você pode dizer aos outros\' disqus quem pode me ajudar?

          5. Olá,
            A CS possui apenas 10 baldes?

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.