Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Come posso risolvere i problemi relativi ad attività bloccate nello stato In coda nel mio ambiente Amazon MWAA?
Sto eseguendo flussi di lavoro in Flusso di lavoro gestito da Amazon per Apache Airflow (Amazon MWAA), ma le mie attività sono bloccate nello stato In coda. Le attività non passano allo stato In esecuzione.
Breve descrizione
Le attività in Amazon MWAA possono rimanere bloccate nello stato In coda per i seguenti motivi:
- L'ambiente ha raggiunto il numero massimo di attività concorrenti.
- Le Opzioni di configurazione Airflow nell'ambiente MWAA non sono impostate correttamente.
- La memoria o la CPU non sono sufficienti per le attività nel worker.
Un'attività rimane bloccata nello stato In coda quando si verifica un'interruzione nel normale flusso di lavoro di esecuzione dell'attività. Il worker Apache Airflow può diventare sovraccarico e non rispondere entro un determinato periodo di tempo. Quando ciò accade, l'attività rimane nella coda Amazon Simple Queue Service (Amazon SQS) fino a che il timeout di visibilità predefinito non viene raggiunto in 12 ore. Se hai configurato la ripetizione, il pianificatore di Apache Airflow ritenta l'operazione.
Risoluzione
Prima di procedere con la risoluzione dei problemi, stabilisci se le risorse dell'ambiente raggiungono il carico massimo o se sono presenti problemi relativi ai worker. Utilizza Amazon CloudWatch per controllare i log dei worker dell'ambiente e le metriche CPUUtilization e MemoryUtilization.
Verifica se l'ambiente ha raggiunto il numero massimo di attività concorrenti
L'ambiente raggiunge il numero massimo di attività concorrenti quando il pool Amazon MWAA è pieno e l'ambiente aggiunge altre attività alla coda. Per risolvere il problema, aumenta il numero di worker per l'ambiente o modifica la dimensione della classe di ambiente.
Per determinare se devi aumentare il numero di worker nell'ambiente, completa i seguenti passaggi:
- Apri la console CloudWatch.
- Nel pannello di navigazione, scegli Metriche, quindi seleziona Tutte le metriche.
- Scegli la scheda Sfoglia, seleziona la Regione AWS in cui si trova l'ambiente, quindi cerca il suo nome.
- Nella sezione Namespace AWS, scegli MWAA < Coda.
- Seleziona QueuedTasks e RunningTasks.
- Nel grafico individua il periodo di tempo con la maggiore attività, quindi aggiungi il conteggio totale di entrambe le metriche.
Nota: la somma è il numero totale di attività per questo periodo di tempo. - Determina il livello di concorrenza predefinito dell'ambiente.
Nota: ad esempio, l'ambiente mw1.small ha cinque attività concorrenti per ogni worker. - Dividi il numero totale di attività per il livello predefinito di attività concorrenti.
- Sottrai il valore Numero massimo di worker impostato per l'ambiente.
Nota: se il risultato è un numero positivo, devi aggiungere worker per completare il numero corrente di attività concorrenti.
Per aumentare il numero di worker per l'ambiente o modificare la dimensione della classe di ambiente, completa i seguenti passaggi:
- Apri la console Amazon MWAA.
- Seleziona l'ambiente, scegli Modifica, quindi Avanti.
- Nella sezione Classe di ambiente, intraprendi le seguenti azioni:
Aumenta il valore Numero massimo di worker in base a quanto calcolato nel passaggio 9.
Imposta anche Numero minimo di worker sul valore richiesto dal carico di lavoro nei periodi di attività minima.
Nota: puoi aggiungere al massimo solo 25 worker per l'ambiente. Se hai bisogno di più di 25 worker, in Classe di ambiente scegli una dimensione maggiore. - Se aumenti la dimensione della classe di ambiente, imposta anche il numero massimo e minimo di worker richiesti dal carico di lavoro.
Se ottimizzi il numero di worker e questo non è ancora sufficiente per il carico di lavoro, intraprendi le seguenti azioni:
- Utilizza operatori differibili al posto dei sensori Apache Airflow. Per ulteriori informazioni, consulta Deferrable Operators & Triggers (Operatori e trigger differibili) sul sito web Apache Airflow.
- Scagliona gli orari di inizio dell'esecuzione e mantieni piccoli intervalli tra i tempi pianificati (schedule_interval) per i grafi aciclici diretti (DAG). Pianifica i DAG in blocchi.
- Se utilizzi un codice personalizzato che invoca e monitora una funzione esterna specifica, dividi in due l'attività. Crea un'attività per l'invocazione e l'altra come operatore differibile per monitorare la funzione.
Controlla se le opzioni di configurazione Airflow sono impostate in modo non corretto
Per verificare le opzioni di configurazione Airflow, completa i seguenti passaggi:
- Apri la console MWAA.
- Scegli Ambienti, quindi seleziona l'ambiente MWAA.
- Nella sezione Opzioni di configurazione Airflow, seleziona core.parallelism e celery.worker_autoscale.
Se core.parallelism è impostato, rimuovi qualsiasi opzione core.parallelism impostata manualmente in modo che Amazon MWAA possa impostare dinamicamente la configurazione. Amazon MWAA calcola la configurazione dinamica predefinita in base alla formula (maxWorkers * maxCeleryWorkers) / schedulers * 1.5. Se utilizzi il dimensionamento automatico e imposti manualmente il valore, possono verificarsi problemi di sottoutilizzo durante il carico massimo.
Confronta il valore dell'opzione di configurazione celery.worker_autoscale con il livello di concorrenza predefinito. Se non hai modificato l'opzione di configurazione celery.worker_autoscale, moltiplica il livello di concorrenza predefinito per il numero massimo di worker impostato per l'ambiente.
Se celery.worker_autoscale è involontariamente inferiore al valore predefinito, utilizza le metriche di CloudWatch per monitorare l'utilizzo della CPU e della memoria dei worker. Se i valori delle risorse sono al 20-60% durante il carico massimo, aumenta il valore celery.worker_autoscale. Utilizza piccoli incrementi in modo da non sovrautilizzare i container di worker.
Se non hai impostato il valore celery.worker_autoscale o hai mantenuto il valore predefinito, monitora l'utilizzo della CPU e della memoria dei worker. Se le metriche per l'ambiente sono troppo alte, riduci il valore celery.worker_autoscale. Se l'ambiente è al 20-60% durante il carico massimo, puoi aumentare il valore massimo.
Verifica se i worker danno esito negativo a causa di un sovrautilizzo
Quando ogni worker Celery su un container di worker MWAA ha un'attività ed è al massimo carico, i worker possono essere sovrautilizzati e dare esito negativo.
I worker Celery su un container di worker MWAA eseguono il polling delle attività quando non sono utilizzati. A seconda della complessità delle attività in esecuzione e del codice che le definisce, i worker possono risultare sovraccarichi e subire blocchi. Ciò avviene quando ogni worker Celery in un container di worker MWAA ha un'attività ed è sottoposto al massimo carico.
Per stabilire se i worker sono sovrautilizzati o meno, completa i passaggi seguenti:
- Apri la console CloudWatch.
- Nel pannello di navigazione, scegli Metriche, quindi seleziona Tutte le metriche.
- Scegli la scheda Sfoglia, seleziona la Regione AWS in cui si trova l'ambiente, quindi cerca il suo nome.
- Nella sezione Namespace AWS, scegli MWAA < Coda, quindi seleziona ApproximateAgeOfOldestTask.
- Espandi l'intervallo di tempo in modo che corrisponda a un periodo di 4-6 settimane.
Nota: i picchi di 40.000 secondi o più mostrano che le attività sono bloccate nella coda Amazon SQS e che i worker danno esito negativo a causa di un sovrautilizzo. Inoltre, il worker Celery non può scrivere l'errore nel buffer degli eventi perché il sistema ne ha forzato la chiusura.
Puoi anche utilizzare CloudWatch Insights per avvisarti quando le attività sono bloccate nella coda Amazon SQS.
Per creare l'avviso, completa i seguenti passaggi:
-
Apri la console CloudWatch.
-
Nel pannello di navigazione, scegli Log, quindi scegli Logs Insights.
-
Specifica un intervallo di tempo di 4-6 settimane.
-
Nel menu Criteri di selezione, seleziona il gruppo di log del pianificatore per l'ambiente MWAA.
-
Inserisci la seguente query nella relativa sezione:
fields _@timestamp_, _@message_, _@logStream_, _@log_ | filter _@message_ like /Was the task terminated externally?/ | sort _@timestamp_ desc | limit 10000Di seguito è riportato un esempio di log che il pianificatore invia quando riceve un'attività precedentemente in coda:
[[34m**2024-01-17T11:30:18.936+0000**[0m] [34mscheduler_job_runner.py:[0m771 ERROR[0m - Executor reports task instance <TaskInstance: dag_name.task_name manual__202X-XX-XXTXX:XX:XX.758774+00:00 [queued]> finished (failed) although the task says it's queued. (Info: None) Was the task terminated externally?[0m
Riduci i carichi di lavoro ad alta intensità di calcolo o memoria
Nota: analizza attentamente il seguente elenco. Non tutti i fattori sono applicabili a tutti i casi d'uso. Per ulteriore assistenza, contatta il Supporto AWS.
Per ridurre i carichi di lavoro ad alta intensità di calcolo o memoria nell'ambiente, intraprendi le seguenti azioni:
- Assicurati che il codice DAG non contenga script di estrazione, trasformazione e caricamento (ETL), istruzioni per lo spostamento dei dati, pipeline AI o ML o altri carichi di lavoro ad alta intensità di calcolo o memoria.
- Segui le best practice di Apache Airflow quando scrivi codice DAG. Assicurati che il codice di primo livello sia ridotto al minimo e che importi solo ciò che è necessario. Per ulteriori informazioni, consulta Best practices (Best practice) sul sito web Apache Airflow.
- Ottimizza il codice DAG. Profila l'ingombro di memoria di qualsiasi sensore, hook o operatore personalizzato, esteso o ereditato, per individuare potenziali aree problematiche.
Se le risorse sono ancora sovrautilizzate, intraprendi le seguenti azioni:
- Riduci il valore predefinito impostato per celery.worker_autoscale. Riduci il valore celery.worker_autoscale di un paio di unità, quindi monitora l'ambiente per 24-48 ore. Continua a ridurre il valore celery.worker_autoscale fino a raggiungere un livello ottimale.
Nota: quando riduci il valore celery.worker_autoscale, il pool di attività complessivo si riduce e più elementi rimangono nello stato In coda. Per ovviare al problema, devi anche aumentare il numero minimo di worker. - Inoltre, completa nuovamente i passaggi nella sezione Verifica se l'ambiente ha raggiunto il numero massimo di attività concorrenti per ridurre le attività concorrenti per worker.
Informazioni correlate
Ottimizzazione delle prestazioni per Apache Airflow su Amazon MWAA
Configuration reference (Riferimento per la configurazione) sul sito web Apache Airflow
- Argomenti
- Application Integration
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata un anno fa