Utilizzo del ridimensionamento automatico con una politica personalizzata, ad esempio gruppi in Amazon EMR - 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 ridimensionamento automatico con una politica personalizzata, ad esempio gruppi in Amazon EMR

La scalabilità automatica con una policy personalizzata nelle versioni 4.0 e successive di Amazon EMR consente di scalare orizzontalmente e scalare in modo programmatico nei nodi principali e nei nodi task in base a CloudWatch una 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 Crea un cluster Amazon EMR con flotte di istanze o gruppi di istanze uniformi.

Nota

Per utilizzare la scalabilità automatica con una caratteristica di policy personalizzata in Amazon EMR, è necessario impostare true per il parametro VisibleToAllUsers quando si crea 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.

Puoi configurare le politiche di scalabilità con AWS Management Console AWS CLI, the o l'API Amazon EMR. Quando utilizzi l'API AWS CLI o Amazon EMR, specifichi la politica di scalabilità in formato JSON. Inoltre, se utilizzi l' AWS CLI API Amazon EMR, puoi specificare parametri personalizzati CloudWatch . I parametri personalizzati non sono selezionabili con la AWS Management Console. Quando crei inizialmente una policy di dimensionamento con la console, viene preconfigurata una policy predefinita adatta a molte applicazioni per facilitare l'avvio. È possibile eliminare o modificare le regole predefinite.

Anche se la scalabilità automatica consente di regolare la on-the-fly capacità del cluster EMR, è 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 IAM per la scalabilità automatica

La scalabilità automatica in Amazon EMR richiede un ruolo IAM con autorizzazioni per aggiungere e terminare le istanze quando vengono attivate le attività di dimensionamento. 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 policy gestita predefinita per le autorizzazioni,. AmazonElasticMapReduceforAutoScalingRole

Quando crei un cluster con una politica di scalabilità automatica con AWS CLI, devi innanzitutto assicurarti che esista il ruolo IAM predefinito o di disporre di un ruolo IAM personalizzato con una policy 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 si crea un ruolo di scalabilità automatica personalizzato per Amazon EMR, si consiglia di basare le policy di autorizzazione per il proprio ruolo personalizzato sulla base della policy gestita. Per ulteriori informazioni, consulta Configurazione dei ruoli di servizio IAM per le autorizzazioni di Amazon EMR per i servizi e risorse AWS.

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' EC2 istanza 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 per i cluster Amazon EMR.

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

Nota

I parametri elencati qui si basano AWS Management Console su Amazon EMR. Quando utilizzi l'API AWS CLI o Amazon EMR, sono disponibili opzioni di configurazione avanzate aggiuntive. Per ulteriori informazioni sulle opzioni avanzate, consulta SimpleScalingPolicyConfigurationAmazon 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 Amazon EMR.

Considerazioni e limitazioni

  • CloudWatch I parametri di Amazon sono fondamentali per il funzionamento della scalabilità automatica di Amazon EMR. 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 volumi EBS può causare problemi di dimensionamento gestito. Si consiglia di monitorare attentamente l'utilizzo del volume EBS per assicurarsi che il volume EBS sia inferiore al 90% di utilizzo. Consulta Archiviazione dell'istanza per informazioni su come specificare volumi EBS aggiuntivi.

  • Il ridimensionamento automatico con una politica personalizzata nelle versioni di Amazon EMR da 5.18 a 5.28 può comportare errori di scalabilità causati dalla mancanza intermittente di dati nei parametri di Amazon. CloudWatch Si consiglia di utilizzare le versioni più recenti di Amazon EMR per migliorare la scalabilità automatica. Se desideri utilizzare un rilascio di Amazon EMR compreso tra 5.18 e 5.28, puoi anche contattare il Supporto AWS per richiedere una patch.

AWS Management Console Utilizzo di 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 console Amazon EMR 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 console di Amazon EMR seleziona Create Cluster (Crea cluster), quindi Go to advanced options (Vai alle opzioni avanzate), scegli l'opzione per Step 1: Software and Steps (Fase 1: software e fasi) e procedi a Step 2: Hardware Configuration (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 parametri disponibili per Amazon EMR, consulta le CloudWatch metriche e le dimensioni di Amazon EMR nella Amazon User Guide. CloudWatch

Utilizzo di per configurare il AWS CLI ridimensionamento automatico

Puoi utilizzare AWS CLI i comandi per Amazon EMR per configurare la scalabilità automatica quando crei un cluster e quando crei un gruppo di istanze. È possibile utilizzare una sintassi abbreviata, specificando la configurazione JSON inline all'interno dei relativi comandi, oppure si può 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 basato su una policy di scalabilità automatica, è necessario utilizzare il comando --auto-scaling-role MyAutoScalingRole per specificare il ruolo IAM per la scalabilità automatica. 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 Amazon AWS Management Console EMR. 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 file JSON, instancegroupconfig.json, con la configurazione di un 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 essere parte di un cluster che utilizza il ruolo IAM di scalabilità automatica. L'esempio seguente utilizza un riferimento a un file JSON, autoscaleconfig.json, che specifica la configurazione automatica della policy di scalabilità automatica.

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." } } } }