Uso de OKE para mejorar la ubicación de los datos para la actividad de Cassandra y Spark

Introducción

Apache Cassandra es una base de datos distribuida sin maestro en la que cada nodo posee rangos de tokens. Apache Spark es un motor de recursos informáticos distribuido que puede utilizar el conector Spark-Cassandra para leer las réplicas de Cassandra. En Kubernetes, los pods se programan sin saber dónde se encuentran los datos, por lo que no se garantiza la localidad de los datos.

En este tutorial se muestra cómo OKE puede mejorar la localidad con los primitivos de Kubernetes: StatefulSets (identidad estable para Cassandra), etiquetas de nodo y afinidad/antiafinidad para coubicar ejecutores de Spark con los pods de Cassandra, de modo que las lecturas se sirven desde el mismo nodo (ideal) o, en el peor de los casos, un salto a la réplica en la misma ubicación.

Objetivos

Requisitos

  1. Haga clic a continuación para abrir la pila en la consola de OCI:

    Despliegue en Oracle Cloud

  2. Siga el flujo guiado para:

  1. Cuando termine la pila, obtendrá la IP del bastión en la sección de salida.

    Salida de pila

Tarea 2: Conexión al bastión y verificación del despliegue

El aprovisionamiento inicial de infraestructura se completa en unos 15 minutos, pero la configuración completa (mediante cloud-init en el bastión) tarda unos 20 minutos más en instalar Helm, desplegar Cassandra y Spark y ejecutar el trabajo de lectura.

  1. Para supervisar el proceso, utilice SSH en el bastión:

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

  2. Ejecute el siguiente comando para supervisar el progreso del script cloudinit.

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

  3. La pila se completa cuando ve los 3 valores iniciales de Cassandra que se están leyendo y el mensaje Cloud-init complete.

    Inicialización en la nube completa

Nota: Lo que ha hecho el script cloudinit es lo siguiente:

  1. En la máquina virtual bastión, confirme los nodos existentes:

    kubectl get nodes

  2. Confirmar etiquetas de localidad. Espere dos nodos con spark-locality=true y data-locality=enabled.

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

  3. Verifique la ubicación de Cassandra:

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

  4. Verifique la ubicación de Spark:

    kubectl -n spark get pods -o wide

  5. Compruebe los logs de trabajos de lectura de Spark. Debería ver los 3 registros de testks.users y una ejecución correcta.

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

Consejo: la coincidencia de valores de NODE en los pods de Cassandra y Spark confirma la ubicación conjunta y las condiciones ideales para la localidad. Para obtener resultados de log de flujo más concluyentes, inserte filas adicionales en testks.users mediante cqlsh. Los conjuntos de datos más grandes generarán más tráfico de lectura, lo que facilitará la observación de los efectos de localidad frente a los de no localidad.

A continuación, puede ver una salida de ejemplo para los comandos anteriores:

comprobación de nodos

Tarea 3: Observación de los efectos de red con logs de flujo de VCN

Utilice los logs de flujo de VCN para comprender dónde fluye el tráfico de Cassandra durante las lecturas de Spark. La automatización actual utiliza Flannel (VXLAN), que afecta lo que pueden ver los logs de flujo.

Lo que cambia con el CNI

  1. Active los logs de flujo en la subred de trabajador.

    En la consola de OCI, active los logs de flujo para la subred de trabajador de OKE. Vuelva a ejecutar (o espere) el trabajo de lectura de Spark para generar tráfico.

  2. Logs de flujo de consulta (seleccione la ruta que coincide con el cluster)

Si utiliza esta automatización (Flannel/VXLAN): utilice una consulta avanzada similar a:

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

Sustituya por el OCID del recurso de log de flujo real y por el puerto utilizado por la superposición (en este laboratorio: 14789, consulte la imagen siguiente).

Tráfico UDP

Si el cluster utiliza NPN:

Nota: Los logs de flujo pueden tardar unos minutos en ingerir nuevas entradas.

Consideraciones clave

Proporcione enlaces a recursos adicionales. Esta sección es opcional; suprímala si no es necesario.

Acuses de recibo

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.