Utilizzo del dimensionamento automatico con una policy personalizzata per i gruppi di istanze - 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à.

Utilizzo del dimensionamento automatico con una policy personalizzata per i gruppi di istanze

Il ridimensionamento automatico con una politica personalizzata nelle EMR versioni di Amazon 4.0 e successive consente di scalare e scalare programmaticamente nei nodi principali e nei nodi task in base a una CloudWatch metrica e ad altri parametri specificati in una politica di scalabilità. Il dimensionamento automatico con una policy personalizzata è disponibile con la configurazione dei gruppi di istanze e non è disponibile quando si utilizzano i parchi istanze. Per ulteriori informazioni sui gruppi di istanze e i parchi di istanze, vedere Creazione di un cluster con parchi istanze o gruppi di istanze uniformi.

Nota

Per utilizzare il ridimensionamento automatico con una funzionalità di policy personalizzata in AmazonEMR, devi impostare true il VisibleToAllUsers parametro quando crei un cluster. Per ulteriori informazioni, consulta SetVisibleToAllUsers.

La policy di dimensionamento è parte di un gruppo di istanze di configurazione. È possibile specificare una policy durante la configurazione iniziale di un gruppo di istanze o modificando un gruppo di istanze in un cluster esistente, anche quando tale gruppo di istanze è attivo. Ogni gruppo di istanze in un cluster, eccetto il gruppo di istanze primarie, può avere la propria policy di dimensionamento, che consiste in regole di aumento e riduzione orizzontali. Le regole di scalabilità verticale e orizzontale possono essere configurate in modo indipendente, con parametri diversi per ciascuna regola.

È possibile configurare le politiche di scalabilità con il AWS Management Console, il AWS CLI, o Amazon EMRAPI. Quando si utilizza il AWS CLI o Amazon EMRAPI, specifichi il JSON formato della politica di scalabilità. Inoltre, quando con AWS CLI o Amazon EMRAPI, puoi specificare CloudWatch metriche personalizzate. Le metriche personalizzate non sono disponibili per la selezione con AWS Management Console. Quando crei inizialmente una politica di scalabilità con la console, per aiutarti a iniziare viene preconfigurata una politica predefinita adatta a molte applicazioni. È possibile eliminare o modificare le regole predefinite.

Anche se il ridimensionamento automatico consente di regolare la capacità del EMR cluster on-the-fly, è comunque necessario considerare i requisiti di base del carico di lavoro e pianificare le configurazioni dei nodi e dei gruppi di istanze. Per ulteriori informazioni, consulta Linee guida di configurazione del cluster.

Nota

Per la maggior parte dei carichi di lavoro, è auspicabile impostare regole di scalabilità orizzontale e verticale per ottimizzare l'utilizzo delle risorse. L'impostazione di una regola senza l'altra significa che è necessario ridimensionare manualmente il conteggio delle istanze dopo un'attività di dimensionamento. In altre parole, questo imposta una policy di scalabilità orizzontale o verticale automatica "unidirezionale" o con un reset manuale.

Creazione del ruolo per la scalabilità automatica IAM

Il ridimensionamento automatico in Amazon EMR richiede un IAM ruolo con le autorizzazioni per aggiungere e terminare istanze quando vengono attivate le attività di scalabilità. A questo scopo è disponibile un ruolo predefinito configurato con la policy di ruolo e di attendibilità più appropriata, ovvero EMR_AutoScaling_DefaultRole. Quando crei un cluster con una politica di scalabilità per la prima volta con AWS Management Console, Amazon EMR crea il ruolo predefinito e allega la politica gestita predefinita per le autorizzazioni,. AmazonElasticMapReduceforAutoScalingRole

Quando crei un cluster con una politica di scalabilità automatica con il AWS CLI, è innanzitutto necessario assicurarsi che esista il IAM ruolo predefinito o che si disponga di un IAM ruolo personalizzato con una politica allegata che fornisca le autorizzazioni appropriate. Per creare il ruolo predefinito, è possibile eseguire il comando create-default-roles prima di creare un cluster. È quindi possibile specificare l'opzione --auto-scaling-role EMR_AutoScaling_DefaultRole al momento della creazione di un cluster. In alternativa, è possibile creare un ruolo di scalabilità automatica personalizzato, quindi specificarlo quando si crea un cluster, ad esempio --auto-scaling-role MyEMRAutoScalingRole. Se crei un ruolo di scalabilità automatica personalizzato per AmazonEMR, ti consigliamo di basare le politiche di autorizzazione per il tuo ruolo personalizzato sulla base della politica gestita. Per ulteriori informazioni, consulta Configura i ruoli IAM di servizio per le EMR autorizzazioni Amazon per AWS servizi e risorse.

Comprensione delle regole di scalabilità automatica

Quando una regola di scalabilità orizzontale attiva un'attività di scalabilità per un gruppo di istanze, le istanze Amazon vengono aggiunte al gruppo di EC2 istanze in base alle tue regole. I nuovi nodi possono essere utilizzati da applicazioni come Apache Spark, Apache Hive e Presto non appena l'EC2istanza Amazon entra nello stato. InService È anche possibile impostare una regola di scalabilità verticale che chiude le istanze e rimuove i nodi. Per ulteriori informazioni sul ciclo di vita delle EC2 istanze Amazon con scalabilità automatica, consulta Auto Scaling lifecycle nella Amazon Auto Scaling User Guide. EC2

Puoi configurare il modo in cui un cluster termina le EC2 istanze Amazon. Puoi scegliere di terminare l'operazione entro il limite EC2 orario-istanza di Amazon per la fatturazione o al completamento dell'attività. Questa impostazione si applica sia alla scalabilità automatica che alle operazioni di ridimensionamento manuale. Per ulteriori informazioni su questa configurazione, consulta Opzioni di scalabilità verso il basso del cluster.

I seguenti parametri per ciascuna regola di una policy determinano il comportamento di scalabilità automatica.

Nota

I parametri qui elencati si basano su AWS Management Console per AmazonEMR. Quando si utilizza il AWS CLI o Amazon EMRAPI, sono disponibili opzioni di configurazione avanzate aggiuntive. Per ulteriori informazioni sulle opzioni avanzate, SimpleScalingPolicyConfigurationconsulta Amazon EMR API Reference.

  • Il numero massimo di istanze e istanze minime. Il vincolo Maximum instances specifica il numero massimo di istanze Amazon che possono essere incluse nel gruppo di EC2 istanze e si applica a tutte le regole di scalabilità orizzontale. Analogamente, il vincolo Minimum instances specifica il numero minimo di EC2 istanze Amazon e si applica a tutte le regole di scalabilità.

  • Il Rule name (Nome della regola), che deve essere univoco all'interno della policy.

  • La regolazione della scalabilità, che determina il numero di EC2 istanze da aggiungere (per le regole di scalabilità orizzontale) o terminare (per le regole di scalabilità orizzontale) durante l'attività di scalabilità attivata dalla regola.

  • La CloudWatch metrica, che viene controllata per rilevare una condizione di allarme.

  • Un operatore di confronto, utilizzato per confrontare la CloudWatch metrica con il valore Threshold e determinare una condizione di attivazione.

  • Un periodo di valutazione, con incrementi di cinque minuti, per il quale la CloudWatch metrica deve trovarsi in una condizione di attivazione prima che venga attivata l'attività di scalabilità.

  • Un Cooldown period (Periodo di attesa), in secondi, che determina la quantità di tempo che deve intercorrere tra un'attività di dimensionamento avviato da una regola e l'inizio dell'attività di dimensionamento successiva, indipendentemente dalla regola che la attiva. Quando un gruppo di istanze ha terminato un'attività di scalabilità e ha raggiunto lo stato successivo alla scalabilità, il periodo di cooldown offre l'opportunità di stabilizzare le CloudWatch metriche che potrebbero innescare le successive attività di scalabilità. Per ulteriori informazioni, consulta Auto Scaling cooldown nella Amazon Auto Scaling EC2 User Guide.

    AWS Management Console parametri delle regole di ridimensionamento automatico per AmazonEMR.

Considerazioni e limitazioni

  • Le CloudWatch metriche di Amazon sono fondamentali per il funzionamento della scalabilità EMR automatica di Amazon. Ti consigliamo di monitorare attentamente i CloudWatch parametri di Amazon per assicurarti che non manchino dati. Per ulteriori informazioni su come configurare gli CloudWatch allarmi Amazon per rilevare i parametri mancanti, consulta Using Amazon CloudWatch alarms.

  • L'utilizzo eccessivo dei EBS volumi può causare problemi di Managed Scaling. Si consiglia di monitorare attentamente l'utilizzo EBS del volume per assicurarsi che il EBS volume sia inferiore al 90% di utilizzo. Vedi Instance Storage per informazioni sulla specificazione di volumi aggiuntiviEBS.

  • Il ridimensionamento automatico con una politica personalizzata nelle EMR versioni di Amazon da 5.18 a 5.28 potrebbe comportare errori di scalabilità causati dalla mancanza intermittente di dati nei parametri di Amazon. CloudWatch Ti consigliamo di utilizzare le EMR versioni Amazon più recenti per una migliore scalabilità automatica. Puoi anche contattare AWS Support per una patch se devi usare una EMR versione di Amazon tra la 5.18 e la 5.28.

Utilizzo di AWS Management Console per configurare il ridimensionamento automatico

Quando crei un cluster, configuri una policy di dimensionamento per i gruppi di istanze mediante le opzioni di configurazione avanzate del cluster. È anche possibile creare o modificare una policy di dimensionamento per un gruppo di istanze attive modificando i gruppi di istanze nelle impostazioni Hardware di un cluster esistente.

  1. Passa alla nuova EMR console Amazon e seleziona Passa alla vecchia console dalla barra di navigazione laterale. Per ulteriori informazioni su cosa aspettarti quando passi alla vecchia console, consulta Utilizzo della vecchia console.

  2. Se stai creando un cluster, nella EMR console Amazon, seleziona Crea cluster, seleziona Vai alle opzioni avanzate, scegli le opzioni per la Fase 1: Software e passaggi, quindi vai alla Fase 2: Configurazione hardware.

    - o -

    Se si modifica un gruppo di istanze in un cluster in esecuzione, selezionare il cluster dall'elenco del cluster, quindi espandere la sezione Hardware.

  3. In Cluster scaling and provisioning option (Opzione di dimensionamento e provisioning del cluster), seleziona Enable cluster scaling (Abilita dimensionamento del cluster). Quindi selezionare Create a custom automatic scaling policy (Crea policy di dimensionamento automatico personalizzato).

    Nella tabella Custom automatic scaling policies (Policy di dimensionamento automatico personalizzato), fare clic sull'icona a forma di matita visualizzata nella riga del gruppo di istanze che si desidera configurare. Si apre la schermata delle regole di Auto Scaling.

  4. Digitare il Maximum instances (Numero massimo di istanze) che si desidera che il gruppo di istanze contenga dopo che è stato dimensionato orizzontalmente e digitare il Minimum instances (Numero di istanze minimo) che si desidera che il gruppo di istanze contenga dopo che è stato dimensionato verticalmente.

  5. Fare clic sulla matita per modificare i parametri della regola, fare clic sulla X per rimuovere una regola dalla policy e fare clic su Add rule (Aggiungi regola) per aggiungere ulteriori regole.

  6. Scegliere i parametri delle regole come descritto in precedenza in questo argomento. Per le descrizioni dei CloudWatch parametri disponibili per AmazonEMR, consulta i EMRparametri e le dimensioni di Amazon nella Amazon CloudWatch User Guide.

Utilizzo di AWS CLI per configurare il ridimensionamento automatico

È possibile utilizzare… AWS CLI comandi per Amazon EMR per configurare la scalabilità automatica quando crei un cluster e quando crei un gruppo di istanze. Puoi utilizzare una sintassi abbreviata, specificando la JSON configurazione in linea all'interno dei comandi pertinenti, oppure puoi fare riferimento a un file contenente la configurazione. JSON È inoltre possibile applicare una policy di scalabilità automatica a un gruppo di istanze esistente e rimuovere una policy di scalabilità automatica precedentemente applicata. Inoltre, è possibile recuperare i dettagli di una configurazione di policy di dimensionamento da un cluster in esecuzione.

Importante

Quando si crea un cluster con una politica di scalabilità automatica, è necessario utilizzare il --auto-scaling-role MyAutoScalingRole comando per specificare il ruolo per la scalabilità automatica. IAM Il ruolo predefinito è EMR_AutoScaling_DefaultRole e può essere creato con il comando create-default-roles. Il ruolo può essere aggiunto solo quando il cluster viene creato e non può essere aggiunto a un cluster esistente.

Per una descrizione dettagliata dei parametri disponibili durante la configurazione di una politica di scalabilità automatica, consulta PutAutoScalingPolicyAmazon EMR API Reference.

Creazione di un cluster con una policy di scalabilità automatica applicata a un gruppo di istanze

È possibile specificare una configurazione di scalabilità automatica all'interno dell'opzione --instance-groups del comando aws emr create-cluster. L'esempio seguente mostra un comando di creazione di cluster in cui viene fornita una policy di scalabilità automatica per il gruppo di istanze principale. Il comando crea una configurazione di scalabilità equivalente alla politica di scalabilità orizzontale predefinita che appare quando si crea una politica di scalabilità automatica con AWS Management Console per AmazonEMR. Per brevità, non viene mostrata una policy di scalabilità verticale. Non è consigliabile creare una regola di scalabilità orizzontale senza una regola di scalabilità verticale.

aws emr create-cluster --release-label emr-5.2.0 --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --auto-scaling-role EMR_AutoScaling_DefaultRole --instance-groups Name=MyMasterIG,InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1 'Name=MyCoreIG,InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=2,AutoScalingPolicy={Constraints={MinCapacity=2,MaxCapacity=10},Rules=[{Name=Default-scale-out,Description=Replicates the default scale-out rule in the console.,Action={SimpleScalingPolicyConfiguration={AdjustmentType=CHANGE_IN_CAPACITY,ScalingAdjustment=1,CoolDown=300}},Trigger={CloudWatchAlarmDefinition={ComparisonOperator=LESS_THAN,EvaluationPeriods=1,MetricName=YARNMemoryAvailablePercentage,Namespace=AWS/ElasticMapReduce,Period=300,Statistic=AVERAGE,Threshold=15,Unit=PERCENT,Dimensions=[{Key=JobFlowId,Value="${emr.clusterId}"}]}}}]}'

Il comando seguente illustra come utilizzare la riga di comando per fornire la definizione della policy di dimensionamento automatico come parte di un file di configurazione del gruppo di istanze denominato instancegroupconfig.json.

aws emr create-cluster --release-label emr-5.2.0 --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --instance-groups file://your/path/to/instancegroupconfig.json --auto-scaling-role EMR_AutoScaling_DefaultRole

Con il contenuto del file di configurazione come segue:

[ { "InstanceCount": 1, "Name": "MyMasterIG", "InstanceGroupType": "MASTER", "InstanceType": "m5.xlarge" }, { "InstanceCount": 2, "Name": "MyCoreIG", "InstanceGroupType": "CORE", "InstanceType": "m5.xlarge", "AutoScalingPolicy": { "Constraints": { "MinCapacity": 2, "MaxCapacity": 10 }, "Rules": [ { "Name": "Default-scale-out", "Description": "Replicates the default scale-out rule in the console for YARN memory.", "Action":{ "SimpleScalingPolicyConfiguration":{ "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": 1, "CoolDown": 300 } }, "Trigger":{ "CloudWatchAlarmDefinition":{ "ComparisonOperator": "LESS_THAN", "EvaluationPeriods": 1, "MetricName": "YARNMemoryAvailablePercentage", "Namespace": "AWS/ElasticMapReduce", "Period": 300, "Threshold": 15, "Statistic": "AVERAGE", "Unit": "PERCENT", "Dimensions":[ { "Key" : "JobFlowId", "Value" : "${emr.clusterId}" } ] } } } ] } } ]

Aggiunta di un gruppo di istanze con policy di scalabilità automatica a un cluster

Puoi specificare una configurazione della policy di dimensionamento utilizzando l'opzione --instance-groups con il comando add-instance-groups nello stesso modo in cui puoi farlo quando utilizzi create-cluster. L'esempio seguente utilizza un riferimento a un JSON fileinstancegroupconfig.json, con la configurazione del gruppo di istanze.

aws emr add-instance-groups --cluster-id j-1EKZ3TYEVF1S2 --instance-groups file://your/path/to/instancegroupconfig.json

Applicazione di una policy di scalabilità automatica a un gruppo di istanze esistenti o modifica di una policy applicata

Utilizzare il comando aws emr put-auto-scaling-policy per applicare una policy di scalabilità automatica a un gruppo di istanze esistente. Il gruppo di istanze deve far parte di un cluster che utilizza il IAM ruolo di scalabilità automatica. L'esempio seguente utilizza un riferimento a un JSON file che specifica la configurazione della politica di scalabilità automatica. autoscaleconfig.json

aws emr put-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instance-group-id ig-3PLUZBA6WLS07 --auto-scaling-policy file://your/path/to/autoscaleconfig.json

Il contenuto del file autoscaleconfig.json, che definisce la stessa regola di scalabilità orizzontale mostrata nell'esempio precedente, è mostrato di seguito.

{ "Constraints": { "MaxCapacity": 10, "MinCapacity": 2 }, "Rules": [{ "Action": { "SimpleScalingPolicyConfiguration": { "AdjustmentType": "CHANGE_IN_CAPACITY", "CoolDown": 300, "ScalingAdjustment": 1 } }, "Description": "Replicates the default scale-out rule in the console for YARN memory", "Name": "Default-scale-out", "Trigger": { "CloudWatchAlarmDefinition": { "ComparisonOperator": "LESS_THAN", "Dimensions": [{ "Key": "JobFlowId", "Value": "${emr.clusterID}" }], "EvaluationPeriods": 1, "MetricName": "YARNMemoryAvailablePercentage", "Namespace": "AWS/ElasticMapReduce", "Period": 300, "Statistic": "AVERAGE", "Threshold": 15, "Unit": "PERCENT" } } }] }

Rimozione di una policy di scalabilità automatica da un gruppo di istanze

aws emr remove-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instance-group-id ig-3PLUZBA6WLS07

Recupero di una configurazione di policy di scalabilità automatica

Il describe-cluster comando recupera la configurazione della politica nel blocco. InstanceGroup Ad esempio, il seguente comando recupera la configurazione per il cluster con un ID cluster pari a j-1CWOHP4PI30VJ.

aws emr describe-cluster --cluster-id j-1CWOHP4PI30VJ

Il comando produce il seguente esempio di output.

{ "Cluster": { "Configurations": [], "Id": "j-1CWOHP4PI30VJ", "NormalizedInstanceHours": 48, "Name": "Auto Scaling Cluster", "ReleaseLabel": "emr-5.2.0", "ServiceRole": "EMR_DefaultRole", "AutoTerminate": false, "TerminationProtected": true, "MasterPublicDnsName": "ec2-54-167-31-38.compute-1.amazonaws.com", "LogUri": "s3n://aws-logs-232939870606-us-east-1/elasticmapreduce/", "Ec2InstanceAttributes": { "Ec2KeyName": "performance", "AdditionalMasterSecurityGroups": [], "AdditionalSlaveSecurityGroups": [], "EmrManagedSlaveSecurityGroup": "sg-09fc9362", "Ec2AvailabilityZone": "us-east-1d", "EmrManagedMasterSecurityGroup": "sg-0bfc9360", "IamInstanceProfile": "EMR_EC2_DefaultRole" }, "Applications": [ { "Name": "Hadoop", "Version": "2.7.3" } ], "InstanceGroups": [ { "AutoScalingPolicy": { "Status": { "State": "ATTACHED", "StateChangeReason": { "Message": "" } }, "Constraints": { "MaxCapacity": 10, "MinCapacity": 2 }, "Rules": [ { "Name": "Default-scale-out", "Trigger": { "CloudWatchAlarmDefinition": { "MetricName": "YARNMemoryAvailablePercentage", "Unit": "PERCENT", "Namespace": "AWS/ElasticMapReduce", "Threshold": 15, "Dimensions": [ { "Key": "JobFlowId", "Value": "j-1CWOHP4PI30VJ" } ], "EvaluationPeriods": 1, "Period": 300, "ComparisonOperator": "LESS_THAN", "Statistic": "AVERAGE" } }, "Description": "", "Action": { "SimpleScalingPolicyConfiguration": { "CoolDown": 300, "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": 1 } } }, { "Name": "Default-scale-in", "Trigger": { "CloudWatchAlarmDefinition": { "MetricName": "YARNMemoryAvailablePercentage", "Unit": "PERCENT", "Namespace": "AWS/ElasticMapReduce", "Threshold": 75, "Dimensions": [ { "Key": "JobFlowId", "Value": "j-1CWOHP4PI30VJ" } ], "EvaluationPeriods": 1, "Period": 300, "ComparisonOperator": "GREATER_THAN", "Statistic": "AVERAGE" } }, "Description": "", "Action": { "SimpleScalingPolicyConfiguration": { "CoolDown": 300, "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": -1 } } } ] }, "Configurations": [], "InstanceType": "m5.xlarge", "Market": "ON_DEMAND", "Name": "Core - 2", "ShrinkPolicy": {}, "Status": { "Timeline": { "CreationDateTime": 1479413437.342, "ReadyDateTime": 1479413864.615 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "RunningInstanceCount": 2, "Id": "ig-3M16XBE8C3PH1", "InstanceGroupType": "CORE", "RequestedInstanceCount": 2, "EbsBlockDevices": [] }, { "Configurations": [], "Id": "ig-OP62I28NSE8M", "InstanceGroupType": "MASTER", "InstanceType": "m5.xlarge", "Market": "ON_DEMAND", "Name": "Master - 1", "ShrinkPolicy": {}, "EbsBlockDevices": [], "RequestedInstanceCount": 1, "Status": { "Timeline": { "CreationDateTime": 1479413437.342, "ReadyDateTime": 1479413752.088 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "RunningInstanceCount": 1 } ], "AutoScalingRole": "EMR_AutoScaling_DefaultRole", "Tags": [], "BootstrapActions": [], "Status": { "Timeline": { "CreationDateTime": 1479413437.339, "ReadyDateTime": 1479413863.666 }, "State": "WAITING", "StateChangeReason": { "Message": "Cluster ready after last step completed." } } } }