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 las canalizaciones por lotes con ajuste de escala automático en Cloud Dataflow.

FlexRS

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

Los trabajos con FlexRS usan Cloud Dataflow Shuffle basado en servicios para unir y agrupar. Como resultado, los trabajos de FlexRS no utilizan recursos de Persistent Disk para almacenar resultados de cálculo temporales. El uso de Cloud Dataflow Shuffle permite que FlexRS controle mejor la interrupción de una VM de trabajador porque el servicio de Cloud Dataflow no tiene que redistribuir los datos a los demás trabajadores. Cada trabajador de Cloud Dataflow necesita un pequeño volumen de 25 GB 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 FlexRS, el servicio de Cloud 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. Cloud Dataflow encuentra el mejor momento para comenzar el trabajo dentro de ese intervalo de tiempo, en función de la capacidad disponible y de otros factores.

Cuando envías un trabajo de FlexRS, el servicio de Cloud 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 Cloud Dataflow informa los errores.

Por lo tanto, después de que envías un trabajo de FlexRS, tu trabajo muestra un ID y un Estado de En cola en la interfaz de supervisión de Cloud Dataflow en caso de éxito y, de lo contrario, un estado de error.

Validación temprana

Los trabajos de FlexRS no se inician inmediatamente después del envío. Durante la validación temprana, el servicio de Cloud Dataflow verifica los parámetros de ejecución y la configuración del entorno de Google Cloud Platform (GCP), como funciones de Cloud IAM y configuraciones de red. Cloud Dataflow valida el trabajo tanto como sea posible en el momento del envío de trabajos 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 con los trabajos de Direct Runner de Apache Beam o que no son de FlexRS. Si hay cambios en el entorno de GCP entre la creación del trabajo y la programación retrasada del trabajo, el trabajo puede tener éxito durante la validación temprana, pero aún falla en el 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, verifica que tienes suficientes cuotas de recursos del proyecto de GCP para iniciar tu 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. Cloud Dataflow selecciona VM interrumpibles para el 90% de los trabajadores en el 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 explícitamente una cuota de VM interrumpible; 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 Cloud Dataflow Shuffle
  • 25 GB por trabajador de recursos de Persistent Disk

Mientras que Cloud Dataflow usa trabajadores interrumpibles y regulares para ejecutar tu trabajo de FlexRS, se te cobrará una tarifa de descuento uniforme en comparación con los precios normales de Cloud Dataflow, independientemente del tipo de trabajador. No se descuentan los recursos de Cloud Dataflow Shuffle y Persistent Disk.

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

Requisitos de FlexRS

FlexRS requiere las siguientes características:

  • El SDK de Apache Beam para Java >= 2.12.0 o el SDK de Apache Beam para Python >= 2.12.0.
  • Cloud Dataflow Shuffle. Activar FlexRS también habilita automáticamente Cloud Dataflow Shuffle.

Nota: Por tiempo limitado, puedes habilitar FlexRS con el SDK de Apache Beam para Java >= 2.5.0, el SDK de Apache Beam para Python >= 2.5.0, o el SDK de Cloud Dataflow 2.5.0. La compatibilidad de FlexRS con estos SDK quedará obsoleta a partir del 1 de agosto de 2019.

Opciones de canalización

SDK de Apache Beam >= 2.12.0

Java

Para habilitar un trabajo de FlexRS, usa la siguiente opción de canalización: --flexRSGoal=COST_OPTIMIZED, donde el objetivo de costo optimizado significa que el servicio de Cloud 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 Cloud Dataflow selecciona la zona para todos los trabajos de FlexRS en la región que especificaste con el parámetro region.
  • Durante la versión Beta, debes utilizar el us-central1 predeterminado o especificar el extremo regional de europe-west1 como tu region.
  • Durante la versión Beta, debes utilizar 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 omites region, maxNumWorkers y workerMachineType, el servicio de Cloud Dataflow determina el valor predeterminado.

Python

Para habilitar un trabajo de FlexRS, usa la siguiente opción de canalización: --flexrs_goal=COST_OPTIMIZED, donde el objetivo de costo optimizado significa que el servicio de Cloud 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 Cloud Dataflow selecciona la zona para todos los trabajos de FlexRS en la región que especificaste con el parámetro region.
  • Durante la versión Beta, debes utilizar el us-central1 predeterminado o especificar el extremo regional de europe-west1 como tu region.
  • Durante la versión Beta, debes utilizar 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 omites region, max_num_workers y machine_type, el servicio de Cloud Dataflow determina el valor predeterminado.

SDK de Apache Beam >= 2.5.0 o SDK de Cloud Dataflow 2.5.0

Java

Precaución: Durante un tiempo limitado, puedes usar FlexRS con el SDK de Apache Beam para Java >= 2.5.0 o el SDK de Cloud Dataflow 2.5.0. La compatibilidad de FlexRS con estos SDK quedará obsoleta a partir del 1 de agosto de 2019.

No especifiques el parámetro de flexRSGoal. Para habilitar temporalmente un trabajo de FlexRS con el SDK de Apache Beam para Java >= 2.5.0 o con el SDK de Cloud Dataflow 2.5.0, usa las siguientes opciones de canalización:

--experiments=flexible_resource_scheduling \
--experiments=shuffle_mode=service

Si escribes incorrectamente los parámetros de flexible_resource_scheduling o shuffle_mode=service, el servicio de Cloud Dataflow no informa un mensaje de error.

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 Cloud Dataflow selecciona la zona para todos los trabajos de FlexRS en la región que especificaste con el parámetro region.
  • Durante la versión Beta, debes utilizar el us-central1 predeterminado o especificar el extremo regional de europe-west1 como tu region.
  • Durante la versión Beta, debes utilizar 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:

--experiments=flexible_resource_scheduling \
--experiments=shuffle_mode=service \
--region=europe-west1 \
--maxNumWorkers=10 \
--workerMachineType=n1-highmem-16

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

Python

Precaución: Durante un tiempo limitado, puedes usar FlexRS con el SDK de Apache Beam para Python >= 2.5.0 o el SDK de Cloud Dataflow 2.5.0. La compatibilidad de FlexRS con estos SDK quedará obsoleta a partir del 1 de agosto de 2019.

No especifiques el parámetro de flexrs_goal. Para habilitar temporalmente un trabajo de FlexRS con el SDK de Apache Beam para Python >= 2.5.0 o con el SDK de Cloud Dataflow 2.5.0, usa las siguientes opciones de canalización:

--experiments=flexible_resource_scheduling \
--experiments=shuffle_mode=service

Si escribes incorrectamente los parámetros de flexible_resource_scheduling o shuffle_mode=service, el servicio de Cloud Dataflow no informa un mensaje de error.

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 Cloud Dataflow selecciona la zona para todos los trabajos de FlexRS en la región que especificaste con el parámetro region.
  • Durante la versión Beta, debes utilizar el us-central1 predeterminado o especificar el extremo regional de europe-west1 como tu region.
  • Durante la versión Beta, debes utilizar 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:

--experiments=flexible_resource_scheduling \
--experiments=shuffle_mode=service \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16

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

Cómo supervisar trabajos de FlexRS

Puedes supervisar el estado de tu trabajo de FlexRS en Google Cloud Platform 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 Cloud Dataflow en GCP Console con estados de En ejecución, En cola, Con errores y Con éxito.

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.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.