Crear un flujo de procesamiento de Dataflow con Java

En este documento se explica cómo configurar tu proyecto de Google Cloud Platform, crear un flujo de procesamiento de ejemplo con el SDK de Apache Beam para Java y ejecutarlo en el servicio Dataflow. El flujo de procesamiento lee un archivo de texto de Cloud Storage, cuenta el número de palabras únicas del archivo y, a continuación, escribe los recuentos de palabras en Cloud Storage. Para ver una introducción a la canalización WordCount, consulta el vídeo Cómo usar WordCount en Apache Beam.

Para seguir este tutorial, necesitas Maven, pero también puedes convertir el proyecto de ejemplo de Maven a Gradle. Para obtener más información, consulta Opcional: convertir de Maven a Gradle.


Para seguir las instrucciones paso a paso de esta tarea directamente en la Google Cloud consola, haga clic en Ayúdame:

Guíame


Antes de empezar

  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. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente 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 (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. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  12. Para inicializar gcloud CLI, ejecuta el siguiente 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 (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. Concede roles a tu cuenta de servicio predeterminada de Compute Engine. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de gestión de identidades y accesos:

    • 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
    • Sustituye PROJECT_ID por el ID del proyecto.
    • Sustituye PROJECT_NUMBER por el número de tu proyecto. Para encontrar el número de tu proyecto, consulta el artículo Identificar proyectos o usa el comando gcloud projects describe.
    • Sustituye SERVICE_ACCOUNT_ROLE por cada rol individual.
  19. Create a Cloud Storage bucket and configure it as follows:
    • Set the storage class to S (Estándar).
    • Define la ubicación de almacenamiento de la siguiente manera: US (Estados Unidos).
    • Sustituye BUCKET_NAME por un nombre de segmento único. No incluyas información sensible en el nombre del segmento, ya que este espacio de nombres es público y visible para todos los usuarios.
    • gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
    • Copia lo siguiente, ya que lo necesitarás en una sección posterior:
      • El nombre del segmento de Cloud Storage.
      • El ID de tu proyecto Google Cloud . Para encontrar este ID, consulta el artículo sobre cómo identificar proyectos.
    • Descarga e instala la versión 11 del Java Development Kit (JDK). (Dataflow sigue admitiendo la versión 8). Verifica que la variable de entorno JAVA_HOME esté definida y apunte a tu instalación de JDK.
    • Descarga e instala Apache Maven siguiendo la guía de instalación de Maven para tu sistema operativo.
    • Obtener el código de la canalización

      El SDK de Apache Beam es un modelo de programación de código abierto para flujos de procesamiento de datos. Puedes definir estos flujos de procesamiento con un programa de Apache Beam y elegir un ejecutor, como Dataflow, para ejecutar el flujo de procesamiento.

      1. En tu shell o terminal, usa el complemento Maven Archetype para crear un proyecto de Maven en tu ordenador que contenga los ejemplos de WordCount del SDK de Apache Beam:
        mvn archetype:generate \
            -DarchetypeGroupId=org.apache.beam \
            -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
            -DarchetypeVersion=2.67.0 \
            -DgroupId=org.example \
            -DartifactId=word-count-beam \
            -Dversion="0.1" \
            -Dpackage=org.apache.beam.examples \
            -DinteractiveMode=false
        

        El comando crea un directorio llamado word-count-beam en el directorio actual. El directorio word-count-beam contiene un archivo pom.xml simple y una serie de ejemplos de canalizaciones que cuentan palabras en archivos de texto.

      2. Comprueba que tu directorio word-count-beam contenga el archivo pom.xml:

        Linux o macOS

        cd word-count-beam/
        ls

        El resultado es el siguiente:

        pom.xml   src

        Windows

        cd word-count-beam/
        dir

        El resultado es el siguiente:

        pom.xml   src
      3. Verifica que tu proyecto de Maven contiene las canalizaciones de ejemplo:

        Linux o macOS

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

        El resultado es el siguiente:

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

        Windows

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

        El resultado es el siguiente:

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

      Para obtener una introducción detallada a los conceptos de Apache Beam que se utilizan en estos ejemplos, consulta el ejemplo de WordCount de Apache Beam. En las instrucciones de las siguientes secciones se usa WordCount.java.

      Ejecutar el flujo de procesamiento de forma local

      • En tu shell o terminal, ejecuta la canalización WordCount de forma local desde el directorio word-count-beam:
        mvn compile exec:java \
            -Dexec.mainClass=org.apache.beam.examples.WordCount \
            -Dexec.args="--output=counts"
        

        Los archivos de salida tienen el prefijo counts y se escriben en el directorio word-count-beam. Contienen palabras únicas del texto de entrada y el número de veces que aparece cada palabra.

      Ejecutar el flujo de procesamiento en el servicio Dataflow

      • En tu shell o terminal, compila y ejecuta el flujo de procesamiento WordCount en el servicio Dataflow desde tu directorio 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"
        

        Haz los cambios siguientes:

        • PROJECT_ID: tu ID de proyecto Google Cloud
        • BUCKET_NAME: el nombre de tu segmento de Cloud Storage
        • REGION: una región de Dataflow, como us-central1

      Ver los resultados

      1. En la Google Cloud consola, ve a la página Trabajos de Dataflow.

        Ir a Tareas

        En la página Tareas se muestran los detalles de todas las tareas disponibles, incluido el estado. El Estado del trabajo recuento de palabras es En curso al principio y, después, cambia a Completado.

      2. En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.

        Ir a Contenedores

        En la página Segmentos se muestra la lista de todos los segmentos de almacenamiento de tu proyecto.

      3. Haz clic en el segmento de almacenamiento que has creado.

        En la página Detalles del segmento se muestran los archivos de salida y los archivos de almacenamiento provisional que ha creado tu tarea de Dataflow.

      Limpieza

      Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta página, elimina el Google Cloud proyecto con los recursos.

      Eliminar el proyecto

      La forma más fácil de evitar que te cobren es eliminar el Google Cloud proyecto que has creado para la guía de inicio rápido.

        Delete a Google Cloud project:

        gcloud projects delete PROJECT_ID

      Eliminar los recursos concretos

      Si quieres conservar el Google Cloud proyecto que has usado en esta guía de inicio rápido, elimina los recursos individuales:

      1. Elimina el segmento:
        gcloud storage buckets delete BUCKET_NAME
      2. Revoca los roles que hayas concedido a la cuenta de servicio predeterminada de Compute Engine. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de gestión de identidades y accesos:

        • 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

      Siguientes pasos