Crea una canalización de Dataflow con Java

En este documento, se muestra cómo configurar tu proyecto de Google Cloud , crear una canalización de ejemplo compilada con el SDK de Apache Beam para Java y ejecutar la canalización de ejemplo en el servicio de Dataflow. La canalización lee un archivo de texto de Cloud Storage, cuenta la cantidad de palabras únicas del archivo y, luego, vuelve a escribir el recuento de palabras en Cloud Storage. Para obtener una introducción a la canalización de WordCount, consulta el video Cómo usar WordCount en Apache Beam.

Para este instructivo, se requiere Maven, pero también es posible convertir el proyecto de ejemplo de Maven a Gradle. Para obtener más información, consulta Opcional: convierte de Maven a Gradle.


Para seguir la guía paso a paso sobre esta tarea directamente en la consola Google Cloud , haz clic en Guiarme:

Guiarme


Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.

  3. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. Crea o selecciona un Google Cloud proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.
    • Crea un Google Cloud proyecto:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto Google Cloud que estás creando.

    • Selecciona el proyecto Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu Google Cloud proyecto.

  6. Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .

  7. Habilita las APIs de Dataflow, Compute Engine, Cloud Logging, Cloud Storage, JSON de Google Cloud Storage, BigQuery, Cloud Pub/Sub, Cloud Datastore y Cloud Resource Manager:

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  8. Crea credenciales de autenticación locales para tu cuenta de usuario:

    gcloud auth application-default login

    Si se devuelve un error de autenticación y usas un proveedor de identidad (IdP) externo, confirma que accediste a la gcloud CLI con tu identidad federada.

  9. Otorga roles a tu cuenta de usuario. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: roles/iam.serviceAccountUser

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

    Reemplaza lo siguiente:

    • PROJECT_ID: ID del proyecto
    • USER_IDENTIFIER: Es el identificador de tu cuenta de usuario de . Por ejemplo, myemail@example.com.
    • ROLE: Es el rol de IAM que otorgas a tu cuenta de usuario.
  10. Instala Google Cloud CLI.

  11. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  12. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  13. Crea o selecciona un Google Cloud proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.
    • Crea un Google Cloud proyecto:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto Google Cloud que estás creando.

    • Selecciona el proyecto Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu Google Cloud proyecto.

  14. Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .

  15. Habilita las APIs de Dataflow, Compute Engine, Cloud Logging, Cloud Storage, JSON de Google Cloud Storage, BigQuery, Cloud Pub/Sub, Cloud Datastore y Cloud Resource Manager:

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  16. Crea credenciales de autenticación locales para tu cuenta de usuario:

    gcloud auth application-default login

    Si se devuelve un error de autenticación y usas un proveedor de identidad (IdP) externo, confirma que accediste a la gcloud CLI con tu identidad federada.

  17. Otorga roles a tu cuenta de usuario. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: roles/iam.serviceAccountUser

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

    Reemplaza lo siguiente:

    • PROJECT_ID: ID del proyecto
    • USER_IDENTIFIER: Es el identificador de tu cuenta de usuario de . Por ejemplo, myemail@example.com.
    • ROLE: Es el rol de IAM que otorgas a tu cuenta de usuario.
  18. Otorga roles a tu cuenta de servicio predeterminada de Compute Engine. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de 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
    • Reemplaza PROJECT_ID con el ID del proyecto.
    • Reemplaza PROJECT_NUMBER por el número del proyecto. Para encontrar el número de tu proyecto, consulta Identifica proyectos o usa el comando gcloud projects describe.
    • Reemplaza SERVICE_ACCOUNT_ROLE por cada rol individual.
  19. Crea un bucket de Cloud Storage y configúralo de la siguiente manera:
    • Establece la clase de almacenamiento en S (Standard).
    • Configura la ubicación de almacenamiento de la siguiente manera: US (Estados Unidos).
    • Reemplaza BUCKET_NAME con un nombre de bucket único. No incluyas información sensible en el nombre del bucket porque su espacio de nombres es global y visible a nivel público.
    gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
  20. Copia lo siguiente, ya que los necesitarás en una sección posterior:
    • : Es el nombre del bucket de Cloud Storage.
    • Es el ID de tu proyecto de Google Cloud . Para encontrar este ID, consulta Identifica proyectos.
  21. Descarga y, luego, instala la versión 11 del Java Development Kit (JDK) . (Dataflow sigue siendo compatible con la versión 8). Verifica que la variable de entorno JAVA_HOME esté establecida y que esté orientada a la instalación del JDK.
  22. Descarga y, luego, instala Apache Maven con los pasos de la guía de instalación de Maven para tu sistema operativo específico.

Obtén el código de canalización

El SDK de Apache Beam es un modelo de programación de código abierto para canalizaciones de datos. Debes definir estas canalizaciones con un programa Apache Beam y puedes elegir un ejecutor, como Dataflow, para ejecutar tu canalización.

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

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

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

    Linux o macOS

    cd word-count-beam/
    ls

    Este es el resultado:

    pom.xml   src

    Windows

    cd word-count-beam/
    dir

    Este es el resultado:

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

    Linux o macOS

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

    Este es el resultado:

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

    Windows

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

    Este es el resultado:

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

Para obtener información detallada sobre los conceptos de Apache Beam que se usan en estos ejemplos, consulta Ejemplo de WordCount de Apache Beam. En las instrucciones de las siguientes secciones, se usa WordCount.java.

Ejecuta la canalización de forma local:

  • En tu shell o terminal, ejecuta la canalización de WordCount de manera local desde tu 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 la cantidad de veces que aparece cada palabra.

Ejecuta la canalización en el servicio de Dataflow

  • En tu shell o terminal, compila y ejecuta la canalización WordCount en el servicio de 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"
    

    Reemplaza lo siguiente:

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

Ve los resultados

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

    Ir a Trabajos

    La página Trabajos muestra una lista con los detalles de todos los trabajos disponibles, incluido el estado. El Estado del trabajo wordcount es En ejecución primero y, luego, se actualiza a Completado.

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

    Ir a Buckets

    En la página Buckets, se muestra la lista de todos los buckets de almacenamiento de tu proyecto.

  3. Haz clic en el bucket de almacenamiento que creaste.

    En la página Detalles del bucket, se muestran los archivos de salida y los archivos de etapa de pruebas que creó tu trabajo de Dataflow.

Realiza una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página, borra el proyecto de Google Cloud que tiene los recursos.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto Google Cloud que creaste para la guía de inicio rápido.

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos individuales

Si deseas conservar el proyecto Google Cloud que usaste en esta guía de inicio rápido, borra los recursos individuales:

  1. En la Google Cloud consola, ve a la página Buckets de Cloud Storage.

    Ir a Buckets

  2. Haz clic en la casilla de verificación del bucket que deseas borrar.
  3. Para borrar el bucket, haz clic en Borrar y sigue las instrucciones.
  4. Revoca las funciones que otorgaste a la cuenta de servicio predeterminada de Compute Engine. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de 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
  5. Opcional: Revoca las credenciales de autenticación que creaste y borra el archivo local de credenciales.

    gcloud auth application-default revoke
  6. Opcional: Revoca credenciales desde gcloud CLI.

    gcloud auth revoke

¿Qué sigue?