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

Nella versione 6.9.0 e successive di Amazon EMR su EKS, puoi impostare una policy di ripetizione per le esecuzioni dei processi. 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 policy di ripetizione, fornisci un campo RetryPolicyConfiguration utilizzando l'API StartJobRun. 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://DOC-EXAMPLE-BUCKET-LOGGING" } } }'
Nota

retryPolicyConfiguration è disponibile solo dalla AWS CLI versione 1.27.68 in poi. Per aggiornare la AWS CLI alla versione più recente, consulta Installazione o aggiornamento della versione più recente della 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 esecuzione aggiuntiva del driver del processo verrà fatturata come un'ulteriore esecuzione del processo e sarà soggetta ai Prezzi di Amazon EMR su EKS.

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 policy di ripetizione per un processo: per disabilitare una policy di ripetizione, imposta il valore massimo di tentativi in retryPolicyConfiguration su 1.

    "retryPolicyConfiguration": { "maxAttempts": 1 }
  • Imposta maxAttempts per un processo nell'intervallo valido: la chiamata di StartJobRun avrà esito negativo se il valore maxAttempts 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 esecuzione di un processo con le API ListJobRuns e DescribeJobRun. 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

ListJobRun 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 abiliti una politicy di ripetizione, viene generato un evento CloudWatch per ogni driver del processo creato. Per eseguire la sottoscrizione a questi eventi, configura una regola evento CloudWatch con il comando seguente:

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 sulla modalità di monitoraggio di un processo con eventi CloudWatch, consulta Monitora 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 Eseguire un'applicazione Spark.