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 de lote con ajuste de escala automático en Dataflow.

FlexRS

FlexRS reduce los costos de procesamiento por lotes mediante las técnicas de programación avanzadas, el servicio de Dataflow Shuffle y una combinación de instancias de máquinas virtuales interrumpibles (VM) y las VM normales. Al ejecutar VM interrumpibles y VM normales en paralelo, Dataflow mejora la experiencia del usuario si Compute Engine detiene instancias de VM interrumpibles durante un evento del sistema. FlexRS ayuda a garantizar que la canalización progrese y no pierda el trabajo anterior cuando Compute Engine interrumpe tus VM interrumpibles.

Los trabajos con FlexRS usan Dataflow Shuffle basado en servicios para unirse y agrupar. Como resultado, los trabajos de FlexRS no utilizan recursos de Persistent Disk para almacenar resultados de cálculo temporales. Usar Dataflow Shuffle permite que FlexRS controle mejor la interrupción de una VM de trabajadores porque el servicio de Dataflow no tiene que redistribuir los datos a los demás trabajadores. Cada trabajador de Dataflow necesita un pequeño volumen de disco persistente de 25 GB 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ía un trabajo de FlexRS, el servicio de Dataflow coloca el trabajo en una cola y lo envía para su ejecución dentro de las 6 horas posteriores a la creación del trabajo. Dataflow encuentra el mejor momento para iniciar el trabajo dentro de ese período de tiempo, según la capacidad disponible y otros factores.

Cuando envía un trabajo de FlexRS, el servicio de Dataflow ejecuta los siguientes pasos:

  1. Muestra un ID de trabajo inmediatamente después del envío de trabajos.
  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, 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, su trabajo muestra un ID y un Estado de En cola en la interfaz de supervisión de Dataflow en caso de éxito y un estado de Error en caso contrario.

Validación temprana

Los trabajos de FlexRS no se inician inmediatamente después del envío. Durante la validación anticipada, 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 las configuraciones de red. Dataflow valida el trabajo tanto como sea posible en el momento del envío del trabajo e 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 con los trabajos de Direct Runner de Apache Beam o que no son de FlexRS. Si hay cambios en el entorno de Google Cloud entre la creación del trabajo y la programación retrasada del trabajo, el trabajo puede tener éxito durante la validación anticipada, pero fallar al momento del lanzamiento.

Cómo habilitar FlexRS

Cuando creas un trabajo de FlexRS, se toma una cuota de trabajo, incluso cuando el trabajo está en el estado de En cola. Por lo tanto, antes de habilitar FlexRS, verifique que tenga suficientes cuotas de recursos del proyecto de Google Cloud para iniciar su trabajo. Esto incluye una 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 tu trabajo de FlexRS. Dataflow selecciona VM interrumpibles para el 90% de los trabajadores del grupo de trabajadores de forma predeterminada. Cuando planifiques una 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 una cuota de VM interrumpible explícitamente; de lo contrario, tu trabajo de FlexRS carecerá de los recursos para ejecutarlo de manera oportuna.

Precios

Los trabajos de FlexRS se facturan para los siguientes recursos:

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

Si bien Dataflow usa tanto trabajadores interrumpibles como permanentes para ejecutar su trabajo de FlexRS, se le factura una tarifa de descuento uniforme en comparación con los precios normales de Dataflow independientemente del tipo de trabajador. No se descuentan los recursos de Dataflow Shuffle y Persistent Disk.

Para obtener más información, consulta la página 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 posterior, o el SDK de Apache Beam para Python 2.12.0 o posterior.
  • Dataflow Shuffle Activar FlexRS también habilita Dataflow Shuffle automáticamente.

Opciones de canalización

Java

Para habilitar un trabajo de FlexRS, utilice la siguiente opción de canalización: --flexRSGoal=COST_OPTIMIZED, donde el objetivo de costo optimizado significa que el servicio de Dataflow elige cualquier recurso con descuento disponible.

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

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

El siguiente ejemplo muestra cómo agregar parámetros a tus parámetros de canalización regulares para usar FlexRS:

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

Si omite region, maxNumWorkers y workerMachineType, el servicio de Dataflow determina el valor predeterminado.

Python

Para habilitar un trabajo de FlexRS, utilice la siguiente opción de canalización: --flexrs_goal=COST_OPTIMIZED, donde el objetivo de costo optimizado significa que el servicio de Dataflow elige cualquier recurso con descuento disponible.

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

  • num_workers solo establece el número 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 el indicador zone para trabajos de FlexRS. El servicio de Dataflow selecciona la zona para todos los trabajos de FlexRS en la región que especificó con el parámetro region.
  • Debe seleccionar un extremo regional de Dataflow como region.
  • Debes usar el n1-standard-2 predeterminado o seleccionar n1-highmem-16 para tu machine_type.

El siguiente ejemplo muestra cómo agregar parámetros a tus parámetros de canalización regulares para usar FlexRS:

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

Si omite region, max_num_workers y machine_type, el servicio de Dataflow determina el valor predeterminado.

Cómo supervisar trabajos de FlexRS

Puede supervisar el estado de su trabajo de FlexRS en Google Cloud Console en dos lugares:

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

En la página Trabajos, los trabajos que aún no han comenzado muestran el estado En cola.

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

En la página Resumen de 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.