Créer un pipeline Dataflow à l'aide de Java

Ce document explique comment configurer votre Google Cloud projet, créer un exemple de pipeline construit avec le SDK Apache Beam pour Java et exécuter l'exemple de pipeline sur le service Dataflow. Le pipeline lit un fichier texte à partir de Cloud Storage, compte le nombre de mots uniques dans ce fichier, puis écrit le nombre de mots dans Cloud Storage. Pour une présentation du pipeline WordCount, regardez la vidéo How to use WordCount in Apache Beam (Comment utiliser WordCount dans Apache Beam).

Ce tutoriel nécessite Maven, mais il est également possible de convertir l'exemple de projet de Maven vers Gradle. Pour en savoir plus, consultez la section Facultatif : convertir de Maven vers Gradle.


Pour obtenir des instructions détaillées sur cette tâche directement dans la Google Cloud console, cliquez sur Visite guidée :

Visite guidée


Avant de commencer

  1. Connectez-vous à votre Google Cloud compte. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  2. Installez la Google Cloud CLI.

  3. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  5. Créez ou sélectionnez un Google Cloud projet.

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionner un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous avez besoin du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créer un Google Cloud projet :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par un nom pour le Google Cloud projet que vous créez.

    • Sélectionnez le Google Cloud projet que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre Google Cloud projet.

  6. Vérifiez que la facturation est activée pour votre Google Cloud projet.

  7. Activez les API Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore et Cloud Resource Manager :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation via le rôle Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  8. gcloud auth application-default login

    Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.

  9. Attribuez des rôles à votre compte utilisateur. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants : roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet
    • USER_IDENTIFIER : identifiant de votre compte utilisateur Par exemple, myemail@example.com.
    • ROLE : rôle IAM que vous attribuez à votre compte utilisateur
  10. Installez la Google Cloud CLI.

  11. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  12. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  13. Créez ou sélectionnez un Google Cloud projet.

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionner un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous avez besoin du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créer un Google Cloud projet :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par un nom pour le Google Cloud projet que vous créez.

    • Sélectionnez le Google Cloud projet que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre Google Cloud projet.

  14. Vérifiez que la facturation est activée pour votre Google Cloud projet.

  15. Activez les API Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore et Cloud Resource Manager :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation via le rôle Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  16. gcloud auth application-default login

    Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.

  17. Attribuez des rôles à votre compte utilisateur. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants : roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet
    • USER_IDENTIFIER : identifiant de votre compte utilisateur Par exemple, myemail@example.com.
    • ROLE : rôle IAM que vous attribuez à votre compte utilisateur
  18. Attribuez des rôles à votre compte de service Compute Engine par défaut. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :

    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
    • Remplacez PROJECT_ID par l'ID du projet.
    • Remplacez PROJECT_NUMBER par votre numéro de projet. Pour trouver votre numéro de projet, consultez la section Identifier des projets ou utilisez la commande gcloud projects describe.
    • Remplacez SERVICE_ACCOUNT_ROLE par chaque rôle individuel.
  19. Créez un bucket Cloud Storage et configurez-le comme suit :
    • Définissez la classe de stockage sur S (Standard).
    • Définissez l'emplacement de stockage sur les éléments suivants : US (États-Unis).
    • Remplacez BUCKET_NAME par un nom de bucket unique. N'incluez aucune information sensible dans le nom des buckets, car leur espace de noms est global et visible par tous.
    gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
  20. Copiez les éléments suivants, car vous en aurez besoin dans une section ultérieure :
    • Le nom de votre bucket Cloud Storage.
    • ID de votre Google Cloud projet. Pour trouver cet ID, consultez la section Identifier des projets.
  21. Téléchargez et installez le kit de développement Java (JDK) version 11. (Dataflow continue à être compatible avec la version 8.) Vérifiez que la variable d'environnement JAVA_HOME est définie et pointe vers votre installation JDK.
  22. Téléchargez et installez Apache Maven en suivant les instructions du guide d'installation de Maven spécifique à votre système d'exploitation.

Obtenir le code du pipeline

Le SDK Apache Beam est un modèle de programmation Open Source pour les pipelines de traitement de données. Vous définissez ces pipelines avec un programme Apache Beam et pouvez choisir un exécuteur, tel que Dataflow, pour les lancer.

  1. Dans votre interface système ou votre terminal, utilisez le plug-in Maven Archetype pour créer sur votre ordinateur un projet Maven contenant les exemples WordCount du SDK Apache Beam :
    mvn archetype:generate \
        -DarchetypeGroupId=org.apache.beam \
        -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
        -DarchetypeVersion=2.75.0 \
        -DgroupId=org.example \
        -DartifactId=word-count-beam \
        -Dversion="0.1" \
        -Dpackage=org.apache.beam.examples \
        -DinteractiveMode=false
    

    La commande crée un répertoire nommé word-count-beam dans votre répertoire actuel. Le répertoire word-count-beam contient un simple fichier pom.xml et une série d'exemples de pipelines effectuant un décompte des mots dans des fichiers texte.

  2. Vérifiez que votre répertoire word-count-beam contient le fichier pom.xml :

    Linux ou macOS

    cd word-count-beam/
    ls

    Le résultat est le suivant :

    pom.xml   src

    Windows

    cd word-count-beam/
    dir

    Le résultat est le suivant :

    pom.xml   src
  3. Vérifiez que votre projet Maven contient les exemples de pipelines suivants :

    Linux ou macOS

    ls src/main/java/org/apache/beam/examples/

    Le résultat est le suivant :

    DebuggingWordCount.java   WindowedWordCount.java   common
    MinimalWordCount.java   WordCount.java

    Windows

    dir src/main/java/org/apache/beam/examples/

    Le résultat est le suivant :

    DebuggingWordCount.java   WindowedWordCount.java   common
    MinimalWordCount.java   WordCount.java

Pour une présentation détaillée des concepts d'Apache Beam utilisés dans ces exemples, reportez-vous à la page Exemple Apache Beam WordCount. Les instructions des sections suivantes utilisent WordCount.java.

Exécuter le pipeline en local

  • Dans votre interface système ou votre terminal, exécutez le pipeline WordCount localement à partir de votre répertoire word-count-beam :
    mvn compile exec:java \
        -Dexec.mainClass=org.apache.beam.examples.WordCount \
        -Dexec.args="--output=counts"
    

    Les fichiers de sortie sont dotés du préfixe counts et sont écrits dans le répertoire word-count-beam. Ils contiennent les mots uniques du texte d'entrée et le nombre d'occurrences de chaque mot.

Exécuter le pipeline sur le service Dataflow

  • Dans votre interface système ou votre terminal, compilez et exécutez le pipeline WordCount sur le service Dataflow à partir de votre répertoire word-count-beam :
    mvn -Pdataflow-runner compile exec:java \
        -Dexec.mainClass=org.apache.beam.examples.WordCount \
        -Dexec.args="--project=PROJECT_ID \
        --gcpTempLocation=gs://BUCKET_NAME/temp/ \
        --output=gs://BUCKET_NAME/output \
        --runner=DataflowRunner \
        --region=REGION"
    

    Remplacez les éléments suivants :

    • PROJECT_ID: ID de votre Google Cloud projet
    • BUCKET_NAME : nom de votre bucket Cloud Storage
    • REGION : région Dataflow (par exemple, us-central1)

Afficher les résultats

  1. Dans la Google Cloud console, accédez à la page Jobs de Dataflow.

    Accéder aux tâches

    La page Tâches affiche les détails de toutes les tâches disponibles, y compris leur état. L'état de la tâche wordcount est initialement Running (En cours d'exécution), puis passe à Succeeded (Réussie).

  2. Dans la Google Cloud console, accédez à la page Buckets Cloud Storage.

    Accéder à la page " Buckets"

    La page Buckets affiche la liste de tous les buckets de stockage de votre projet.

  3. Cliquez sur le bucket de stockage que vous avez créé.

    La page Détails du bucket affiche les fichiers de sortie et les fichiers intermédiaires créés par votre tâche Dataflow.

Libérer de l'espace

Pour éviter que les ressources utilisées dans cette démonstration soient facturées sur votre Google Cloud compte pour les ressources utilisées sur cette page, supprimez le Google Cloud projet qui les contient.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le Google Cloud projet que vous avez créé pour le guide de démarrage rapide.

  1. Dans la Google Cloud console, accédez à la page Gérer les ressources.

    Accéder à la page "Gérer les ressources"

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez Arrêter pour supprimer le projet.

Supprimer les ressources individuelles

Si vous souhaitez conserver le Google Cloud projet que vous avez utilisé dans ce guide de démarrage rapide, supprimez les ressources individuelles :

  1. Dans la Google Cloud console, accédez à la page Buckets de Cloud Storage.

    Accéder à la page "Buckets"

  2. Cochez la case correspondant au bucket que vous souhaitez supprimer.
  3. Pour supprimer le bucket, cliquez sur Supprimer, puis suivez les instructions.
  4. Révoquez les rôles que vous avez accordés au compte de service Compute Engine par défaut. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :

    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    gcloud projects remove-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=SERVICE_ACCOUNT_ROLE
  5. Facultatif : Révoquez les identifiants d'authentification que vous avez créés et supprimez le fichier d'identifiants local.

    gcloud auth application-default revoke
  6. Facultatif : Révoquez les identifiants de gcloud CLI.

    gcloud auth revoke

Étape suivante