Utiliser OKE pour améliorer la localité des données pour l'activité Cassandra et Spark

Introduction

Apache Cassandra est une base de données distribuée sans maître dans laquelle chaque noeud possède des plages de jetons. Apache Spark est un moteur de calcul distribué qui peut utiliser le connecteur Spark-Cassandra pour la lecture à partir des répliques Cassandra. Dans Kubernetes, les pods sont programmés sans savoir où vivent 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

Prérequis

  1. Cliquez ci-dessous pour ouvrir la pile dans la console OCI :

    Déploiement vers Oracle Cloud

  2. Suivez le flux guidé pour :

  1. Une fois la pile terminée, vous obtenez l'adresse IP du bastion dans la section de sortie.

    Pile de sortie

Tâche 2 : se connecter au bastion et vérifier le déploiement

Le provisionnement initial de l'infrastructure se termine en 15 minutes environ, mais la configuration complète (via cloud-init sur le bastion) prend environ 20 minutes supplémentaires pour installer Helm, déployer Cassandra et Spark, et exécuter le travail de lecture.

  1. Pour surveiller le processus, accédez au bastion via SSH :

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

  2. Exécutez la commande ci-dessous pour surveiller la progression du script cloudinit.

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

  3. La pile se termine lorsque vous voyez les 3 valeurs Cassandra prédéfinies en cours de lecture et le message Cloud-init complete.

    Cloud-init complet

Remarque : le script cloudinit a effectué les opérations suivantes :

  1. A partir de la machine virtuelle du bastion, vérifiez les noeuds existants :

    kubectl get nodes

  2. Confirmer les é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'

  3. Vérifier le placement Cassandra :

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

  4. Vérifiez le placement Spark :

    kubectl -n spark get pods -o wide

  5. Consultez les journaux de travail de lecture Spark. Vous devez voir les 3 enregistrements de testks.users et une exécution réussie.

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

A savoir : La mise en correspondance des valeurs NODE entre les pods Cassandra et Spark confirme la co-implantation et les conditions idéales pour la localité. Pour obtenir des résultats de journal de flux plus concluants, insérez des lignes supplémentaires dans testks.users à l'aide de cqlsh. Des jeux de données plus volumineux généreront plus de trafic de lecture, ce qui facilitera l'observation des effets de localité et de non-localité.

Vous trouverez ci-dessous un exemple de sortie pour les commandes ci-dessus :

vérification des noeuds

Tâche 3 : observer les effets réseau avec les journaux de flux VCN

Utilisez les journaux de flux VCN pour comprendre où circule le trafic Cassandra pendant les 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

  1. Activez les journaux de flux sur le sous-réseau de processus actif.

    Dans la console OCI, activez les journaux de flux pour le sous-réseau de processus actif OKE. Réexécutez (ou attendez) le travail de lecture Spark pour générer du trafic.

  2. Journaux de flux de requête (choisissez le chemin correspondant à votre cluster)

Si vous utilisez cette automatisation (Flannel/VXLAN) : utilisez une requête avancée semblable à la suivante :

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

Remplacez par l'OCID de ressource de journal de flux réel et par le port utilisé par votre superposition (dans cet exercice : 14789, reportez-vous à l'image ci-dessous).

Trafic UDP

Si votre cluster utilise NPN :

Remarque : l'inclusion de nouvelles entrées dans les journaux de flux peut prendre quelques minutes.

Remarques importantes

Fournissez des liens vers des ressources supplémentaires. Cette section est facultative ; supprimez-la si nécessaire.

Accusés de réception

Ressources de formation supplémentaires

Explorez d'autres ateliers sur le site docs.oracle.com/learn ou accédez à d'autres contenus d'apprentissage gratuits sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, consultez Oracle Help Center.