Usa la programación flexible de recursos en Cloud Dataflow

En esta página, se explica cómo habilitar la programación flexible de recursos (FlexRS) para canalizaciones por lotes con ajuste de escala automático en Dataflow.

FlexRS

FlexRS reduce los costos de procesamiento por lotes mediante el uso de técnicas de programación avanzadas, el servicio Dataflow Shuffle y, en la actualidad, una combinación de instancias de máquinas virtuales (VM) interrumpibles y VM normales. Mediante la ejecución de VM interrumpibles y VM normales en paralelo, Dataflow mejora la experiencia del usuario en el caso de que Compute Engine detenga las instancias de VM interrumpibles durante un evento del sistema. FlexRS ayuda a garantizar que la canalización continúe su progreso y que no pierdas el trabajo anterior cuando Compute Engine detiene las VM interrumpibles.

Los trabajos con FlexRS usan Dataflow Shuffle basado en servicios para unir y agrupar. Como resultado, los trabajos de FlexRS no usan recursos de Persistent Disk para almacenar resultados temporales de cálculos. Usar Dataflow Shuffle permite que FlexRS controle mejor la interrupción de una VM de trabajador, porque el servicio de Dataflow no tiene que redistribuir los datos a los trabajadores restantes. Cada trabajador de Dataflow necesita 25 GB de volumen de Persistent Disk para almacenar la imagen de la máquina y los registros temporales.

Los trabajos de FlexRS tienen un retraso de programación. Por lo tanto, FlexRS es más adecuado para cargas de trabajo que no son críticas, como los trabajos diarios o semanales que pueden completarse dentro de un período determinado.

Programación retrasada

Cuando envías un trabajo de FlexRS, el servicio de Dataflow ubica el trabajo en una cola y lo envía para su ejecución dentro de las 6 horas posteriores a su creación. Dataflow busca el mejor momento para iniciar el trabajo dentro de ese período, en función de la capacidad disponible y otros factores.

Cuando envías un trabajo de FlexRS, el servicio de Dataflow realiza los siguientes pasos:

  1. Muestra un ID de trabajo justo después de que se envió el trabajo.
  2. Realiza una ejecución de validación temprana.
  3. Usa el resultado de la validación temprana para determinar el siguiente paso:

    1. En caso de éxito, se pone en cola el trabajo para esperar el lanzamiento retrasado.
    2. En todos los demás casos, el trabajo falla y el servicio de Dataflow informa los errores.

Por lo tanto, después de enviar un trabajo de FlexRS, tu trabajo muestra un ID y el estado En cola en la interfaz de supervisión de Dataflow en caso de éxito, y muestra el estado Con errores en caso contrario.

Validación temprana

Los trabajos de FlexRS no se inician de inmediato una vez que se los envía. Durante la validación temprana, el servicio de Dataflow verifica los parámetros de ejecución y la configuración del entorno de Google Cloud, como las funciones de Cloud IAM y los parámetros de configuración de red. Dataflow valida el trabajo tanto como sea posible cuando se lo envía y, luego, informa posibles errores. No se te cobrará por este proceso de validación temprana.

El paso de validación temprana no ejecuta el código de usuario. Debes verificar tu código para comprobar si hay problemas mediante Direct Runner de Apache Beam o trabajos que no son de FlexRS. Si hay cambios en el entorno de Google Cloud entre la creación del trabajo y su programación retrasada, es posible que el trabajo pase la validación temprana con éxito, pero que falle en el momento del inicio.

Habilita FlexRS

Cuando creas un trabajo de FlexRS, se toma una cuota de trabajo, incluso cuando el trabajo está en el estado En cola. Por lo tanto, antes de habilitar FlexRS, verifica que tengas suficientes cuotas de recursos del proyecto de Google Cloud para iniciar el trabajo. Esto incluye cuota adicional para CPU interrumpibles, CPU normales y direcciones IP, a menos que desactives el parámetro de IP pública.

Si no tienes suficiente cuota, es posible que tu cuenta no tenga recursos suficientes cuando se implemente el trabajo de FlexRS. De forma predeterminada, Dataflow selecciona las VM interrumpibles para el 90% de los trabajadores en el grupo de trabajadores. Cuando planifiques la cuota de CPU, asegúrate de tener suficiente cuota de VM interrumpible. De forma predeterminada, no tienes una cuota de VM interrumpible separada. Debes solicitar explícitamente una cuota de VM interrumpible; de lo contrario, tu trabajo de FlexRS carecerá de los recursos para ejecutarlo de manera oportuna.

Precios

En los trabajos de FlexRS, se cobran los siguientes recursos:

  • CPU interrumpibles y normales
  • Recursos de memoria
  • Recursos de Dataflow Shuffle
  • 25 GB de recursos de Persistent Disk por trabajador

Si bien Dataflow usa trabajadores interrumpibles y normales para ejecutar el trabajo de FlexRS, se te cobrará una tarifa uniforme con descuento en comparación con los precios normales de Dataflow, sin importar el tipo de trabajador. No se descuentan los recursos de Dataflow Shuffle ni de Persistent Disk.

Para obtener más información, consulta la página de detalles de los precios de Dataflow.

Requisitos de FlexRS

FlexRS requiere las siguientes características:

  • El SDK de Apache Beam para Java 2.12.0 o versiones posteriores, o el SDK de Apache Beam para Python 2.12.0 o versiones posteriores
  • Dataflow Shuffle. Activar FlexRS también habilita Dataflow Shuffle de forma automática

Opciones de canalización

Java

Para habilitar un trabajo de FlexRS, usa la opción de canalización --flexRSGoal=COST_OPTIMIZED, en la que el objetivo de costo optimizado implica que el servicio de Dataflow elija cualquier recurso con descuento que esté disponible.

Los trabajos de FlexRS afectan los siguientes parámetros de ejecución:

  • numWorkers solo establece la cantidad inicial de trabajadores. Sin embargo, puedes establecer maxNumWorkers por motivos de control de costos.
  • No puedes establecer autoscalingAlgorithm=NONE.
  • No puedes especificar la marca zone en trabajos de FlexRS. El servicio de Dataflow selecciona la zona de todos los trabajos de FlexRS en la región que especificaste con el parámetro region.
  • Debes seleccionar un extremo regional de Dataflow como tu region.
  • Debes usar el tipo predeterminado n1-standard-2 o n1-highmem-16 para tu workerMachineType.

En el siguiente ejemplo, se muestra cómo agregar parámetros a tus parámetros de canalización normales a fin de usar FlexRS:

--flexRSGoal=COST_OPTIMIZED \
--region=europe-west1 \
--maxNumWorkers=10 \
--workerMachineType=n1-highmem-16

Si omites region, maxNumWorkers y workerMachineType, el servicio de Dataflow determinará el valor predeterminado.

Python

Para habilitar un trabajo de FlexRS, usa la opción de canalización --flexrs_goal=COST_OPTIMIZED, en la que el objetivo de costo optimizado implica que el servicio de Dataflow elija cualquier recurso con descuento que esté disponible.

Los trabajos de FlexRS afectan los siguientes parámetros de ejecución:

  • num_workers solo establece la cantidad inicial de trabajadores. Sin embargo, puedes establecer max_num_workers por motivos de control de costos.
  • No puedes establecer autoscaling_algorithm=NONE.
  • No puedes especificar la marca zone en trabajos de FlexRS. El servicio de Dataflow selecciona la zona de todos los trabajos de FlexRS en la región que especificaste con el parámetro region.
  • Debes seleccionar un extremo regional de Dataflow como tu region.
  • Debes usar el tipo predeterminado n1-standard-2 o n1-highmem-16 para tu machine_type.

En el siguiente ejemplo, se muestra cómo agregar parámetros a tus parámetros de canalización normales a fin de usar FlexRS:

--flexrs_goal=COST_OPTIMIZED \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16

Si omites region, max_num_workers y machine_type, el servicio de Dataflow determinará el valor predeterminado.

Supervisa trabajos de FlexRS

Puedes supervisar el estado del trabajo de FlexRS en dos lugares de Google Cloud Console:

  1. La página Trabajos, que muestra todos tus trabajos.
  2. La página Resumen del trabajo del trabajo que enviaste.

En la página Jobs (Trabajos), los trabajos que aún se iniciaron muestran el estado En cola.

Una lista de trabajos de Cloud Dataflow en GCP Console cuyos estados son En ejecución, En cola, Con errores y Se completó con éxito
Figura 1: Una lista de trabajos de Dataflow en Cloud Console cuyos estados son En ejecución, En cola, Con errores, y Se completó con éxito.

En la página Resumen del trabajo, los trabajos que están en cola muestran el mensaje “Este trabajo está en cola y se ejecutará pronto”.

Un trabajo de canalización individual en cola en la interfaz de supervisión de Cloud Dataflow
Figura 2: Un trabajo de canalización individual en cola que se muestra en la interfaz de supervisión de Cloud Dataflow.