Cancelación de la ejecución de un trabajo de EMR sin servidor con período de gracia
En los sistemas de procesamiento de datos, las terminaciones abruptas pueden provocar un desperdicio de recursos, operaciones incompletas y posibles inconsistencias en los datos. Amazon EMR sin servidor le permite especificar un período de gracia al cancelar la ejecución de trabajos. Esta característica permite disponer de tiempo para limpiar adecuadamente y completar la tarea en curso antes de terminar el trabajo.
Al cancelar la ejecución de un trabajo, especifique un período de gracia (en segundos) mediante el parámetro shutdownGracePeriodInSeconds durante el cual el trabajo puede realizar operaciones de limpieza antes de su finalización definitiva. El comportamiento y los ajustes predeterminados varían entre los trabajos por lotes y en streaming.
Período de gracia para trabajos por lotes
Para los trabajos por lotes, EMR sin servidor le permite implementar operaciones de limpieza personalizadas que se ejecutan durante el período de gracia. Puede registrar estas operaciones de limpieza como parte del enlace de cierre de la JVM en el código de su aplicación.
Comportamiento predeterminado
El comportamiento predeterminado para el cierre es no tener ningún período de gracia. Consta de las dos siguientes acciones:
Terminación inmediata
Los recursos se liberan inmediatamente
Opciones de configuración
Puede especificar una configuración que dé como resultado un cierre estable:
Intervalo válido para el período de gracia de cierre: de 15 a 1800 segundos (opcional)
Terminación inmediata (sin período de gracia): 0 segundos
Habilite un cierre estable
Para implementar un cierre estable en los trabajos por lotes, siga estos pasos:
-
Agregue un enlace de apagado en el código de la aplicación que contenga una lógica de cierre personalizada.
-
Especifique un período de gracia al cancelar el trabajo para dar tiempo a que se ejecuten los enlaces añadidos anteriormente
Ejemplo
# Default (immediate termination) aws emr-serverless cancel-job-run \ --application-idAPPLICATION_ID\ --job-run-idJOB_RUN_ID# With 5-minute grace period aws emr-serverless cancel-job-run \ --application-idAPPLICATION_ID\ --job-run-idJOB_RUN_ID\ --shutdown-grace-period-in-seconds 300
Período de gracia para los trabajos de streaming
En Spark Structured Streaming, donde los cálculos implican leer o escribir en orígenes de datos externos, las interrupciones abruptas pueden provocar resultados no deseados. Los trabajos de streaming procesan los datos en microlotes y, si se interrumpen estas operaciones a mitad de camino, se puede duplicar el procesamiento en los siguientes intentos. Esto ocurre cuando no se ha escrito el último punto de control del microlote anterior, lo que provoca que los mismos datos se procesen de nuevo cuando se reinicie el trabajo de streaming. Este procesamiento duplicado no solo desperdicia recursos informáticos, sino que también puede afectar a las operaciones comerciales, por lo que es crucial evitar interrupciones abruptas.
EMR sin servidor proporciona soporte integrado para un cierre estable a través de un oyente de consultas de streaming. Esto garantiza la correcta finalización de los microlotes en curso antes de la finalización del trabajo. El servicio gestiona automáticamente el cierre estable entre los microlotes para las aplicaciones de streaming, lo que garantiza que el microlote actual complete el procesamiento, que los puntos de control se escriban correctamente y que el contexto de transmisión finalice de forma limpia sin ingerir nuevos datos durante el proceso de cierre.
Comportamiento predeterminado
El período de gracia de 120 segundos está activado de forma predeterminada.
El oyente de consultas de streaming integrado gestiona el cierre estable.
Opciones de configuración
Intervalo válido para el período de gracia de cierre: de 15 a 1800 segundos (opcional)
Terminación inmediata: 0 segundos
Habilite el cierre estable
Para implementar un cierre estable de los trabajos de streaming:
Especifique un período de gracia al cancelar el trabajo para dar tiempo a que se complete el microlote en curso.
Ejemplo
# Default graceful shutdown (120 seconds) aws emr-serverless cancel-job-run \ --application-idAPPLICATION_ID\ --job-run-idJOB_RUN_ID# Custom grace period (e.g. 300 seconds) aws emr-serverless cancel-job-run \ --application-idAPPLICATION_ID\ --job-run-idJOB_RUN_ID\ --shutdown-grace-period-in-seconds 300 # Immediate Termination aws emr-serverless cancel-job-run \ --application-idAPPLICATION_ID\ --job-run-idJOB_RUN_ID\ --shutdown-grace-period-in-seconds 0
Añada enlaces de cierre personalizados (opcional)
Si bien EMR sin servidor gestiona un cierre estable de forma predeterminada a través de su oyente de consultas de streaming integrado, puede implementar opcionalmente una lógica de cierre personalizada para las consultas de streaming individuales. EMR sin servidor registra su elegante oyente de cierre estable con prioridad 60 (mediante ShutdownHookManager). Como los enlaces de mayor prioridad se ejecutan primero, puede registrar sus operaciones de limpieza personalizadas con una prioridad superior a 60 para asegurarse de que se ejecuten antes de que comience el proceso de cierre de EMR sin servidor.
Para añadir un enlace personalizado, consulte el primer ejemplo de este tema, que muestra cómo añadir un enlace de cierre en el código de la aplicación. En este caso, 100 es la prioridad, que es mayor que 60. Por lo tanto, dicho enlace de cierre se ejecuta primero.
nota
Los enlaces de cierre personalizados son opcionales y no son necesarios para una funcionalidad de cierre estable, que EMR sin servidor gestiona automáticamente.
Cargos del período de gracia y duración del lote
Si se utiliza el valor predeterminado para el período de gracia (120 segundos):
Si la duración del lote es inferior a 120 segundos, solo se le cobrará el tiempo real necesario para completar el lote.
Si la duración del lote supera los 120 segundos, se le cobrará el período de gracia máximo (120 segundos), pero es posible que la consulta no se cierre correctamente, ya que finalizará de manera forzosa.
Para optimizar los costos y garantizar un cierre estable:
Para lotes con una duración superior a 120 segundos: considere aumentar el período de gracia para que coincida con la duración del lote
Para lotes con una duración inferior a 120 segundos: no es necesario ajustar el período de gracia, ya que solo se le cobrará por el tiempo de procesamiento real
Consideraciones
Comportamiento del período de gracia
El período de gracia proporciona tiempo para que se completen los enlaces de cierre registrados.
El trabajo finaliza tan pronto como finaliza el enlace de cierre, incluso si es mucho antes del período de gracia.
Si las operaciones de limpieza superan el período de gracia, el trabajo finalizará forzosamente.
Comportamiento de servicio
El cierre por período de gracia solo está disponible para los trabajos en estado EN EJECUCIÓN.
Las solicitudes de cancelación posteriores durante el estado CANCELANDO se ignoran.
-
Si EMR sin servidor no puede iniciar el cierre por período de gracia debido a errores internos del servicio:
El servicio se volverá a intentar durante un máximo de 2 minutos.
Si los reintentos no se realizan correctamente, el trabajo finalizará de manera forzosa.
Facturación
Los trabajos se facturan por los recursos informáticos utilizados hasta que el trabajo se cierre por completo, lo que incluye el tiempo transcurrido durante el período de gracia.