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à.
Gestione dei cluster virtuali
Un cluster virtuale è uno spazio dei nomi Kubernetes con cui è registrato Amazon EMR. Consente di creare, descrivere, elencare ed eliminare cluster virtuali. Non consumano risorse aggiuntive nel sistema. Un singolo cluster virtuale esegue la mappatura a un singolo spazio dei nomi Kubernetes. Data questa relazione, è possibile modellare cluster virtuali nello stesso modo in cui si modellano gli spazi dei nomi Kubernetes per soddisfare le proprie esigenze. Fai riferimento ai possibili casi d'uso nella documentazione della Panoramica sui concetti di Kubernetes
Per registrare Amazon EMR con uno spazio dei nomi Kubernetes in un cluster Amazon EKS, è necessario il nome del cluster EKS e lo spazio dei nomi impostato per l'esecuzione del carico di lavoro. I cluster registrati in Amazon EMR sono chiamati cluster virtuali perché non gestiscono l'elaborazione fisica o l'archiviazione, ma puntano a uno spazio dei nomi Kubernetes in cui è pianificato il carico di lavoro.
Nota
Prima di creare un cluster virtuale, è necessario innanzitutto completare i passaggi 1-8 indicati in Configurazione di Amazon EMR su EKS.
Argomenti
Creazione di un cluster virtuale
Esegui il comando seguente per creare un cluster virtuale registrando Amazon EMR con uno spazio dei nomi in un cluster EKS. Sostituiscilo virtual_cluster_name con un nome che fornisci per il tuo cluster virtuale. Sostituisci eks_cluster_name con il nome del cluster EKS. Sostituiscilo namespace_name con lo spazio dei nomi con cui desideri registrare Amazon EMR.
aws emr-containers create-virtual-cluster \ --namevirtual_cluster_name\ --container-provider '{ "id": "eks_cluster_name", "type": "EKS", "info": { "eksInfo": { "namespace": "namespace_name" } } }'
In alternativa, è possibile creare un file JSON che includa i parametri richiesti per il cluster virtuale, come illustrato nell'esempio seguente.
{ "name": "virtual_cluster_name", "containerProvider": { "type": "EKS", "id": "eks_cluster_name", "info": { "eksInfo": { "namespace": "namespace_name" } } } }
Successivamente, esegui il seguente comando create-virtual-cluster con il percorso del file JSON.
aws emr-containers create-virtual-cluster \ --cli-input-jsonfile://./create-virtual-cluster-request.json
Nota
Per convalidare la corretta creazione di un cluster virtuale, visualizza lo stato dei cluster virtuali utilizzando l'operazione list-virtual-clusters o andando alla pagina Virtual Clusters (Cluster virtuali) nella console di Amazon EMR.
Elenco dei cluster virtuali
Per visualizzare lo stato dei cluster virtuali, esegui il seguente comando.
aws emr-containers list-virtual-clusters
Descrizione di un cluster virtuale
Esegui il comando seguente per ottenere maggiori dettagli su un cluster virtuale, come ad esempio lo spazio dei nomi, lo stato e la data di registrazione. Sostituiscilo 123456 con l'ID del tuo cluster virtuale.
aws emr-containers describe-virtual-cluster --id123456
Eliminazione di un cluster virtuale
Esegui questo comando per eliminare un cluster virtuale. Sostituiscilo 123456 con l'ID del tuo cluster virtuale.
aws emr-containers delete-virtual-cluster --id123456
Stati dei cluster virtuali
Nella tabella seguente vengono descritti i quattro stati possibili di un cluster virtuale.
State |
Description |
|---|---|
|
|
Il cluster virtuale è nello stato RUNNING. |
|
|
È in corso la terminazione richiesta del cluster virtuale. |
|
|
La terminazione richiesta è stata completata. |
|
|
Terminazione richiesta non riuscita a causa di autorizzazioni insufficienti. |
Limiti di lavoro simultanei per i cluster virtuali
Puoi configurare i limiti di lavoro simultanei su un cluster virtuale Amazon EMR on EKS per controllare quante esecuzioni di lavoro vengono eseguite contemporaneamente e quante possono attendere in coda. Puoi impostare il limite di concorrenza (maxConcurrentJobRuns) e la profondità della coda () in modo indipendente, in modo da poter limitare le esecuzioni dei processi in esecuzione, le esecuzioni dei lavori in coda o entrambi. maxInQueueJobRuns Quando imposti questi limiti, l'StartJobRunAPI fornisce una contropressione a livello di cluster virtuale. Il processo viene eseguito oltre il limite di esecuzione, attendi in coda nello PENDING stato SUBMITTED or invece di iniziare immediatamente e, una volta che la coda è piena, rifiuta ulteriori invii. StartJobRun Ad esempio, se si imposta un cluster virtuale per consentire 500 esecuzioni di processi simultanee e 100 esecuzioni di processi in coda, il 101° invio in coda viene rifiutato ed è possibile ribilanciare il carico di lavoro su altri cluster virtuali sullo stesso cluster EKS o aggiungere capacità. Quando non è stato impostato un limite di concorrenza e la profondità della coda continua a crescere, in modo che le esecuzioni dei processi rimangano PENDING nello stato SUBMITTED or più a lungo prima di iniziare, può segnalare che il cluster EKS sottostante sta esaurendo le risorse di calcolo e non può pianificare nuovi pod abbastanza velocemente. In tal caso, indirizzate il carico di lavoro verso un altro cluster o aggiungete capacità.
I limiti di lavoro simultanei aggiungono un livello di controllo davanti allo scheduler di Kubernetes e alla funzionalità sul sito web di Kubernetes. ResourceQuota StartJobRun, il carico in eccesso viene messo in coda o rifiutato nell'API, il che protegge il cluster sottostante prima che i job lo raggiungano. Kubernetes impone ancora il limite effettivo di CPU e memoria sottostante.
Principali vantaggi dei limiti di lavoro simultanei
-
Previene il sovraccarico di noise neighbor: limita il numero di esecuzioni di job in esecuzione e in coda per cluster virtuale, in modo che un singolo cluster virtuale non possa monopolizzare il cluster EKS condiviso e causare errori di pianificazione di noisy-neighbor per altri cluster virtuali.
-
Abilita il traffic shaping: restituisce un rifiuto immediato quando la coda di un cluster virtuale è piena, in modo da poter reindirizzare gli invii ad altri cluster virtuali invece di sovraccaricare un singolo cluster virtuale.
-
Fornisce visibilità: emette le metriche per cluster virtuale e le
JobsInQueueCloudWatch metriche nelloAWS/EMRContainersspazio dei nomi per il conteggio delle esecuzioni dei job attiviJobsRunninge in coda ogni 5 minuti, il che fornisce un segnale sullo stato di salute per la pianificazione.
Guida introduttiva ai limiti di lavoro simultanei
È possibile configurare i limiti di lavoro simultanei con il schedulerConfiguration campo su un cluster virtuale. Questo campo accetta due parametri:
maxConcurrentJobRuns-
Il numero massimo di esecuzioni di processi che possono essere presenti nello
RUNNINGstato in qualsiasi momento. maxInQueueJobRuns-
Il numero massimo di esecuzioni di processi che possono trovarsi nello
SUBMITTEDstatoPENDINGor (profondità della coda) in qualsiasi momento.
AWS CLI
Per impostare dei limiti quando crei un cluster virtuale, specificalo schedulerConfiguration nella richiesta.
aws emr-containers create-virtual-cluster \ --namemy-virtual-cluster\ --container-provider '{ ... }' \ --scheduler-configuration '{ "maxConcurrentJobRuns": 500, "maxInQueueJobRuns": 100 }'
Per modificare i limiti su un cluster virtuale esistente, usa il update-virtual-cluster comando.
aws emr-containers update-virtual-cluster \ --idvirtual-cluster-id\ --scheduler-configuration '{ "maxConcurrentJobRuns": 500, "maxInQueueJobRuns": 100 }'
Per rimuovere i limiti da un cluster virtuale, passane uno vuotoschedulerConfiguration. Questo cancella la configurazione, quindi non si applicano limiti e il cluster virtuale torna al comportamento predefinito (illimitato). Nota che l'omissione schedulerConfiguration dalla richiesta lascia invece invariati i limiti esistenti: devi passare un oggetto vuoto per cancellarli.
aws emr-containers update-virtual-cluster \ --idvirtual-cluster-id\ --scheduler-configuration '{}'
Per visualizzare i limiti attuali e il numero di lavori in tempo reale, utilizzate il describe-virtual-cluster comando. La risposta include schedulerConfiguration sia il tuo che un SchedulerStatus oggetto con l'attuale activeJobRunCount einQueueJobRunCount.
Nota
Quando si invia un job eseguito a un cluster virtuale la cui coda è piena, StartJobRun restituisce un. ValidationException
Scelta dei valori per max e max ConcurrentJobRuns InQueueJobRuns
I limiti corretti dipendono da tre fattori: la quantità di lavoro che può eseguire contemporaneamente il cluster Amazon EKS, la mole di invii e il modo in cui desideri che il cluster virtuale si comporti quando è pieno. Usa le seguenti linee guida per scegliere un punto di partenza e poi perfezionarlo in base ai contatori attivi.
Impostazione del numero massimo ConcurrentJobRuns (slot attivi)
maxConcurrentJobRunsè un guardrail basato sulla granularità del lavoro e sul conteggio. Una stima approssimativa qui può proteggere il cluster Amazon EKS sottostante dal deterioramento dovuto al carico e può migliorare la disponibilità.
-
Inizia dividendo la capacità per il footprint per job. Basatelo su ciò che ogni processo richiede (driver, esecutori e sovraccarico di memoria) e sfruttate circa il 70-80% della capacità del vostro namespace per lasciare spazio all'overhead dei driver, allo scale-up dei nodi e ai burst.
-
Limita le dimensioni di ogni lavoro T-shirt (dimensionamento). Associa
spark.dynamicAllocation.maxExecutorse standardizza ogni lavoro su alcune dimensioni, ad esempio Small (20 esecutori), Medium (100) e Large (circa 500), in modo chemaxConcurrentJobRunsmoltiplicato per il limite massimo corrisponda prevedibilmente alla capacità invece di sovra-provisioning o underprovisioning per una media variabile. Per una matematica più chiara, indirizza ogni classe di dimensioni al proprio cluster virtuale. -
Sintonizza i contatori in tempo reale. Inizia in modo conservativo e aumenta gradualmente il valore mentre guardi
activeJobRunCounte laJobsRunningmetrica nelAWS/EMRContainersnamespace.
Impostazione del valore massimo InQueueJobRuns (profondità della coda)
maxInQueueJobRunscontrolla l'entità del backlog accettato dal cluster virtuale prima di iniziare a rifiutare gli invii. È un buffer di assorbimento delle esplosioni. Considera i seguenti fattori.
-
Profilo Burst: ridimensiona la coda in modo da assorbire le raffiche di invio previste superiori alla tua frequenza di esecuzione. Se le pipeline programmate eseguono più lavori contemporaneamente, una coda più profonda impedisce respingimenti falsi. Basate la profondità sulla dimensione prevista dell'esplosione anziché su un multiplo fisso di
maxConcurrentJobRuns, e verificatela rispetto al limite di tempo di drenaggio che segue. -
Tempo di attesa accettabile: i lavori in coda attendono che si liberi uno spazio disponibile. Il processo in fondo a una coda completa attende all'incirca la profondità della coda divisa per il throughput di completamento. Ad esempio, se i lavori terminano a N al minuto e la coda contiene Q, la coda attende circa Q divisa per N minuti. Mantieni questo valore all'interno del tuo SLA. Poiché i lavori memorizzati nel buffer falliscono dopo 30 minuti se non viene liberato alcuno slot, mantieni una dimensione sufficientemente
maxInQueueJobRunspiccola da far sì che una coda completa si esaurisca bene entro 30 minuti a una percentuale di completamento costante. Altrimenti, i lavori in coda scadono. -
Contropressione rispetto al buffering: una coda più profonda attenua le raffiche, ma ritarda il rifiuto completo della coda utilizzato per il traffic shaping e aumenta la latenza della coda. Una coda meno profonda si interrompe rapidamente, il che fornisce ai clienti un segnale tempestivo e utilizzabile per riprovare o indirizzare altrove. Scegli in base se preferisci bufferizzare il caricamento o eliminarlo e reindirizzarlo.
-
Comportamento del nuovo tentativo del client: quando la coda è piena, restituisce un.
StartJobRunValidationExceptionAssicurati che i mittenti gestiscano questa eccezione: riprova con il backoff o indirizza il carico di lavoro a un altro cluster virtuale. Imposta la profondità in modo che i rifiuti si verifichino solo in caso di sovraccarico effettivo, non durante le operazioni di routine.
Considerazioni sui limiti di lavoro simultanei
-
Per impostazione predefinita, non viene applicato alcun limite. I cluster virtuali e i carichi di lavoro esistenti non vengono modificati a meno che non vengano impostati esplicitamente.
schedulerConfiguration -
Poiché i contatori vengono gestiti in un sistema distribuito, a volte ci si può aspettare un piccolo delta transitorio dal valore reale. La riconciliazione interna corregge qualsiasi deriva.