Remarque :

Utilisation d'OCI Data Flow avec Apache Spark Streaming pour traiter un sujet Kafka dans une application évolutive et quasiment en temps réel

Introduction

Oracle Cloud Infrastructure (OCI) Data Flow est un service géré pour le projet open source nommé Apache Spark. Fondamentalement, avec Spark, vous pouvez l'utiliser pour le traitement massif de fichiers, la transmission en continu et les opérations de base de données. Vous pouvez créer des applications avec un traitement très évolutif. Spark peut redimensionner et utiliser des machines en cluster pour paralléliser des travaux avec une configuration minimale.

Avec Spark en tant que service géré (Data Flow), vous pouvez ajouter de nombreux services évolutifs pour multiplier la puissance du traitement cloud. Data Flow a la possibilité de traiter Spark Streaming.

Les applications Streaming nécessitent une exécution continue pendant une longue période qui s'étend souvent au-delà de 24 heures et peut durer aussi longtemps que des semaines, voire des mois. En cas de panne inattendue, les applications de transmission en continu doivent redémarrer à partir du point de panne sans produire de résultats de calcul incorrects. Data Flow s'appuie sur des points de reprise de transmission en continu structuré Spark pour enregistrer le décalage traité qui peut être stocké dans votre bucket Object Storage.

Remarque : si vous devez traiter les données en tant que stratégie de traitement par lots, vous pouvez lire cet article : Traiter des fichiers volumineux dans Autonomous Database et Kafka avec Oracle Cloud Infrastructure Data Flow

dataflow-use-case.png

Dans ce tutoriel, vous pouvez voir les activités les plus courantes utilisées pour traiter la diffusion en continu de volume de données, interroger la base de données et fusionner/joindre les données pour former une autre table en mémoire ou envoyer des données vers n'importe quelle destination quasiment en temps réel. Vous pouvez écrire ces données massives dans votre base de données et dans une file d'attente Kafka avec des performances très économiques et très efficaces.

Objectifs

Prérequis

Tâche 1 : création de la structure Object Storage

Object Storage sera utilisé comme référentiel de fichiers par défaut. Vous pouvez utiliser d'autres types de référentiel de fichiers, mais Object Storage est un moyen simple et économique de manipuler des fichiers avec de meilleures performances. Dans ce tutoriel, les deux applications chargeront un fichier CSV volumineux à partir du stockage d'objets, indiquant comment Apache Spark est rapide et intelligent pour traiter un volume élevé de données.

  1. Créer un compartiment : les compartiments sont importants pour organiser et isoler les ressources cloud. Vous pouvez isoler vos ressources en fonction des stratégies IAM.

    • Vous pouvez utiliser ce lien pour comprendre et configurer les stratégies des compartiments : Gestion des compartiments

    • Créez un compartiment pour héberger toutes les ressources des 2 applications de ce tutoriel. Créez un compartiment nommé analytics.

    • Accédez au menu principal Oracle Cloud et recherchez : Identité et sécurité, Compartiments. Dans la section Compartiments, cliquez sur Créer un compartiment et entrez le nom. créer-compartment.png

      Remarque : vous devez accorder l'accès à un groupe d'utilisateurs et inclure votre utilisateur.

    • Cliquez sur Créer un compartiment pour inclure le compartiment.

  2. Créez votre bucket dans Object Storage : les buckets sont des conteneurs logiques pour le stockage d'objets. Tous les fichiers utilisés pour cette démo seront donc stockés dans ce bucket.

    • Accédez au menu principal Oracle Cloud et recherchez Stockage et Buckets. Dans la section Buckets, sélectionnez votre compartiment (analytiques), créé précédemment.

      select-compartment.png

    • Cliquez sur Créer un bucket. Créer 4 buckets : apps, data, dataflow-logs, Wallet

      créer-bucket.png

    • Entrez les informations de nom de bucket avec ces 4 buckets et conservez les autres paramètres avec la sélection par défaut.

    • Pour chaque bucket, cliquez sur Créer. Vous pouvez voir les buckets créés.

      buckets-dataflow.png

Remarque : vérifiez les stratégies IAM pour le bucket. Vous devez configurer les stratégies si vous souhaitez utiliser ces buckets dans vos applications de démonstration. Vous pouvez consulter les concepts et effectuer la configuration ici Présentation d'Object Storage et Stratégies IAM.

Tâche 2 : création d'Autonomous Database

Oracle Cloud Autonomous Database est un service géré pour Oracle Database. Pour ce tutoriel, les applications se connecteront à la base de données via un portefeuille pour des raisons de sécurité.

Remarque : passez en revue les stratégies IAM permettant d'accéder à Autonomous Database ici : Stratégie IAM pour Autonomous Database

Tâche 3 : chargement des exemples de fichiers CSV

Pour démontrer la puissance d'Apache Spark, les applications lisent un fichier CSV de 1 000 000 lignes. Ces données seront insérées dans la base de données Autonomous Data Warehouse avec une seule ligne de commande et publiées sur une diffusion en continu Kafka (Oracle Cloud Streaming). Toutes ces ressources sont évolutives et parfaites pour un volume de données élevé.

La nouvelle table nommée GDPPERCAPTA a été importée.

adw-table-imported.png

Tâche 4 : création d'un coffre secret pour votre mot de passe ADMIN ADW

Pour des raisons de sécurité, le mot de passe ADMIN ADW sera enregistré dans un coffre. Oracle Cloud Vault peut héberger ce mot de passe en toute sécurité et est accessible sur votre application avec l'authentification OCI.

Remarque : vérifiez la stratégie IAM pour OCI Vault ici : stratégie IAM OCI Vault.

Tâche 5 : création d'une diffusion en continu Kafka (Oracle Cloud Streaming)

Oracle Cloud Streaming est un service Kafka de diffusion en continu géré. Vous pouvez développer des applications à l'aide des API Kafka et des SDK courants. Dans ce tutoriel, vous allez créer une instance de Streaming et la configurer pour l'exécuter dans les deux applications afin de publier et d'utiliser un grand volume de données.

  1. Dans le menu principal d'Oracle Cloud, accédez à Analytics et IA, Streams.

  2. Remplacez le compartiment par analytics. Chaque ressource de cette démonstration sera créée sur ce compartiment. Le service IAM est ainsi plus sécurisé et plus facile à contrôler.

  3. Cliquez sur Créer un flux de données.

    créer-stream.png

  4. Entrez le nom kafka_like (par exemple) et vous pouvez conserver tous les autres paramètres avec les valeurs par défaut.

    save-create-stream.png

  5. Cliquez sur Créer pour initialiser l'instance.

  6. Attendez le statut Active. Vous pouvez désormais utiliser l'instance.

    Remarque : lors du processus de création de la transmission en continu, vous pouvez sélectionner l'option Créer automatiquement un pool de flux de données par défaut pour créer automatiquement votre pool par défaut.

  7. Cliquez sur le lien DefaultPool.

    pool par défaut-option.png

  8. Affichez le paramètre de connexion.

    stream-conn-settings.png

    kafka-conn.png

  9. Annotez ces informations comme vous en aurez besoin à l'étape suivante.

Remarque : passez en revue les stratégies IAM pour OCI Streaming ici : Stratégie IAM pour OCI Streaming.

Tâche 6 : génération d'un TOKEN AUTH pour accéder à Kafka

Vous pouvez accéder à OCI Streaming (API Kafka) et à d'autres ressources dans Oracle Cloud avec un jeton d'authentification associé à votre utilisateur sur OCI IAM. Dans les paramètres de connexion Kafka, les chaînes de connexion SASL comportent un paramètre nommé password et une valeur AUTH_TOKEN, comme décrit dans la tâche précédente. Pour activer l'accès à OCI Streaming, vous devez accéder à votre utilisateur sur la console OCI et créer un TOKEN AUTH.

  1. Dans le menu principal d'Oracle Cloud, accédez à Identité et sécurité, Utilisateurs.

    Remarque : l'utilisateur dont vous avez besoin pour créer l'élément AUTH TOKEN est configuré avec l'interface de ligne de commande OCI et toutes les configurations Stratégies IAM pour les ressources créées jusqu'à présent. Les ressources sont les suivantes :

    • Oracle Cloud Autonomous Data Warehouse
    • Oracle Cloud Streaming
    • Oracle Object Storage
    • Oracle Data Flow
  2. Cliquez sur votre nom utilisateur pour afficher les détails.

    auth_token_create.png

  3. Cliquez sur l'option Jetons d'authentification sur le côté gauche de la console et cliquez sur Générer un jeton.

    Remarque : le jeton sera généré uniquement à cette étape et ne sera plus visible une fois l'étape terminée. Copiez la valeur et enregistrez-la. Si vous perdez la valeur de jeton, vous devez à nouveau générer le jeton d'authentification.

auth_token_1.png auth_token_2.png

Tâche 7 : Configurer l'application Demo

Ce tutoriel dispose d'une application de démonstration pour laquelle nous allons configurer les informations requises.

  1. Téléchargez l'application à l'aide du lien suivant :

  2. Recherchez les détails suivants dans la console Oracle Cloud :

    • Espace de noms de location

      location-namespace-1.png

      espace de noms de location-detail.png

    • Clé secrète de mot de passe

      coffre-fort-adw.png

      voult-adw-detail.png

      secret-adw.png

    • Paramètres de connexion de transmission en continu

      kafka-conn.png

    • Jeton d'authentification

      auth_token_create.png

      auth_token_2.png

  3. Ouvrez le fichier ZIP téléchargé (Java-CSV-DB.zip et JavaConsumeKafka.zip). Accédez au dossier /src/main/java/example et recherchez le code Example.java.

    code-variables.png

    Il s'agit des variables à modifier avec les valeurs des ressources de votre location.

    NOM VARIABLE NOM DE RESSOURCE TITRE DES INFORMATIONS
    bootstrapServers Paramètres de connexion de transmission en continu serveurs de démarrage
    streamPoolId Paramètres de connexion de transmission en continu Valeur ocid1.streampool.oc1.iad..... dans la chaîne de connexion SASL
    kafkaUsername Paramètres de connexion de transmission en continu valeur usename in " " dans la chaîne de connexion SASL
    kafkaPassword Jeton d'authentification La valeur est affichée uniquement à l'étape de création
    OBJECT_STORAGE_NAMESPACE ESPACE DE NOMS DE LOCATION LOCATION
    ESPACE DE NOMS ESPACE DE NOMS DE LOCATION LOCATION
    PASSWORD_SECRET_OCID PASSWORD_SECRET_OCID OCID

Remarque : toutes les ressources créées pour cette démonstration se trouvent dans la région US-ASHBURN-1. Vérifiez la région que vous souhaitez utiliser. Si vous modifiez la région, vous devez modifier 2 points dans 2 fichiers de code :

Tâche 8 : comprendre le code Java

Ce tutoriel a été créé en Java et ce code peut également être porté en Python. Pour prouver l'efficacité et l'évolutivité, l'application a été développée pour montrer certaines possibilités dans un cas d'utilisation commun d'un processus d'intégration. Le code de l'application présente donc les exemples suivants :

Cette démonstration peut être exécutée sur votre ordinateur local et déployée dans l'instance Data Flow pour être exécutée en tant que travail.

Remarque : pour le travail Data Flow et votre machine locale, utilisez la configuration de l'interface de ligne de commande OCI pour accéder aux ressources OCI. Du côté du flux de données, tout est préconfiguré. Il n'est donc pas nécessaire de modifier les paramètres. Côté machine locale, vous devez avoir installé l'interface de ligne de commande OCI et configuré le locataire, l'utilisateur et la clé privée pour accéder à vos ressources OCI.

Affichons le code Example.java dans les sections :

Tâche 9 : packager votre application avec Maven

Avant d'exécuter le travail dans Spark, il est nécessaire de packager votre application avec Maven.

  1. Accédez au dossier /DataflowSparkStreamDemo et exécutez la commande suivante :

    mvn package

  2. Vous pouvez voir Maven démarrer le package.

    maven-package-1a.png

  3. Si tout est correct, le message Success s'affiche.

    maven-success-1a.png

Tâche 10 : vérifier l'exécution

  1. Testez votre application sur votre machine Spark locale en exécutant la commande suivante :

    spark-submit --class example.Example target/consumekafka-1.0-SNAPSHOT.jar

  2. Accédez à votre instance Kafka Oracle Cloud Streaming et cliquez sur Produire un message de test pour générer des données afin de tester votre application en temps réel.

    test-kafka-1.png

  3. Vous pouvez placer ce message JSON dans la rubrique Kafka.

    {"Organization Id": "1235", "Name": "Teste", "Country": "Luxembourg"}

    test-kafka-2.png

  4. Chaque fois que vous cliquez sur Produire, vous envoyez un message à l'application. Le journal de sortie de l'application se présente comme suit :

    • Données lues dans la rubrique kafka.

      test-output-1.png

    • Il s'agit des données fusionnées à partir de la table ADW.

      test-output-2.png

Tâche 11 : création et exécution d'un travail Data Flow

Désormais, avec les deux applications exécutées avec succès sur votre machine Spark locale, vous pouvez les déployer dans Oracle Cloud Data Flow de votre location.

Remarque : reportez-vous à la documentation Spark Streaming pour configurer l'accès à des ressources telles qu'Oracle Object Storage et Oracle Streaming (Kafka) : Activer l'accès au flux de données.

  1. Téléchargez les packages vers Object Storage.

    • Avant de créer une application Data Flow, vous devez télécharger l'application d'artefact Java (votre fichier ***-SNAPSHOT.jar) vers le bucket Object Storage nommé apps.
  2. Créez une application Data Flow.

    • Sélectionnez le menu principal Oracle Cloud et accédez à Analytics et IA et à Data Flow. Veillez à sélectionner le compartiment analytics avant de créer une application Data Flow.

    • Cliquez sur Créer une application.

      create-dataflow-app.png

    • Renseignez les paramètres comme celui-ci.

      flux de données-app.png

    • Cliquez sur Créer.

    • Après la création, cliquez sur le lien Redimensionner la démo pour afficher les détails. Pour exécuter un travail, cliquez sur RUN.

      Remarque : cliquez sur Afficher les options avancées pour activer la sécurité OCI pour le type d'exécution Flux Spark.

      avancé-options.png

  3. Activez les options suivantes.

    principal-execution.png

  4. Cliquez sur Exécuter pour exécuter le travail.

  5. Confirmez les paramètres et cliquez à nouveau sur Exécuter.

    dataflow-run-job.png

    • Vous pouvez visualiser le statut du travail.

      dataflow-run-status.png

    • Attendez que le statut passe à Succès et que vous puissiez voir les résultats.

      dataflow-run-success.png

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation produit, consultez Oracle Help Center.