arrow_back

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

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

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

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

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

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

Requisitos previos:

  • Conocimientos básicos sobre Python

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 Platform. Para obtener más información, explora la guía Comienza a usar las plantillas proporcionadas por Google. Sin embargo, ninguna realiza la misma función que la canalización de este lab. En esta parte del lab, convertirás la canalización en una plantilla personalizada de Flex de Dataflow más nueva (en lugar de una plantilla tradicional personalizada).

Convertir una canalización en una plantilla personalizada de Flex de Dataflow requiere usar un contenedor de Docker para empaquetar su código y las dependencias, un Dockerfile (para describir qué código 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).

Configuración y requisitos

Configuración del lab

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.

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 (), 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.

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.

Configuración del entorno de desarrollo basado en notebooks de Jupyter

En este lab, ejecutarás todos los comandos en una terminal del notebook.

  1. En el menú de navegación de la consola de Google Cloud, haz clic en Vertex AI > Workbench.

  2. Haz clic en Habilitar API de Notebooks.

  3. En la página de Workbench, selecciona NOTEBOOKS ADMINISTRADOS POR EL USUARIO y haz clic en CREAR NUEVO.

  4. En el cuadro de diálogo Instancia nueva que se muestra, establece la región en y la zona en .

  5. En Entorno, selecciona Apache Beam.

  6. Haz clic en CREAR en la parte inferior del cuadro de diálogo.

Nota: El aprovisionamiento completo del entorno tarda de 3 a 5 minutos. Espera hasta que se complete este paso. Nota: Haz clic en Habilitar API de Notebooks para habilitarla.
  1. Cuando el entorno esté listo, haz clic en el vínculo ABRIR JUPYTERLAB que se encuentra junto al nombre del notebook. Esto abrirá tu entorno en una nueva pestaña del navegador.

  1. Luego, haz clic en Terminal. Esto abrirá una terminal en la que podrás ejecutar todos los comandos del lab.

Descarga el repositorio de código

A continuación, descargarás un repositorio de código que usarás en este lab.

  1. En la terminal que acabas de abrir, ingresa lo siguiente:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst cd /home/jupyter/training-data-analyst/quests/dataflow_python/
  1. En el panel izquierdo de tu entorno de notebook, en el navegador de archivos, verás que se agregó el repo training-data-analyst.

  2. Navega al repo clonado /training-data-analyst/quests/dataflow_python/. Verás una carpeta para cada lab. Cada una de ellas se divide en una subcarpeta lab con un código que debes completar y una subcarpeta solution con un ejemplo viable que puedes consultar como referencia si no sabes cómo continuar.

Nota: Para abrir un archivo y editarlo, simplemente debes navegar al archivo y hacer clic en él. Se abrirá el archivo, en el que puedes agregar o modificar código.

Haz clic en Revisar mi progreso para verificar el objetivo. Crea una instancia de notebook y clona el repo del curso

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

  • En la terminal del entorno de JupyterLab, ejecuta los siguientes comandos:
cd 2_Branching_Pipelines/lab export BASE_DIR=$(pwd)

Configura el entorno virtual y las dependencias

Antes de comenzar a editar el código de la canalización en sí, debes asegurarte de haber instalado las dependencias necesarias.

  1. Regresa a la terminal que abriste antes en tu entorno IDE y, luego, crea un entorno virtual para tu trabajo en este lab:
sudo apt-get update && sudo apt-get install -y python3-venv python3 -m venv df-env source df-env/bin/activate
  1. Luego, instala los paquetes que necesitarás para ejecutar tu canalización:
python3 -m pip install -q --upgrade pip setuptools wheel python3 -m pip install apache-beam[gcp]
  1. Por último, asegúrate de que la API de Dataflow esté habilitada:
gcloud services enable dataflow.googleapis.com

Configura el entorno de datos

  • 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

Actualiza el código de tu canalización

  • Actualiza el archivo my_pipeline.py en tu IDE con el archivo de la solución que se encuentra en training-data-analyst/quests/dataflow_python/2_Branching_Pipelines/solution/:
cp /home/jupyter/training-data-analyst/quests/dataflow_python/2_Branching_Pipelines/solution/my_pipeline.py $BASE_DIR

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

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

  1. Primero, habilita el uso de caché de Kaniko de forma predeterminada. Kaniko almacena en caché los artefactos de compilación de contenedores, por lo que usar esta opción acelera las compilaciones posteriores. También usaremos pip3 freeze para registrar los paquetes y las versiones que se usan en nuestro entorno.
gcloud config set builds/use_kaniko True
  1. A continuación, crearemos nuestro Dockerfile. Esto especificará el código y las dependencias que necesitamos usar.

    a. Para completar esta tarea, crea un archivo nuevo en la carpeta dataflow_python/2_Branching_Pipelines/lab en el explorador de archivos de tu IDE.

    b. Para crear un archivo nuevo, haz clic en Archivo >> Nuevo >> Archivo de texto.

    c. Cámbiale el nombre al archivo a Dockerfile. Para hacerlo, haz clic en él con el botón derecho.

    d. Abre el archivo Dockerfile en el panel de edición y haz clic en el archivo para abrirlo.

    e. Copia el siguiente código en el archivo Dockerfile y guárdalo:

FROM gcr.io/dataflow-templates-base/python3-template-launcher-base ARG WORKDIR=/dataflow/template RUN mkdir -p ${WORKDIR} WORKDIR ${WORKDIR} RUN apt-get update && apt-get install -y libffi-dev && rm -rf /var/lib/apt/lists/* COPY my_pipeline.py . ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/my_pipeline.py" RUN python3 -m pip install apache-beam[gcp]==2.25.0
  1. Por último, usa Cloud Build para compilar la imagen del contenedor.
export PROJECT_ID=$(gcloud config get-value project) export TEMPLATE_IMAGE="gcr.io/$PROJECT_ID/dataflow/my_pipeline:latest" gcloud builds submit --tag $TEMPLATE_IMAGE .

La compilación y el envío del contenedor tardará unos minutos.

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

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

  1. 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.

    a. Crea un archivo nuevo en la carpeta dataflow_python/2_Branching_Pipelines/lab del explorador de archivos de tu IDE.

    b. Para crear un archivo nuevo, haz clic en Archivo >> Nuevo >> Archivo de texto.

    c. Cámbiale el nombre al archivo a metadata.json. Para hacerlo, haz clic en él con el botón derecho.

    d. Abre el archivo metadata.json en el panel de edición. Para abrir el archivo metadata.json, haz clic en él con el botón derecho y, luego, selecciona Abrir con >> Editor.

    e. Para completar esta tarea, necesitamos crear un archivo metadata.json con el siguiente formato que incluya 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": "inputPath", "label": "Input file path.", "helpText": "Path to events.json file.", "regexes": [ ".*\\.json" ] }, { "name": "outputPath", "label": "Output file location", "helpText": "GCS Coldline Bucket location for raw data", "regexes": [ "gs:\\/\\/[a-zA-z0-9\\-\\_\\/]+" ] }, { "name": "tableName", "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 PROJECT_ID=$(gcloud config get-value project) 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 "PYTHON" \ --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 de Cloud Dataflow en la consola de GCP.

  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 de plantillas de 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.

    a. En Input file path, ingresa .

    b. En Output file location, ingresa .

    c. En Tabla de salida de BigQuery, ingresa .

  7. Haz clic en EJECUTAR TRABAJO.

Nota: No necesitas especificar un bucket de etapa de pruebas, ya que Dataflow creará uno privado en tu proyecto con el número de proyecto, similar a
  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 y ejecuta 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={{{project_0.startup_script.lab_region|Region}}} 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/template_output/ 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

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.