Uso delle policy di ripetizione dei processi - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Uso delle policy di ripetizione dei processi

In EMR Amazon nelle EKS versioni 6.9.0 e successive, puoi impostare una politica di nuovi tentativi per le tue esecuzioni di processo. Con le policy di ripetizione, il pod driver di un processo viene riavviato in automatico in caso di errori o se viene eliminato. Ciò incrementa la resilienza agli errori dei processi di streaming Spark di lunga durata.

Impostazione della policy di ripetizione per un processo

Per configurare una politica di nuovo tentativo, fornisci un RetryPolicyConfiguration campo utilizzando il. StartJobRunAPI Di seguito è mostrato un esempio di 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è disponibile solo dalla versione AWS CLI 1.27.68 in poi. Per aggiornare il file AWS CLI alla versione più recente, vedere Installazione o aggiornamento della versione più recente di AWS CLI

Configura il campo maxAttempts con il numero massimo di volte per cui desideri che il pod driver del processo venga riavviato in caso di errore o di eliminazione. L'intervallo di esecuzione tra due tentativi di ripetizione del driver del processo è un intervallo di ripetizione esponenziale di (10 secondi, 20 secondi, 40 secondi...) limitato a 6 minuti, come descritto nella Documentazione di Kubernetes.

Nota

Ogni ulteriore esecuzione di un job driver verrà fatturata come un'altra esecuzione e sarà soggetta ad Amazon EMR per quanto riguarda EKS i prezzi.

Valori di configurazione della policy di ripetizione

  • Policy di ripetizione predefinita per un processo: StartJobRun include una policy di ripetizione impostata su 1 tentativo massimo per impostazione predefinita. Puoi configurare la policy di ripetizione in base alle tue necessità.

    Nota

    Se maxAttempts di retryPolicyConfiguration è impostato su 1, in caso di errori non verrà effettuato alcun nuovo tentativo di apertura del pod driver.

  • Disabilitazione della politica di nuovi tentativi per un lavoro: per disabilitare una politica di nuovi tentativi, imposta il valore massimo di tentativi su 1. retryPolicyConfiguration

    "retryPolicyConfiguration": { "maxAttempts": 1 }
  • Impostato maxAttempts per un lavoro all'interno dell'intervallo valido: la StartJobRun chiamata avrà esito negativo se il maxAttempts valore non rientra nell'intervallo valido. L'intervallo maxAttempts valido è compreso tra 1 e 2.147.483.647 (numero intero a 32 bit), l'intervallo supportato per l'impostazione della configurazione backOffLimit di Kubernetes. Per ulteriori informazioni, consulta Policy degli errori backoff dei pod nella Documentazione di Kubernetes. Se il valore maxAttempts non è valido, viene restituito il seguente messaggio di errore:

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

Recupero di uno stato della policy di ripetizione per un processo

È possibile visualizzare lo stato dei nuovi tentativi di lavoro con ListJobRunsand DescribeJobRunAPIs. Non appena richiedi un processo con una configurazione di policy di ripetizione abilitata, le risposte di ListJobRun e DescribeJobRun conterranno lo stato della policy di ripetizione nel campo RetryPolicyExecution. Inoltre, la risposta di DescribeJobRun conterrà il valore RetryPolicyConfiguration inserito nella richiesta StartJobRun del processo.

Esempi di risposte

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

Questi campi non saranno visibili quando la policy di ripetizione è disabilitata nel processo, come descritto di seguito in Valori di configurazione della policy di ripetizione.

Monitoraggio di un processo con una policy di ripetizione

Quando si abilita una politica di nuovi tentativi, viene generato un CloudWatch evento per ogni job driver creato. Per sottoscrivere questi eventi, impostate una regola di CloudWatch evento utilizzando il seguente comando:

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

L'evento restituirà informazioni su newDriverPodName, timestamp newDriverCreatedAt, previousDriverFailureMessage e currentAttemptCount sui driver dei processi. Questi eventi non verranno creati se la policy di ripetizione è disabilitata.

Per ulteriori informazioni su come monitorare il lavoro con CloudWatch gli eventi, consultaMonitora i lavori con Amazon CloudWatch Events.

Ricerca di log per driver ed executor

I nomi dei pod driver seguono il formato spark-<job id>-driver-<random-suffix>. Lo stesso valore random-suffix viene aggiunto ai nomi dei pod dell'executor generati dal driver. Utilizzando questo valore random-suffix, puoi trovare i log di un driver e degli executor associati. random-suffix è presente solo se la policy di ripetizione è abilitata per il processo; in caso contrario, random-suffix è assente.

Per ulteriori informazioni sulla modalità di configurazione di processi con la configurazione di monitoraggio per la creazione di log, consulta Esecuzione di un'applicazione Spark.