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:
Antes de empezar
- 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.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
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 theresourcemanager.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.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.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 -
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.
-
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.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
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 theresourcemanager.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.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.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 -
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.
-
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.
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 comandogcloud projects describe
. - Sustituye
SERVICE_ACCOUNT_ROLE
por cada rol individual.
-
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. - 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.
- 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 directorioword-count-beam
contiene un archivopom.xml
simple y una serie de ejemplos de canalizaciones que cuentan palabras en archivos de texto. - Comprueba que tu directorio
word-count-beam
contenga el archivopom.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
- 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
- En tu shell o terminal, ejecuta la canalización
WordCount
de forma local desde el directorioword-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 directorioword-count-beam
. Contienen palabras únicas del texto de entrada y el número de veces que aparece cada palabra. - En tu shell o terminal, compila y ejecuta el flujo de procesamiento
WordCount
en el servicio Dataflow desde tu directorioword-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 CloudBUCKET_NAME
: el nombre de tu segmento de Cloud StorageREGION
: una región de Dataflow, comous-central1
En la Google Cloud consola, ve a la página Trabajos de Dataflow.
Ir a TareasEn 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.
En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
Ir a ContenedoresEn la página Segmentos se muestra la lista de todos los segmentos de almacenamiento de tu proyecto.
- 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.
-
Elimina el segmento:
gcloud storage buckets delete BUCKET_NAME
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
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
- Consulta información sobre el modelo de programación de Apache Beam.
- Consulta cómo usar Apache Beam para crear canalizaciones.
- Consulta los ejemplos de recuento de palabras y juegos para móviles.
gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
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.
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
Ejecutar el flujo de procesamiento en el servicio Dataflow
Ver los resultados
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:
Siguientes pasos
-
Set the storage class to