Annullamento dell'esecuzione di un processo EMR Serverless con periodo di grazia - 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à.

Annullamento dell'esecuzione di un processo EMR Serverless con periodo di grazia

Nei sistemi di elaborazione dati, le interruzioni improvvise possono portare a sprechi di risorse, operazioni incomplete e potenziali incongruenze nei dati. Amazon EMR Serverless consente di specificare un periodo di prova quando si annullano le esecuzioni dei job. Questa funzionalità consente di dedicare tempo alla pulizia e al completamento adeguati dei lavori in corso prima della cessazione del lavoro.

Quando si annulla l'esecuzione di un lavoro, è possibile specificare un periodo di grazia (in secondi) utilizzando il parametro shutdownGracePeriodInSeconds durante il quale il lavoro può eseguire le operazioni di pulizia prima dell'interruzione finale. Il comportamento e le impostazioni predefinite variano tra i processi in batch e quelli in streaming.

Periodo di grazia per i lavori in batch

Per i lavori in batch, EMR Serverless consente di implementare operazioni di pulizia personalizzate che vengono eseguite durante il periodo di prova. È possibile registrare queste operazioni di pulizia come parte dell'hook di spegnimento della JVM nel codice dell'applicazione.

Comportamento predefinito

Il comportamento predefinito per l'arresto è quello di non avere un periodo di tolleranza. Consiste nelle due azioni seguenti:

  • Cessazione immediata

  • Le risorse vengono rilasciate immediatamente

Opzioni di configurazione

È possibile specificare le impostazioni che comportano un arresto regolare:

  • Intervallo valido per il periodo di tolleranza dello spegnimento: 15-1800 secondi (opzionale)

  • Interruzione immediata (senza alcun periodo di grazia): 0 secondi

Abilita lo spegnimento graduale

Per implementare Graceful Shutdown per i lavori in batch, procedi nel seguente modo:

  1. Aggiungi shutdown hook nel codice dell'applicazione contenente una logica di spegnimento personalizzata.

    Example in Scala
    import org.apache.hadoop.util.ShutdownHookManager // Register shutdown hook with priority (second argument) // Higher priority hooks run first ShutdownHookManager.get().addShutdownHook(() => { logger.info("Performing cleanup operations...") }, 100)

    Uso di ShutdownHookManager

    Example in PySpark
    import atexit def cleanup(): # Your cleanup logic here print("Performing cleanup operations...") # Register the cleanup function atexit.register(cleanup)
  2. Specificate un periodo di tolleranza quando annullate il lavoro per consentire l'esecuzione degli hook aggiunti sopra

    Esempio

    # Default (immediate termination) aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID # With 5-minute grace period aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID \ --shutdown-grace-period-in-seconds 300

Periodo di grazia per i lavori di streaming

In Spark Structured Streaming, dove i calcoli implicano la lettura o la scrittura su fonti di dati esterne, arresti improvvisi possono portare a risultati indesiderati. I processi di streaming elaborano i dati in microbatch e l'interruzione di queste operazioni a metà processo può comportare un'elaborazione duplicata nei tentativi successivi. Ciò si verifica quando l'ultimo checkpoint del microbatch precedente non è stato scritto, causando la rielaborazione degli stessi dati al riavvio del processo di streaming. Tale elaborazione duplicata non solo comporta uno spreco di risorse informatiche, ma può anche influire sulle operazioni aziendali, il che rende fondamentale evitare arresti improvvisi.

EMR Serverless offre un supporto integrato per un corretto spegnimento tramite un listener di query in streaming. Ciò garantisce il corretto completamento dei microbatch in corso prima della fine del lavoro. Il servizio gestisce automaticamente lo shutdown corretto tra i microbatch per le applicazioni di streaming, assicurando che il microbatch corrente completi l'elaborazione, i checkpoint siano scritti correttamente e che il contesto di streaming venga terminato in modo corretto senza dover importare nuovi dati durante il processo di spegnimento.

Comportamento predefinito

  • Il periodo di grazia di 120 secondi è abilitato per impostazione predefinita.

  • Il listener di query in streaming integrato gestisce lo spegnimento automatico.

Opzioni di configurazione

  • Intervallo valido per il periodo di tolleranza dello spegnimento: 15-1800 secondi (opzionale)

  • Terminazione immediata: 0 secondi

Abilita Graceful Shutdown

Per implementare Graceful Shutdown per i lavori di streaming:

Specificate un periodo di tolleranza al momento dell'annullamento del lavoro per consentire il completamento del microbatch in corso.

Esempio

# Default graceful shutdown (120 seconds) aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID # Custom grace period (e.g. 300 seconds) aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID \ --shutdown-grace-period-in-seconds 300 # Immediate Termination aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID \ --shutdown-grace-period-in-seconds 0

Aggiungi ganci di spegnimento personalizzati (opzionale)

Sebbene EMR Serverless gestisca per impostazione predefinita lo spegnimento graduale tramite il suo listener di query di streaming integrato, è possibile implementare opzionalmente una logica di spegnimento personalizzata per singole query di streaming. EMR Serverless registra il suo grazioso listener di spegnimento con priorità 60 (utilizzo). ShutdownHookManager Poiché gli hook con priorità più alta vengono eseguiti per primi, è possibile registrare le operazioni di pulizia personalizzate con una priorità superiore a 60 per garantire che vengano eseguite prima dell'inizio del processo di spegnimento di EMR Serverless.

Per aggiungere un hook personalizzato, fate riferimento al primo esempio di questo argomento che mostra come aggiungere un hook di spegnimento nel codice dell'applicazione. Qui, 100 è la priorità, che è maggiore di 60. Quindi tale gancio di spegnimento verrà eseguito per primo.

Nota

Gli hook di spegnimento personalizzati sono opzionali e non necessari per una corretta funzionalità di spegnimento, che viene gestita automaticamente da EMR Serverless.

Costi del periodo di grazia e durata del Batch

Se viene utilizzato il valore predefinito per il periodo di grazia (120 secondi):

  • Se la durata del batch è inferiore a 120 secondi, ti verrà addebitato solo il tempo effettivo necessario per completare il batch.

  • Se la durata del batch supera i 120 secondi, ti verrà addebitato il periodo di prova massimo (120 secondi), ma la query potrebbe non essere chiusa correttamente poiché verrà interrotta forzatamente.

Per ottimizzare i costi e garantire un arresto corretto:

  • Per lotti di durata superiore a 120 secondi: valuta la possibilità di aumentare il periodo di tolleranza in modo che corrisponda alla durata del batch

  • Per lotti di durata inferiore a 120 secondi: non è necessario modificare il periodo di prova, in quanto ti verrà addebitato solo il tempo di elaborazione effettivo

Considerazioni

Comportamento del periodo di grazia

  • Il periodo di grazia prevede il completamento degli hook di spegnimento registrati.

  • Il lavoro termina non appena il gancio di spegnimento termina, anche se è ben prima del periodo di grazia.

  • Se le operazioni di pulizia superano il periodo di prova, il lavoro verrà interrotto con forza.

Comportamento del servizio

  • L'arresto durante il periodo di prova è disponibile solo per i lavori nello stato RUNNING.

  • Le successive richieste di annullamento durante lo stato CANCELLING vengono ignorate.

  • Se EMR Serverless non riesce ad avviare l'arresto del periodo di prova a causa di errori interni del servizio:

    • Il servizio riproverà per un massimo di 2 minuti.

    • Se i nuovi tentativi non hanno esito positivo, il processo verrà interrotto con forza.

Fatturazione

I lavori vengono fatturati in base alle risorse di elaborazione utilizzate fino alla chiusura completa del lavoro, incluso il tempo impiegato durante il periodo di prova.