En esta página se explica cómo habilitar la programación flexible de recursos (FlexRS) para flujos de procesamiento por lotes con autoescalado en Dataflow.
FlexRS reduce los costes del procesamiento por lotes mediante técnicas de programación avanzadas, el servicio Dataflow Shuffle y una combinación de instancias de máquina virtual (VM) interrumpibles y VMs estándar. Al ejecutar máquinas virtuales interrumpibles y máquinas virtuales estándar en paralelo, Dataflow mejora la experiencia del usuario cuando Compute Engine detiene las instancias de máquina virtual interrumpible durante un evento del sistema. FlexRS ayuda a asegurar que la canalización siga avanzando y que no pierdas el trabajo anterior cuando Compute Engine interrumpa tus VMs interrumpibles.
Los trabajos con FlexRS usan la función Dataflow Shuffle basada en servicios para unir y agrupar datos. Por lo tanto, las tareas de FlexRS no usan recursos de Persistent Disk para almacenar resultados de cálculos temporales. Al usar Dataflow Shuffle, FlexRS puede gestionar mejor la interrupción de una VM de trabajador, ya que el servicio Dataflow no tiene que redistribuir los datos a los trabajadores restantes. Cada trabajador de Dataflow sigue necesitando un pequeño volumen de disco persistente de 25 GB para almacenar la imagen de la máquina y los registros temporales.
Compatibilidad y limitaciones
- Admite flujos de procesamiento por lotes.
- Requiere el SDK de Apache Beam para Java 2.12.0 o una versión posterior, el SDK de Apache Beam para Python 2.12.0 o una versión posterior, o el SDK de Apache Beam para Go.
- Usa Dataflow Shuffle. Si activas FlexRS, se habilita automáticamente Dataflow Shuffle.
- No admite GPUs.
- No admite reservas de Compute Engine.
- Las tareas de FlexRS tienen un retraso en la programación. Por lo tanto, FlexRS es más adecuado para cargas de trabajo que no son urgentes, como las tareas diarias o semanales que se pueden completar en un periodo determinado.
Programación diferida
Cuando envías una tarea de FlexRS, el servicio Dataflow la coloca en una cola y la envía para que se ejecute en un plazo de seis horas desde que se crea. Dataflow busca el mejor momento para iniciar la tarea dentro de ese periodo, en función de la capacidad disponible y otros factores.
Cuando envías una tarea de FlexRS, el servicio Dataflow ejecuta los siguientes pasos:
- Devuelve un ID de trabajo inmediatamente después de enviar el trabajo.
- Realiza una validación inicial rápida.
Usa el resultado de la validación inicial para determinar el paso siguiente.
- Si se completa correctamente, pone en cola el trabajo para esperar al lanzamiento con retraso.
- En todos los demás casos, la tarea falla y el servicio Dataflow informa de los errores.
Si la validación se realiza correctamente, en la interfaz de monitorización de Dataflow, tu trabajo mostrará un ID y el estado
Queued
. Si la validación falla, el trabajo mostrará el estado Failed
.
Validación temprana
Las tareas de FlexRS no se inician inmediatamente después de enviarse. Durante la validación inicial, el servicio Dataflow verifica los parámetros de ejecución y los ajustes del entorno de Google Cloud Platform, como los roles de gestión de identidades y accesos y las configuraciones de red. Dataflow valida la tarea en la medida de lo posible en el momento de enviarla e informa de los posibles errores. No se te cobrará por este proceso de validación anticipada.
En el paso de validación inicial no se ejecuta el código de usuario. Debes verificar tu código para comprobar si hay problemas con Apache Beam Direct Runner o tareas que no sean de FlexRS. Si se producen cambios en el entorno Google Cloud entre la creación de la tarea y la programación aplazada de la tarea, es posible que la tarea se complete correctamente durante la validación inicial, pero que falle en el momento del lanzamiento.
Habilitar FlexRS
Cuando creas una tarea de FlexRS, se aplica una cuota de tareas simultáneas, incluso cuando la tarea tiene el estado En cola. El proceso de validación inicial no verifica ni reserva ninguna otra cuota. Por lo tanto, antes de habilitar FlexRS, compruebe que tiene suficientes Google Cloud cuotas de recursos del proyecto para iniciar su trabajo. Esto incluye cuota adicional para las CPUs preemptivas, las CPUs normales y las 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 suficientes recursos cuando se despliegue tu trabajo de FlexRS. De forma predeterminada, Dataflow selecciona máquinas virtuales interrumpibles para el 90 % de los trabajadores del grupo. Cuando planifiques la cuota de CPU, asegúrate de tener suficiente cuota de VMs preemptivas. Puedes solicitar explícitamente cuota de máquinas virtuales interrumpibles. De lo contrario, tu trabajo de FlexRS no tendrá los recursos necesarios para ejecutarse a tiempo.
Precios
Las tareas de FlexRS se facturan por los siguientes recursos:
- CPUs normales y prioritarias
- Recursos de memoria
- Recursos de Dataflow Shuffle
- 25 GB por trabajador de recursos de disco persistente
Aunque Dataflow usa trabajadores interrumpibles y normales para ejecutar tu tarea de FlexRS, se te factura una tarifa fija inferior a los precios normales de Dataflow, al margen del tipo de trabajador que se utilice. Los recursos de Dataflow Shuffle y Persistent Disk no tienen descuento.
Para obtener más información, consulta la página Detalles de los precios de Dataflow.
Opciones de flujo de procesamiento
Java
Para habilitar un trabajo de FlexRS, usa la siguiente opción de canalización:
--flexRSGoal=COST_OPTIMIZED
, donde el objetivo de optimización de costes significa que el servicio Dataflow elige cualquier recurso disponible con descuento.--flexRSGoal=SPEED_OPTIMIZED
, donde se optimiza para reducir el tiempo de ejecución. Si no se especifica, el campo--flexRSGoal
tiene el valor predeterminadoSPEED_OPTIMIZED
, que es lo mismo que omitir esta marca.
Los trabajos de FlexRS afectan a los siguientes parámetros de ejecución:
numWorkers
solo define el número inicial de trabajadores. Sin embargo, puedes establecermaxNumWorkers
por motivos de control de costes.- No puedes usar la opción
autoscalingAlgorithm
con los trabajos de FlexRS. - No puedes especificar la marca
zone
en las tareas de FlexRS. El servicio Dataflow selecciona la zona de todos los trabajos de FlexRS de la región que hayas especificado con el parámetroregion
. - Debes seleccionar una ubicación de Dataflow como
region
. - No puedes usar las series de máquinas M2, M3 ni H3 para tu
workerMachineType
.
En el siguiente ejemplo se muestra cómo añadir parámetros a los parámetros de tu flujo de trabajo habitual para usar FlexRS:
--flexRSGoal=COST_OPTIMIZED \
--region=europe-west1 \
--maxNumWorkers=10 \
--workerMachineType=n1-highmem-16
Si omite region
, maxNumWorkers
y workerMachineType
, el servicio Dataflow determinará 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 optimización de costes significa que el servicio Dataflow elige cualquier recurso disponible con descuento.--flexrs_goal=SPEED_OPTIMIZED
, donde se optimiza para reducir el tiempo de ejecución. Si no se especifica, el campo--flexrs_goal
tiene el valor predeterminadoSPEED_OPTIMIZED
, que es lo mismo que omitir esta marca.
Los trabajos de FlexRS afectan a los siguientes parámetros de ejecución:
num_workers
solo define el número inicial de trabajadores. Sin embargo, puedes establecermax_num_workers
por motivos de control de costes.- No puedes usar la opción
autoscalingAlgorithm
con los trabajos de FlexRS. - No puedes especificar la marca
zone
en las tareas de FlexRS. El servicio Dataflow selecciona la zona de todos los trabajos de FlexRS de la región que hayas especificado con el parámetroregion
. - Debes seleccionar una ubicación de Dataflow como
region
. - No puedes usar las series de máquinas M2, M3 ni H3 para tu
machine_type
.
En el siguiente ejemplo se muestra cómo añadir parámetros a los parámetros de tu flujo de trabajo habitual 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 Dataflow determinará el valor predeterminado.
Go
Para habilitar un trabajo de FlexRS, usa la siguiente opción de canalización:
--flexrs_goal=COST_OPTIMIZED
, donde el objetivo de optimización de costes significa que el servicio Dataflow elige cualquier recurso disponible con descuento.--flexrs_goal=SPEED_OPTIMIZED
, donde se optimiza para reducir el tiempo de ejecución. Si no se especifica, el campo--flexrs_goal
tiene el valor predeterminadoSPEED_OPTIMIZED
, que es lo mismo que omitir esta marca.
Los trabajos de FlexRS afectan a los siguientes parámetros de ejecución:
num_workers
solo define el número inicial de trabajadores. Sin embargo, puedes establecermax_num_workers
por motivos de control de costes.- No puedes usar la opción
autoscalingAlgorithm
con los trabajos de FlexRS. - No puedes especificar la marca
zone
en las tareas de FlexRS. El servicio Dataflow selecciona la zona de todos los trabajos de FlexRS de la región que hayas especificado con el parámetroregion
. - Debes seleccionar una ubicación de Dataflow como
region
. - No puedes usar las series de máquinas M2, M3 ni H3 para tu
worker_machine_type
.
En el siguiente ejemplo se muestra cómo añadir parámetros a los parámetros de tu flujo de trabajo habitual 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 Dataflow determinará el valor predeterminado.
Plantillas de Dataflow
Algunas plantillas de Dataflow no admiten la opción de canalización FlexRS. Como alternativa, usa la siguiente opción de la canalización.
--additional-experiments=flexible_resource_scheduling,shuffle_mode=service,delayed_launch
Monitorizar tareas de FlexRS
Puede monitorizar el estado de su trabajo de FlexRS en la Google Cloud consola de dos formas:
- La página Tareas que muestra todas tus tareas.
- La página Interfaz de monitorización de la tarea que has enviado.
En la página Trabajos, los trabajos que no se han iniciado tienen el estado En cola.

En la página Interfaz de monitorización, los trabajos que están en la cola muestran el mensaje "El gráfico aparecerá cuando comience la tarea" en la pestaña Gráfico de trabajo.
