arrow_back

Procesamiento de datos sin servidores con Dataflow: plantillas de Flex de Dataflow personalizadas (Java)

Acceder Unirse
Obtén acceso a más de 700 labs y cursos

Procesamiento de datos sin servidores con Dataflow: plantillas de Flex de Dataflow personalizadas (Java)

Lab 2 horas universal_currency_alt 5 créditos show_chart Avanzado
info Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.
Obtén acceso a más de 700 labs y cursos

Descripción general

Una canalización que acepta parámetros de la línea de comandos es mucho más útil que una que tiene esos parámetros en modalidad hard-coded. Sin embargo, para ejecutar la canalización, se debe crear un entorno de desarrollo. Si se espera que múltiples usuarios diferentes vuelvan a ejecutar la canalización, o que la canalización se vuelva a ejecutar en una variedad de contextos diferentes, una opción todavía mejor sería usar una plantilla de Dataflow.

Hay muchas plantillas de Dataflow que ya se crearon como parte de Google Cloud, y que puedes explorar en la documentación de Comienza a usar Google. Sin embargo, ninguna realiza la misma función que la canalización de este lab. En su lugar, en esta parte del lab, convertirás la canalización en una plantilla de Flex de Dataflow personalizada más nueva (en lugar de una plantilla tradicional personalizada).

Convertir una canalización en una plantilla de Flex de Dataflow personalizada requiere usar un archivo uber JAR para empaquetar tu código y las dependencias, un Dockerfile para describir qué código se compilará, Cloud Build para crear el contenedor subyacente que se ejecutará en el entorno de ejecución para crear el trabajo real y un archivo de metadatos para describir los parámetros del trabajo.

Requisitos previos

Conocimientos básicos sobre Java

Qué aprenderás

En este lab, aprenderás a hacer lo siguiente:

  • Convertir una canalización personalizada en una plantilla flexible de Dataflow personalizada
  • Ejecutar una plantilla de Flex de Dataflow

Configuración y requisitos

En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.

  1. Accede a Qwiklabs desde una ventana de incógnito.

  2. Ten en cuenta el tiempo de acceso del lab (por ejemplo, 1:15:00) y asegúrate de finalizarlo en el plazo asignado.
    No existe una función de pausa. Si lo necesita, puede reiniciar el lab, pero deberá hacerlo desde el comienzo.

  3. Cuando esté listo, haga clic en Comenzar lab.

  4. Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.

  5. Haga clic en Abrir Google Console.

  6. Haga clic en Usar otra cuenta, copie las credenciales para este lab y péguelas en el mensaje emergente que aparece.
    Si usa otras credenciales, se generarán errores o incurrirá en cargos.

  7. Acepta las condiciones y omite la página de recursos de recuperación.

Activa Google Cloud Shell

Google Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud.

Google Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.

  1. En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.

    Ícono de Cloud Shell destacado

  2. Haz clic en Continuar.

El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. Por ejemplo:

ID del proyecto destacado en la terminal de Cloud Shell

gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con el completado de línea de comando.

  • Puedes solicitar el nombre de la cuenta activa con este comando:
gcloud auth list

Resultado:

Credentialed accounts: - @.com (active)

Resultado de ejemplo:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • Puedes solicitar el ID del proyecto con este comando:
gcloud config list project

Resultado:

[core] project =

Resultado de ejemplo:

[core] project = qwiklabs-gcp-44776a13dea667a6 Nota: La documentación completa de gcloud está disponible en la guía de descripción general de gcloud CLI .

Verifica los permisos del proyecto

Antes de comenzar a trabajar en Google Cloud, asegúrate de que tu proyecto tenga los permisos correctos en Identity and Access Management (IAM).

  1. En la consola de Google Cloud, en el Menú de navegación (Ícono del menú de navegación), selecciona IAM y administración > IAM.

  2. Confirma que aparezca la cuenta de servicio predeterminada de Compute {número-del-proyecto}-compute@developer.gserviceaccount.com, y que tenga asignado el rol Editor. El prefijo de la cuenta es el número del proyecto, que puedes encontrar en el Menú de navegación > Descripción general de Cloud > Panel.

El nombre de la cuenta de servicio predeterminada de Compute Engine y el estado del editor destacados en la página de pestañas Permisos

Nota: Si la cuenta no aparece en IAM o no tiene asignado el rol Editor, sigue los pasos que se indican a continuación para asignar el rol necesario.
  1. En la consola de Google Cloud, en el Menú de navegación, haz clic en Descripción general de Cloud > Panel.
  2. Copia el número del proyecto (p. ej., 729328892908).
  3. En el Menú de navegación, selecciona IAM y administración > IAM.
  4. En la parte superior de la tabla de funciones, debajo de Ver por principales, haz clic en Otorgar acceso.
  5. En Principales nuevas, escribe lo siguiente:
{project-number}-compute@developer.gserviceaccount.com
  1. Reemplaza {número-del-proyecto} por el número de tu proyecto.
  2. En Rol, selecciona Proyecto (o Básico) > Editor.
  3. Haz clic en Guardar.

Configura tu IDE

Para los fines de este lab, usará principalmente un IDE web de Theia alojado en Google Compute Engine. El IDE tiene el repositorio de labs clonado previamente. Se ofrece compatibilidad con el servidor de lenguaje Java y una terminal para el acceso programático a las API de Google Cloud mediante la herramienta de línea de comandos de gcloud, similar a Cloud Shell.

Para acceder al IDE de Theia, copie y pegue en una pestaña nueva el vínculo que se muestra en Qwiklabs.

NOTA: Es posible que deba esperar entre 3 y 5 minutos para que se aprovisione por completo el entorno, incluso después de que aparezca la URL. Hasta ese momento, se mostrará un error en el navegador.

ide_url

El repositorio del lab se clonó en su entorno. Cada lab se divide en una carpeta labs con un código que debe completar y una carpeta solution con un ejemplo viable que puede consultar como referencia si no sabe cómo continuar. Haga clic en el botón File Explorer para ver lo siguiente:

file_explorer

También puede crear varias terminales en este entorno, como lo haría con Cloud Shell:

new_terminal

Para verificarlo, ejecute gcloud auth list en la terminal con la que accedió como cuenta de servicio proporcionada, que tiene exactamente los mismos permisos que su cuenta de usuario del lab:

gcloud_auth

Si en algún momento su entorno deja de funcionar, intente restablecer la VM en la que se aloja el IDE desde la consola de GCE de la siguiente manera:

gce_reset

Tarea 1. Configura tu canalización

En este lab, aprovecharemos el código de canalización existente del lab Canalizaciones con ramas (carpeta de soluciones).

Abre el lab adecuado

  1. Si aún no lo has hecho, crea una terminal nueva en tu IDE y, luego, copia y pega el siguiente comando:
# Change directory into the lab cd 2_Branching_Pipelines/labs # Download dependencies mvn clean dependency:resolve export BASE_DIR=$(pwd)
  1. Configura el entorno de datos:
# Create GCS buckets and BQ dataset cd $BASE_DIR/../.. source create_batch_sinks.sh # Generate event dataflow source generate_batch_events.sh # Change to the directory containing the practice version of the code cd $BASE_DIR

Haz clic en Revisar mi progreso para verificar el objetivo. Configura el entorno de datos

Actualiza el código de tu canalización

  • Actualiza el archivo MyPipeline.java en tu IDE usando el archivo de solución, que se encuentra en 2_Branching_Pipelines/solution/src/main/java/com/mypackage/pipeline:
cp /home/project/training-data-analyst/quests/dataflow/2_Branching_Pipelines/solution/src/main/java/com/mypackage/pipeline/MyPipeline.java $BASE_DIR/src/main/java/com/mypackage/pipeline/

Tarea 2. Crea una imagen de contenedor de una plantilla personalizada de Flex de Dataflow

  1. Para completar esta tarea, agrega el siguiente complemento al archivo pom.xml para habilitar la compilación de un archivo uber JAR. En primer lugar, agrega lo siguiente a la etiqueta de propiedades:
<maven-shade-plugin.version>3.2.3</maven-shade-plugin.version>
  1. Luego, agrega lo siguiente a la etiqueta de complementos para la creación:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>${maven-shade-plugin.version}</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> </transformers> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
  1. Ahora, puedes crear un archivo uber JAR con este comando:
cd $BASE_DIR mvn clean package

Observa el tamaño. Este archivo uber JAR tiene todas las dependencias incorporadas.

  1. Puedes ejecutar este archivo como una aplicación independiente sin dependencias externas en otras bibliotecas:
ls -lh target/*.jar
  1. En el mismo directorio en que está el archivo pom.xml, crea un archivo llamado Dockerfile con el siguiente texto. Asegúrate de establecer FLEX_TEMPLATE_JAVA_MAIN_CLASS con el nombre completo de tu clase y YOUR_JAR_HERE con el archivo uber JAR que creaste.
FROM gcr.io/dataflow-templates-base/java11-template-launcher-base:latest # Define the Java command options required by Dataflow Flex Templates. ENV FLEX_TEMPLATE_JAVA_MAIN_CLASS="YOUR-CLASS-HERE" ENV FLEX_TEMPLATE_JAVA_CLASSPATH="/template/pipeline.jar" # Make sure to package as an uber-jar including all dependencies. COPY target/YOUR-JAR-HERE.jar ${FLEX_TEMPLATE_JAVA_CLASSPATH}
  1. A continuación, usa Cloud Build para transferir la compilación del contenedor por ti, en lugar de compilarlo de manera local. Primero, activa el almacenamiento en caché para acelerar las compilaciones futuras:
gcloud config set builds/use_kaniko True
  1. Luego, ejecuta la compilación. Esto agregará el archivo tar a todo el directorio (incluido el Dockerfile) con instrucciones sobre qué se debe compilar para subir al servicio, y también para compilar un contenedor y enviarlo a Google Container Registry en tu proyecto para usarlo más adelante.
export TEMPLATE_IMAGE="gcr.io/$PROJECT_ID/my-pipeline:latest" gcloud builds submit --tag $TEMPLATE_IMAGE .

También puedes supervisar el estado de compilación desde la IU de Cloud Build. También puedes ver que el contenedor resultante se subió a Google Container Registry.

Haz clic en Revisar mi progreso para verificar el objetivo. Crear una imagen de contenedor de una plantilla personalizada de Flex de Dataflow

Tarea 3. Crea la plantilla de Flex y almacénala en etapa intermedia

Para ejecutar una plantilla, debes crear un archivo de especificaciones de la plantilla en Cloud Storage que contenga toda la información necesaria para ejecutar el trabajo, como la información y los metadatos del SDK.

  1. Para completar esta tarea, crea un archivo metadata.json en el siguiente formato que considere todos los parámetros de entrada que espera tu canalización.

Consulta la solución si es necesario. Para hacerlo, debes escribir tu propia comprobación de regex de parámetros. Si bien no es una práctica recomendada, ".*" coincidirá con cualquier entrada.

{ "name": "Your pipeline name", "description": "Your pipeline description", "parameters": [ { "name": "inputSubscription", "label": "Pub/Sub input subscription.", "helpText": "Pub/Sub subscription to read from.", "regexes": [ "[-_.a-zA-Z0-9]+" ] }, { "name": "outputTable", "label": "BigQuery output table", "helpText": "BigQuery table spec to write to, in the form 'project:dataset.table'.", "is_optional": true, "regexes": [ "[^:]+:[^.]+[.].+" ] } ] }
  1. Luego, compila la plantilla real y almacénala en etapa intermedia:
export TEMPLATE_PATH="gs://${PROJECT_ID}/templates/mytemplate.json" # Will build and upload the template to GCS # You may need to opt-in to beta gcloud features gcloud beta dataflow flex-template build $TEMPLATE_PATH \ --image "$TEMPLATE_IMAGE" \ --sdk-language "JAVA" \ --metadata-file "metadata.json"
  1. Verifica que el archivo se haya subido a la ubicación de la plantilla en Cloud Storage.

Haz clic en Revisar mi progreso para verificar el objetivo. Crea la plantilla de Flex y almacénala en etapa intermedia

Tarea 4. Ejecuta la plantilla desde la IU

Para completar la tarea, sigue estas instrucciones:

  1. Ve a la página Cloud Dataflow en GCP Console.
  2. Haz clic en Crear trabajo a partir de una plantilla.
  3. Ingresa un nombre válido para el trabajo en el campo Nombre del trabajo.
  4. Selecciona Plantilla personalizada en el menú desplegable Plantilla de Cloud Dataflow.
  5. Ingresa la ruta de Cloud Storage a tu archivo de plantilla en el campo de la ruta de la plantilla de Cloud Storage.
  6. Ingresa los elementos adecuados en Parámetros obligatorios.
  7. Haz clic en Ejecutar trabajo.
Nota: No necesitas especificar un bucket de almacenamiento en etapa intermedia, ya que Dataflow creará uno privado en tu proyecto con el número de proyecto, similar a gs://dataflow-staging-us-central1-/staging.
  1. Si revisas la consola de Compute Engine, verás una VM de iniciador temporal que se creó para ejecutar el contenedor y poder iniciar tu canalización con los parámetros proporcionados.

Tarea 5. Ejecuta la plantilla con gcloud

Uno de los beneficios de usar las plantillas de Dataflow es poder ejecutarlas desde muchos contextos distintos del entorno de desarrollo. Para demostrarlo, usa gcloud para ejecutar una plantilla de Dataflow desde la línea de comandos.

  1. Para completar esta tarea, ejecuta el siguiente comando en tu terminal y modifica los parámetros según corresponda:
export PROJECT_ID=$(gcloud config get-value project) export REGION='us-central1' export JOB_NAME=mytemplate-$(date +%Y%m%H%M$S) export TEMPLATE_LOC=gs://${PROJECT_ID}/templates/mytemplate.json export INPUT_PATH=gs://${PROJECT_ID}/events.json export OUTPUT_PATH=gs://${PROJECT_ID}-coldline/ export BQ_TABLE=${PROJECT_ID}:logs.logs_filtered gcloud beta dataflow flex-template run ${JOB_NAME} \ --region=$REGION \ --template-file-gcs-location ${TEMPLATE_LOC} \ --parameters "inputPath=${INPUT_PATH},outputPath=${OUTPUT_PATH},tableName=${BQ_TABLE}"
  1. Asegúrate de que tu canalización se complete correctamente.

Haz clic en Revisar mi progreso para verificar el objetivo. Ejecuta la plantilla desde la IU y con gcloud

Finalice su lab

Cuando haya completado el lab, haga clic en Finalizar lab. Google Cloud Skills Boost quitará los recursos que usó y limpiará la cuenta.

Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.

La cantidad de estrellas indica lo siguiente:

  • 1 estrella = Muy insatisfecho
  • 2 estrellas = Insatisfecho
  • 3 estrellas = Neutral
  • 4 estrellas = Satisfecho
  • 5 estrellas = Muy satisfecho

Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.

Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.

Copyright 2020 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.

Antes de comenzar

  1. Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
  2. .
  3. Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
  4. En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar

Usa la navegación privada

  1. Copia el nombre de usuario y la contraseña proporcionados para el lab
  2. Haz clic en Abrir la consola en modo privado

Accede a la consola

  1. Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
  2. Acepta las condiciones y omite la página de recursos de recuperación
  3. No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto

Este contenido no está disponible en este momento

Te enviaremos una notificación por correo electrónico cuando esté disponible

¡Genial!

Nos comunicaremos contigo por correo electrónico si está disponible

Un lab a la vez

Confirma para finalizar todos los labs existentes y comenzar este

Usa la navegación privada para ejecutar el lab

Usa una ventana de navegación privada o de Incógnito para ejecutar el lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.