Usar o OKE para Melhorar a Localidade de Dados da Atividade do Cassandra e do Spark

Introdução

O Apache Cassandra é um banco de dados distribuído e sem mestre em que cada nó possui intervalos de token. O Apache Spark é um mecanismo de computação distribuído que pode usar o conector Spark–Cassandra para leitura nas réplicas Cassandra. No Kubernetes, os pods são programados sem conhecimento de onde os dados residem, portanto, a localidade dos dados não é garantida.

Este tutorial mostra como o OKE pode melhorar a localidade com os primitivos do Kubernetes: StatefulSets (identidade estável para Cassandra), labels de nó e afinidade/anti-afinidade para co-localizar executores do Spark com pods Cassandra — portanto, as leituras são servidas do mesmo nó (ideal) ou, pior dos casos, um salto para a réplica co-localizada.

Objetivos

Pré-requisitos

  1. Clique abaixo para abrir a pilha na console do OCI:

    Implantar para o Oracle Cloud

  2. Siga o fluxo guiado para:

  1. Depois que a pilha for concluída, você obterá o IP do bastion na seção de saída.

    Saída de pilha

Tarefa 2: Estabelecer Conexão com o Bastion e Verificar a Implantação

O provisionamento inicial da infraestrutura é concluído em cerca de 15 minutos, mas a configuração completa (via cloud-init no bastion) leva cerca de 20 minutos a mais para instalar o Helm, implantar o Cassandra e o Spark e executar o job de leitura.

  1. Para monitorar o processo, use SSH no bastion:

    ssh -i <path-to-private-key> opc@<bastion_public_ip>

  2. Execute o comando abaixo para monitorar o andamento do script cloudinit.

    tail -f /var/log/oke-automation.log

  3. A pilha é concluída quando você vê os 3 valores pré-implantados do Cassandra sendo lidos e a mensagem Cloud-init complete.

    Cloud-init completo

Observação: O que o script cloudinit fez é:

  1. Na VM do bastion, confirme os nós existentes:

    kubectl get nodes

  2. Confirmar rótulos de localidade. Espere dois nós com spark-locality=true e data-locality=enabled.

    kubectl get nodes --show-labels | grep -E 'spark-locality|data-locality'

  3. Verificar posicionamento do Cassandra:

    kubectl -n k8ssandra-operator get pods -l app.kubernetes.io/name=cassandra -o wide

  4. Verifique o posicionamento do Spark:

    kubectl -n spark get pods -o wide

  5. Verifique os logs do Job de leitura do Spark. Você deverá ver os 3 registros do testks.users e uma execução bem-sucedida.

    kubectl -n spark logs job/spark-read-cassandra --tail=20

Dica: A correspondência de valores NODE entre os pods Cassandra e Spark confirma a co-localização e as condições ideais para a localidade. Para obter resultados de Log de Fluxo mais conclusivos, insira linhas adicionais em testks.users usando cqlsh. Conjuntos de dados maiores gerarão mais tráfego de leitura, facilitando a observação de efeitos de localidade versus não localidade.

Abaixo você pode ver um exemplo de saída para os comandos acima:

verificação de nós

Tarefa 3: Observar Efeitos de Rede com Logs de Fluxo da VCN

Use Logs de Fluxo da VCN para entender onde o tráfego do Cassandra flui durante as leituras do Spark. A automação atual usa o Flannel (VXLAN), que afeta o que os Logs de Fluxo podem ver.

O que muda com o CNI

  1. Ativar Logs de Fluxo na sub-rede do colaborador.

    Na Console do OCI, ative Logs de Fluxo para a sub-rede de trabalho do OKE. Execute novamente (ou aguarde) o Job de leitura do Spark para gerar tráfego.

  2. Logs de Fluxo de Consulta (escolha o caminho que corresponde ao seu cluster)

Se estiver usando esta automação (Flannel/VXLAN): Use uma consulta avançada semelhante a:

   search "<your-flow-log-OCID>"
   | where data.protocolName = 'UDP'
   | where data.destinationPort = <vxlan-port>

Substitua pelo OCID real do recurso de Log de Fluxo e pela porta usada pela sua sobreposição (neste laboratório: 14789, consulte a figura abaixo).

Tráfego UDP

Se o cluster usar NPN:

Observação: os Logs de Fluxo podem levar alguns minutos para ingerir novas entradas.

Principais Considerações

Forneça links a recursos adicionais. Esta seção é opcional; exclua se não for necessário.

Confirmações

Mais Recursos de Aprendizado

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.