Utilizzare OKE per migliorare la localizzazione dei dati per l'attività Cassandra e Spark

Introduzione

Apache Cassandra è un database masterless distribuito in cui ogni nodo possiede intervalli di token. Apache Spark è un motore di calcolo distribuito che può utilizzare il connettore Spark-Cassandra per leggere dalle repliche Cassandra. In Kubernetes, i pod vengono pianificati senza sapere dove si trovano i dati, quindi la località dei dati non è garantita.

Questo tutorial mostra come OKE può migliorare la località con le primitive Kubernetes: StatefulSets (identità stabile per Cassandra), le etichette dei nodi e l'affinità/anti-affinità per co-locare gli esecutori Spark con i pod Cassandra, quindi le letture vengono servite dallo stesso nodo (ideale) o, nel peggiore dei casi, un salto alla replica in co-ubicazione.

Obiettivi

Prerequisiti

  1. Fare clic di seguito per aprire lo stack nella console OCI:

    Distribuisci in Oracle Cloud

  2. Segui il flusso guidato per:

  1. Una volta completato lo stack, si otterrà l'IP del bastion nella sezione di output.

    Output stack

Task 2: Connettersi al bastion e verificare la distribuzione

Il provisioning dell'infrastruttura iniziale viene completato in circa 15 minuti, ma l'impostazione completa (tramite l'inizializzazione del cloud nel bastion) richiede circa altri 20 minuti per installare Helm, distribuire Cassandra e Spark ed eseguire il job di lettura.

  1. Per monitorare il processo, SSH nel bastion:

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

  2. Eseguire il comando riportato di seguito per monitorare l'avanzamento dello script cloudinit.

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

  3. Lo stack viene completato quando vengono visualizzati i 3 valori predefiniti di Cassandra in fase di lettura e il messaggio Cloud-init complete.

    Inizializzazione cloud completata

Nota: lo script cloudinit ha eseguito le operazioni riportate di seguito.

  1. Dalla VM bastion confermare i nodi esistenti:

    kubectl get nodes

  2. Confermare le etichette di località. Prevedono due nodi con spark-locality=true e data-locality=enabled.

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

  3. Verificare il posizionamento di Cassandra:

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

  4. Verificare il posizionamento di Spark:

    kubectl -n spark get pods -o wide

  5. Controllare i log dei job di lettura Spark. Si consiglia di visualizzare i 3 record di testks.users e un'esecuzione riuscita.

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

Suggerimento: la corrispondenza dei valori NODE nei pod Cassandra e Spark conferma la co-ubicazione e le condizioni ideali per la località. Per risultati più conclusivi del log di flusso, inserire righe aggiuntive in testks.users utilizzando cqlsh. I set di dati più grandi genereranno più traffico di lettura, rendendo più facili da osservare gli effetti di località e non di località.

Di seguito è riportato un esempio di output per i comandi sopra riportati:

controllo nodi

Task 3: Osservare gli effetti di rete con i log di flusso della VCN

Utilizza i log di flusso della VCN per capire dove scorre il traffico Cassandra durante le letture della Spark. L'automazione attuale utilizza Flannel (VXLAN), che influisce sui log di flusso.

Cosa cambia con il CNI

  1. Abilita i log di flusso nella subnet del lavoratore.

    Nella console OCI abilitare i log di flusso per la subnet del worker OKE. Rieseguire (o attendere) il job di lettura Spark per generare traffico.

  2. Esegui query sui log di flusso (scegliere il percorso che corrisponde al cluster)

Se si utilizza questa automazione (Flannel/VXLAN): utilizzare una query avanzata simile a:

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

Sostituire con l'OCID risorsa Log di flusso effettivo e con la porta utilizzata dall'overlay (in questo laboratorio: 14789, vedere l'immagine riportata di seguito).

Traffico UDP

Se il cluster utilizza NPN:

Nota: i log di flusso possono richiedere alcuni minuti per includere nuove voci.

Considerazioni chiave

Fornire collegamenti a risorse aggiuntive. Questa sezione è facoltativa; eliminare se non necessario.

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione del prodotto, visitare Oracle Help Center.