Utiliser OKE pour améliorer la localisation des données pour l'activité Cassandra et Spark
Présentation
Apache Cassandra est une base de données distribuée, sans maître, où chaque noeud possède des intervalles de jetons. Apache Spark est un moteur de calcul réparti qui peut utiliser le connecteur Spark–Cassandra pour lire des répliques Cassandra. Dans Kubernetes, les pods sont programmés sans savoir où résident les données, de sorte que la localisation des données n'est pas garantie.
Ce tutoriel montre comment OKE peut améliorer la localité avec les primitives Kubernetes : StatefulSets (identité stable pour Cassandra), les étiquettes de noeud et l'affinité/anti-affinité pour colocaliser les exécuteurs Spark avec les pods Cassandra. Les lectures sont donc servies à partir du même noeud (idéal) ou, dans le pire des cas, d'un saut vers la réplique colocalisée.
Objectifs
- Déployez une grappe OKE à 3 noeuds et un hôte bastion (ORM ou Terraform).
- Colocalisez Cassandra et Spark sur deux noeuds avec des étiquettes + affinité.
- Exécutez et vérifiez une tâche de lecture Spark par rapport à Cassandra.
- Observez le trafic inter-noeuds avec les journaux de flux de VCN.
Conditions requises
- Location OCI autorisée pour VCN, OKE, Compute, Logging (journaux de flux); surveillance facultative.
- Paire de clés SSH pour l'accès à l'hôte bastion.
- Connaissance de base de Kubernetes (noeuds, étiquettes, pods, etc.).
Tâche 1 : Déployer l'environnement avec le gestionnaire de ressources OCI (ORM) (recommandé).
-
Acceptez les conditions d'utilisation.

-
Insérez une clé SSH et sélectionnez le domaine de disponibilité.

-
Vous pouvez laisser le reste des valeurs par défaut afin d'obtenir un VCN, une grappe OKE et un hôte bastion déployés.
-
Lancez la pile.

-
Une fois la pile terminée, vous obtiendrez l'adresse IP de l'hôte bastion dans la section de sortie.

Tâche 2 : Se connecter à l'hôte bastion et vérifier le déploiement
Le provisionnement initial de l'infrastructure est terminé en environ 15 minutes, mais la configuration complète (au moyen de cloud-init sur l'hôte bastion) prend environ 20 minutes de plus pour installer Helm, déployer Cassandra et Spark, et exécuter la tâche de lecture.
-
Pour surveiller le processus, utilisez SSH dans l'hôte bastion :
ssh -i <path-to-private-key> opc@<bastion_public_ip> -
Exécutez la commande ci-dessous pour surveiller la progression du script cloudinit.
tail -f /var/log/oke-automation.log -
La pile est terminée lorsque vous voyez les 3 valeurs Cassandra de départ en cours de lecture et le message Cloud-init complete.

Note : Ce que le script cloudinit a fait est :
- Installez kubectl, Helm, l'interface de ligne de commande OCI (principaux d'instance), extrayez kubeconfig.
- Attendre les travailleurs
- Étiqueter les deux premiers noeuds avec :
spark-locality=true, data-locality=enabled, and node-role=zone-a/zone-b - Installer cert-manager et k8ssandra-operator (CRD)
- Appliquer K8ssandraCluster
- Attendre Cassandra
- Créer testks.users et insérer 3 rangées
- Créez un espace de noms spark; créez ConfigMap avec /scripts/cassandra_read.py (lire testks.users)
- Déployer Spark maître, Service et deux travailleurs (nodeSelector spark-locality : "true", worker anti-affinity)
- Soumettre l'emploi spark-read-cassandra
-
À partir de la machine virtuelle bastion, vérifiez les noeuds existants :
kubectl get nodes -
confirmation des étiquettes de localité; Attendez-vous à deux noeuds avec spark-locality=true et data-locality=enabled.
kubectl get nodes --show-labels | grep -E 'spark-locality|data-locality' -
Vérifier le placement Cassandra :
kubectl -n k8ssandra-operator get pods -l app.kubernetes.io/name=cassandra -o wide -
Vérifier le positionnement de Spark :
kubectl -n spark get pods -o wide -
Consultez les journaux de tâche de lecture Spark. Vous devriez voir les 3 enregistrements de testks.users et une exécution réussie.
kubectl -n spark logs job/spark-read-cassandra --tail=20
Conseil : L'appariement des valeurs NODE aux pods Cassandra et Spark confirme la colocalisation et les conditions idéales pour la localité. Pour obtenir des résultats plus concluants du journal de flux, insérez des rangées supplémentaires dans testks.users à l'aide de cqlsh. Les jeux de données plus volumineux généreront plus de trafic de lecture, ce qui facilitera l'observation des effets localisés et non localisés.
Vous trouverez ci-dessous un exemple de sortie pour les commandes ci-dessus :

Tâche 3 : Observer les effets de réseau à l'aide des journaux de flux de VCN
Utilisez les journaux de flux de VCN pour comprendre où le trafic Cassandra circule lors des lectures Spark. L'automatisation actuelle utilise Flannel (VXLAN), ce qui affecte ce que les journaux de flux peuvent voir.
Ce qui change avec le CNI
- Flannel (VXLAN, ce laboratoire) :
- Le trafic de pod de même noeud reste sur le pont hôte → aucune entrée de journal de flux VCN.
- Le trafic de pod inter-noeuds est encapsulé en tant qu'UDP
(VXLAN). Par défaut, Flannel utilise le port 8472, mais si ce port n'est pas disponible, il peut sélectionner un autre port UDP haut. Le port exact peut varier selon le déploiement.
- Réseau de pods natifs (VCN) :
- Les pods obtiennent des adresses IP de VCN et le trafic est acheminé à L3 sans superposition.
- Les journaux de flux affichent les ports d'application réels (pour Cassandra : TCP 9042).
-
Activer les journaux de flux dans le sous-réseau de travail.
Dans la console OCI, activez les journaux de flux pour le sous-réseau de travail OKE. Réexécutez (ou attendez) la tâche de lecture Spark pour générer du trafic.
-
Journaux de flux d'interrogation (choisissez le chemin correspondant à votre grappe)
Si vous utilisez cette automatisation (Canal/VXLAN) : Utilisez une interrogation avancée similaire à :
search "<your-flow-log-OCID>"
| where data.protocolName = 'UDP'
| where data.destinationPort = <vxlan-port>
Remplacez
- Le trafic Pod-to-pod est encapsulé dans UDP
entre les adresses IP des noeuds de travail (au lieu du port Cassandra 9042). - Lectures au même noeud : aucune entrée de journal de flux VCN (le trafic reste local).
- Lectures entre noeuds : visible lorsque UDP 14789 circule entre les adresses IP des noeuds de travail dans l'image ci-dessous.

- La comparaison du nombre de paquets sur UDP 14789 met en évidence l'effet de la localisation des données par rapport à la non-localité.
Si votre cluster utilise NPN :
- Filtrez directement pour TCP dstPort = 9042 entre les adresses IP de pod/travailleur.
- Vous devriez voir Cassandra CQL lire / écrire comme 9042 flux. (idéalement très peu)
Remarque : Les journaux de flux peuvent prendre quelques minutes pour ingérer de nouvelles entrées.
Considérations clés
-
Grappes avec >3 noeuds :
La localisation est plus importante à mesure que la taille des grappes augmente. Sans règles de positionnement, les exécuteurs Spark peuvent s'exécuter sur des noeuds sans répliques locales, ce qui entraîne de nombreuses lectures distantes. La colocalisation garantit que les lectures sont locales ou, au pire, un seul saut vers une autre réplique.
- Gains de performance de la co-implantation :
- Lectures locales à saut zéro → latence la plus faible.
- Moins de lectures inter-noeuds → utilisation réduite de la bande passante et contention moindre.
- Débit supérieur pour les tâches Spark lisant Cassandra en parallèle.
- Mécanismes utilisés dans cette automatisation :
- StatefulSets → identités stables des pods Cassandra.
- Étiquettes de noeud (
spark-locality,data-locality) → désigner des noeuds pour la co-implantation. - Affinité de pod / anti-affinité → Les exécuteurs Spark programmés sur les noeuds Cassandra, équilibrés entre eux.
- K8ssandra Opérateur → déploiement et gestion Cassandra déclaratif.
- ConfigMap + Tâche Spark → valide les lectures et la génération de trafic par Cassandra.
- Journaux de flux VCN → observer et confirmer les effets de localisation.
- Hors de la portée d'OKE (facteurs au niveau de l'application) :
- Programmation des tâches Spark et affectation de partition.
- Facteur de réplication Cassandra et niveau de cohérence.
- Logique du connecteur Spark–Cassandra pour sélectionner des répliques.
Liens connexes
Fournissez des liens vers des ressources supplémentaires. Cette section est facultative. Supprimez-la si nécessaire.
Remerciements
- Auteurs - Adina Nicolescu (architecte en nuage principal)
Ressources d'apprentissage supplémentaires
Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir la documentation sur le produit, visitez Oracle Help Center.
Use OKE to Improve Data Locality for Cassandra and Spark Activity
G53298-01