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

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de políticas de reintento de trabajos

En Amazon, EMR en EKS las versiones 6.9.0 y posteriores, puedes establecer una política de reintentos para las ejecuciones de tus 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 reintentos, debe proporcionar un RetryPolicyConfiguration campo mediante. StartJobRunAPI 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

retryPolicyConfigurationsolo está disponible a partir de la AWS CLI versión 1.27.68. Para actualizarla AWS CLI a la última versión, consulte Instalación o actualización de la última versión de 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 tareas se facturará como otra ejecución de tareas y estará sujeta a los EKSprecios de EMR Amazon.

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.

  • Inhabilitar la política de reintentos para un trabajo: para deshabilitar una política de reintentos, establece el valor máximo de intentos en 1. retryPolicyConfiguration

    "retryPolicyConfiguration": { "maxAttempts": 1 }
  • maxAttempts Configúrelo para un trabajo dentro del rango válido: la StartJobRun llamada fallará si el maxAttempts valor 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 la tecla ListJobRunsy DescribeJobRunAPIs. 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 activar una política de reintentos, se genera un CloudWatch evento para cada controlador de trabajo que se cree. Para suscribirse a estos eventos, configure una regla de CloudWatch eventos 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 sobre cómo supervisar su trabajo con CloudWatch eventos, consulteSupervisa los trabajos con Amazon CloudWatch Events.

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.