Uso de políticas de reintento de trabajos - Amazon EMR

Uso de políticas de reintento de trabajos

En Amazon EMR en EKS 6.9.0 y versiones posteriores, puede establecer una política de reintento para las ejecuciones de sus trabajos. Las políticas de reintento hacen que un pod controlador de tareas se reinicie automáticamente si se elimina o se produce un error. Esto hace que los trabajos de streaming Spark de larga duración sean más resilientes a errores.

Establecer una política de reintento para un trabajo

Para configurar una política de reintento, debe proporcionar un campo RetryPolicyConfiguration mediante la API StartJobRun. A continuación, se muestra un ejemplo de retryPolicyConfiguration:

aws emr-containers start-job-run \ --virtual-cluster-id cluster_id \ --name sample-job-name \ --execution-role-arn execution-role-arn \ --release-label emr-6.9.0-latest \ --job-driver '{ "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/src/main/python/pi.py", "entryPointArguments": [ "2" ], "sparkSubmitParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1" } }' \ --retry-policy-configuration '{ "maxAttempts": 5 }' \ --configuration-overrides '{ "monitoringConfiguration": { "cloudWatchMonitoringConfiguration": { "logGroupName": "my_log_group_name", "logStreamNamePrefix": "my_log_stream_prefix" }, "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-logging-bucket" } } }'
nota

retryPolicyConfiguration solo está disponible a partir de la versión 1.27.68 de la AWS CLI. Para actualizar a la versión de la AWS CLI más reciente, consulte Instalar o actualizar la última versión de la AWS CLI

Configure el campo maxAttempts con el número máximo de veces que desee que se reinicie el pod controlador de trabajos en caso de que se elimine o se produzca un error. El intervalo de ejecución entre dos intentos de reintento del controlador de tareas es un intervalo de reintento exponencial de (10 segundos, 20 segundos, 40 segundos...) limitado a 6 minutos, tal como se describe en la documentación de Kubernetes.

nota

Cada ejecución adicional del controlador de trabajos se facturará como otra ejecución de tareas y estará sujeta a los precios de Amazon EMR en EKS.

Vuelva a intentar los valores de configuración de la política

  • Política de reintento predeterminada para un trabajo: StartJobRun incluye una política de reintento establecida en un intento máximo de forma predeterminada. Puede configurar la política de reintento como desee.

    nota

    Si maxAttempts de retryPolicyConfiguration se establece en 1, significa que no se llevará a cabo ningún reintento para que aparezca el pod controlador en caso de error.

  • Deshabilitar la política de reintento de un trabajo: para deshabilitar una política de reintento, establezca el valor máximo de intentos de RetryPolicyConfiguration en 1.

    "retryPolicyConfiguration": { "maxAttempts": 1 }
  • Defina maxAttempts para un trabajo dentro del rango válido: la llamada de StartJobRun fallará si el valor maxAttempts está fuera del rango válido. El rango válido de maxAttempts es de 1 a 2 147 483 647 (entero de 32 bits), el rango admitido por los ajustes de configuración de Kubernetes backOffLimit. Para obtener más información, consulte Política de retroceso de errores de pods en la documentación de Kubernetes. Si el valor maxAttempts no es válido, se devuelve el siguiente mensaje de error:

    { "message": "Retry policy configuration's parameter value of maxAttempts is invalid" }

Recuperación del estado de una política de reintento de un trabajo

Puede ver el estado de los reintentos de un trabajo con las API ListJobRuns y DescribeJobRun. Una vez que solicite un trabajo con una configuración de política de reintento habilitada, las respuestas ListJobRun y DescribeJobRun contendrán el estado de la política de reintentos en el campo RetryPolicyExecution. Además, la respuesta DescribeJobRun contendrá la RetryPolicyConfiguration que se ingresó en la solicitud de StartJobRun del trabajo.

Respuestas de ejemplo

ListJobRuns response
{ "jobRuns": [ ... ... "retryPolicyExecution" : { "currentAttemptCount": 2 } ... ... ] }
DescribeJobRun response
{ ... ... "retryPolicyConfiguration": { "maxAttempts": 5 }, "retryPolicyExecution" : { "currentAttemptCount": 2 }, ... ... }

Estos campos no estarán visibles cuando la política de reintento esté deshabilitada en el trabajo, tal como se describe en Vuelva a intentar los valores de configuración de la política.

Supervisión de un trabajo con una política de reintento

Al habilitar una política de reintento, se genera un evento de CloudWatch para cada controlador de trabajo que se crea. Para suscribirse a estos eventos, configure una regla de eventos de CloudWatch mediante el siguiente comando:

aws events put-rule \ --name cwe-test \ --event-pattern '{"detail-type": ["EMR Job Run New Driver Attempt"]}'

El evento devolverá información sobre el newDriverPodName, la marca de tiempo de newDriverCreatedAt, previousDriverFailureMessage y los currentAttemptCount de los controladores del trabajo. Estos eventos no se crearán si la política de reintento está deshabilitada.

Para obtener más información acerca de cómo supervisar su trabajo con los eventos de CloudWatch, consulte Supervisión de trabajos con Eventos de Amazon CloudWatch.

Búsqueda de registros para controladores y ejecutores

Los nombres de los pods controladores siguen el formato spark-<job id>-driver-<random-suffix>. El mismo random-suffix se agrega a los nombres de los pods ejecutores que genera el controlador. Al usar este random-suffix, puede buscar los registros de un controlador y sus ejecutores asociados. El random-suffix solo está presente si la política de reintento está habilitada para el trabajo; de lo contrario, el random-suffix está ausente.

Para obtener más información sobre cómo configurar los trabajos con la configuración de supervisión del registro, consulte Ejecutar una aplicación de Spark.