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:
- Suporte nativo para Spark SQL
- Suporte nativo para Spark Streaming
- Locais preferenciais para acesso a chave/valor
- 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:
- ID do grupo: com.couchbase.client
- ID do artefato: spark-connector_2.10 ou spark-connector_2.11
- 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.
Existe uma porta Java disponível para esse conector?
há um pacote java \"japi\" que fornece wrappers orientados a java: https://github.com/couchbasela…
sobre a criação de um índice :
criar índice
testResult_E
emresultado 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?
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 ;)
Olá,
No sdk do couchbase, existe uma API de gerador de uuid?
não, não há
Obrigado!
Onde posso usar a visualização de uuid do guia?
Você pode me dizer qual mecanismo js o CS utiliza?
Olá,
Como posso descobrir o caminho do js-lib usado pelo CS?
E como posso adicionar a js-lib definida por sef ao CS?
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á.
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?
Olá,
A CS possui apenas 10 baldes?