Crie um pipeline do Dataflow com Java

Este documento mostra como configurar o seu projeto da Google Cloud Platform, criar um pipeline de exemplo criado com o SDK do Apache Beam para Java e executar o pipeline de exemplo no serviço Dataflow. O pipeline lê um ficheiro de texto do Cloud Storage, conta o número de palavras únicas no ficheiro e, em seguida, escreve as contagens de palavras de volta para o Cloud Storage. Para uma introdução ao pipeline WordCount, consulte o vídeo Como usar o WordCount no Apache Beam.

Este tutorial requer o Maven, mas também é possível converter o projeto de exemplo do Maven para o Gradle. Para saber mais, consulte Opcional: converta de Maven para Gradle.


Para seguir orientações passo a passo para esta tarefa diretamente na Google Cloud consola, clique em Orientar-me:

Visita guiada


Antes de começar

  1. Sign in to your Google Cloud Platform account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  8. Create local authentication credentials for your user account:

    gcloud auth application-default login

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  9. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/iam.serviceAccountUser

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

    Replace the following:

    • PROJECT_ID: Your project ID.
    • USER_IDENTIFIER: The identifier for your user account. For example, myemail@example.com.
    • ROLE: The IAM role that you grant to your user account.
  10. Install the Google Cloud CLI.

  11. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  12. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  13. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  14. Verify that billing is enabled for your Google Cloud project.

  15. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  16. Create local authentication credentials for your user account:

    gcloud auth application-default login

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  17. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/iam.serviceAccountUser

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

    Replace the following:

    • PROJECT_ID: Your project ID.
    • USER_IDENTIFIER: The identifier for your user account. For example, myemail@example.com.
    • ROLE: The IAM role that you grant to your user account.
  18. Conceda funções à conta de serviço predefinida do Compute Engine. Execute o seguinte comando uma vez para cada uma das seguintes funções do IAM:

    • 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
    • Substitua PROJECT_ID pelo ID do seu projeto.
    • Substitua PROJECT_NUMBER pelo número do seu projeto. Para encontrar o número do projeto, consulte o artigo Identificar projetos ou use o comando gcloud projects describe.
    • Substitua SERVICE_ACCOUNT_ROLE por cada função individual.
  19. Create a Cloud Storage bucket and configure it as follows:
    • Set the storage class to S (Padrão).
    • Defina a localização do armazenamento para o seguinte: US (Estados Unidos).
    • Substitua BUCKET_NAME por um nome de contentor exclusivo. Não inclua informações confidenciais no nome do contentor, uma vez que o espaço de nomes do contentor é global e visível publicamente.
    • gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
    • Copie o seguinte, uma vez que vai precisar destas informações numa secção posterior:
      • O nome do seu contentor do Cloud Storage.
      • O seu Google Cloud ID do projeto. Para encontrar este ID, consulte o artigo Identificar projetos.
    • Transfira e instale a versão 11 do Java Development Kit (JDK). (O Dataflow continua a suportar a versão 8.) Verifique se a variável de ambiente JAVA_HOME está definida e aponta para a instalação do JDK.
    • Transfira e instale o Apache Maven, seguindo o guia de instalação do Maven para o seu sistema operativo específico.
    • Obtenha o código do pipeline

      O SDK Apache Beam é um modelo de programação de código aberto para pipelines de processamento de dados. Pode definir estes pipelines com um programa Apache Beam e escolher um executor, como o Dataflow, para executar o pipeline.

      1. Na shell ou no terminal, use o Maven Archetype Plugin para criar um projeto Maven no seu computador que contenha os exemplos do WordCount SDK do Apache Beam:
        mvn archetype:generate \
            -DarchetypeGroupId=org.apache.beam \
            -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
            -DarchetypeVersion=2.69.0 \
            -DgroupId=org.example \
            -DartifactId=word-count-beam \
            -Dversion="0.1" \
            -Dpackage=org.apache.beam.examples \
            -DinteractiveMode=false
        

        O comando cria um novo diretório denominado word-count-beam no seu diretório atual. O diretório word-count-beam contém um ficheiro pom.xml simples e uma série de pipelines de exemplo que contam palavras em ficheiros de texto.

      2. Verifique se o diretório word-count-beam contém o ficheiro pom.xml:

        Linux ou macOS

        cd word-count-beam/
        ls

        O resultado é o seguinte:

        pom.xml   src

        Windows

        cd word-count-beam/
        dir

        O resultado é o seguinte:

        pom.xml   src
      3. Verifique se o seu projeto Maven contém os pipelines de exemplo:

        Linux ou macOS

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

        O resultado é o seguinte:

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

        Windows

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

        O resultado é o seguinte:

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

      Para uma introdução detalhada aos conceitos do Apache Beam usados nestes exemplos, consulte o exemplo WordCount do Apache Beam. As instruções nas secções seguintes usam WordCount.java.

      Execute o pipeline localmente

      • Na shell ou no terminal, execute o pipeline WordCount localmente a partir do diretório word-count-beam:
        mvn compile exec:java \
            -Dexec.mainClass=org.apache.beam.examples.WordCount \
            -Dexec.args="--output=counts"
        

        Os ficheiros de saída têm o prefixo counts e são escritos no diretório word-count-beam. Contêm palavras únicas do texto introduzido e o número de ocorrências de cada palavra.

      Execute o pipeline no serviço Dataflow

      • Na shell ou no terminal, crie e execute o pipeline WordCount no serviço Dataflow a partir do diretório 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"
        

        Substitua o seguinte:

        • PROJECT_ID: o ID do seu Google Cloud projeto
        • BUCKET_NAME: o nome do seu contentor do Cloud Storage
        • REGION: uma região do Dataflow, como us-central1

      Veja os resultados

      1. Na Google Cloud consola, aceda à página Tarefas do Dataflow.

        Aceder a Empregos

        A página Trabalhos mostra os detalhes de todos os trabalhos disponíveis, incluindo o estado. O estado da tarefa wordcount é Running (Em execução) no início e, em seguida, é atualizado para Succeeded (Concluído).

      2. Na Google Cloud consola, aceda à página Recipientes do Cloud Storage.

        Aceda a Recipientes

        A página Contentores apresenta a lista de todos os contentores de armazenamento no seu projeto.

      3. Clique no contentor de armazenamento que criou.

        A página Detalhes do contentor mostra os ficheiros de saída e os ficheiros de preparação criados pela sua tarefa do Dataflow.

      Limpar

      Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados nesta página, elimine o Google Cloud projeto com os recursos.

      Elimine o projeto

      A forma mais fácil de eliminar a faturação é eliminar o Google Cloud projeto que criou para o início rápido.

        Delete a Google Cloud project:

        gcloud projects delete PROJECT_ID

      Elimine os recursos individuais

      Se quiser manter o projeto Google Cloud que usou neste início rápido, elimine os recursos individuais:

      1. Elimine o contentor:
        gcloud storage buckets delete BUCKET_NAME
      2. Revogue as funções que concedeu à conta de serviço predefinida do Compute Engine. Execute o seguinte comando uma vez para cada uma das seguintes funções do IAM:

        • 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
      3. Optional: Revoke the authentication credentials that you created, and delete the local credential file.

        gcloud auth application-default revoke
      4. Optional: Revoke credentials from the gcloud CLI.

        gcloud auth revoke

      O que se segue?