Mit OKE die Datenlokalität für Cassandra- und Spark-Aktivitäten verbessern

Einführung

Apache Cassandra ist eine verteilte Masterless-Datenbank, in der jeder Knoten über Tokenbereiche verfügt. Apache Spark ist eine verteilte Compute-Engine, die den Spark-Cassandra-Connector zum Lesen aus Cassandra-Replikaten verwenden kann. In Kubernetes werden Pods geplant, ohne zu wissen, wo sich die Daten befinden, sodass die Datenlokalität nicht garantiert ist.

In diesem Tutorial wird gezeigt, wie OKE die Lokalität mit Kubernetes-Primitiven verbessern kann: StatefulSets (stabile Identität für Cassandra), Knotenlabels und Affinität/Anti-Affinität, um Spark-Executors mit Cassandra-Pods gemeinsam zu lokalisieren. Daher werden Lesevorgänge von demselben Knoten (ideal) oder im schlimmsten Fall von einem Hop zum Co-Location-Replikat verarbeitet.

Ziele

Voraussetzungen

  1. Klicken Sie unten, um den Stack in der OCI-Konsole zu öffnen:

    In Oracle Cloud bereitstellen

  2. Folgen Sie dem geführten Ablauf:

  1. Nachdem der Stack abgeschlossen ist, erhalten Sie die IP der Bastion im Ausgabeabschnitt.

    Stapelausgabe

Aufgabe 2: Verbindung zur Bastion herstellen und Deployment prüfen

Das anfängliche Infrastruktur-Provisioning wird innerhalb von etwa 15 Minuten abgeschlossen. Das vollständige Setup (über Cloud-Init auf der Bastion) dauert jedoch etwa 20 Minuten, um Helm zu installieren, Cassandra und Spark bereitzustellen und den Lesejob auszuführen.

  1. So überwachen Sie den Prozess mit SSH in die Bastion:

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

  2. Führen Sie den folgenden Befehl aus, um den Fortschritt des cloudinit-Skripts zu überwachen.

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

  3. Der Stack wird abgeschlossen, wenn die 3 vordefinierten Cassandra-Werte gelesen werden und die Meldung Cloud-Init abgeschlossen angezeigt wird.

    Cloud-Initialisierung abgeschlossen

Hinweis: Das cloudinit-Skript hat folgende Aktionen ausgeführt:

  1. Bestätigen Sie über die Bastion-VM die vorhandenen Knoten:

    kubectl get nodes

  2. Bestätigen Sie die Ortsbeschriftungen. Erwarten Sie zwei Knoten mit spark-locality=true und data-locality=enabled.

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

  3. Cassandra-Platzierung überprüfen:

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

  4. Spark-Platzierung prüfen:

    kubectl -n spark get pods -o wide

  5. Prüfen Sie die Spark-Lesejoblogs. Die 3 Datensätze aus testks.users und eine erfolgreiche Ausführung sollten angezeigt werden.

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

Tipp: Der Abgleich von NODE-Werten in Cassandra- und Spark-Pods bestätigt den Co-Standort und die idealen Bedingungen für die Lokalität. Für aussagekräftigere Ablauflogergebnisse fügen Sie zusätzliche Zeilen mit cqlsh in testks.users ein. Größere Datensätze generieren mehr Leseverkehr, wodurch Lokalität vs. Nicht-Standort-Effekte einfacher zu beobachten sind.

Im Folgenden sehen Sie eine Beispielausgabe für die oben genannten Befehle:

Knotenprüfung

Aufgabe 3: Netzwerkeffekte mit VCN-Flowlogs beobachten

Verwenden Sie VCN-Flowlogs, um zu verstehen, wo Cassandra-Traffic während Spark-Lesevorgängen fließt. Die aktuelle Automatisierung verwendet Flannel (VXLAN), was sich auf die Anzeige von Flowlogs auswirkt.

Was ändert sich mit dem CNI?

  1. Aktivieren Sie Flowlogs im Worker-Subnetz.

    Aktivieren Sie in der OCI-Konsole Flowlogs für das OKE-Workersubnetz. Führen Sie den Spark-Lesejob erneut aus (oder warten Sie darauf), um Traffic zu generieren.

  2. Abfrageflusslogs (wählen Sie den Pfad aus, der mit Ihrem Cluster übereinstimmt)

Bei Verwendung dieser Automatisierung (Flannel/VXLAN): Verwenden Sie eine erweiterte Abfrage ähnlich der folgenden:

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

Ersetzen Sie durch die tatsächliche Flowlogressourcen-OCID und durch den Port, der von Ihrem Overlay verwendet wird (in dieser Übung: 14789, siehe Abbildung unten).

UDP-Datenaustausch

Wenn Ihr Cluster NPN verwendet:

Hinweis: Die Aufnahme neuer Einträge in Flowlogs kann einige Minuten dauern.

Wichtige Überlegungen

Links zu weiteren Ressourcen bereitstellen. Dieser Abschnitt ist optional. Löschen, falls nicht erforderlich.

Bestätigungen

Weitere Lernressourcen

Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.