Si las cargas de trabajo de su negocio fluctúan y usted conoce sus patrones, habilite el escalado automático mediante la configuración de reglas de escalado. E-MapReduce (EMR) agrega o elimina nodos de tarea automáticamente según los cambios en la carga de trabajo. Esto garantiza la finalización de los trabajos y reduce los costos. En este tema se describe cómo configurar políticas personalizadas de escalado automático.
Requisitos previos
Ya creó un clúster de tipo DataLake, Dataflow, OLAP, DataServing o Custom. Para obtener más información, consulte Create a cluster.
Ya creó un grupo de nodos de tarea que utiliza instancias pay-as-you-go o preemptible instances en el clúster. Para obtener más información, consulte Create a node group.
Límites
Para reducir los errores de escalado horizontal causados por inventario insuficiente de ECS, especifique varios tipos de instancia al crear un grupo de nodos. Seleccione hasta 10 tipos de instancia de ECS como alternativas. El sistema intenta aprovisionar las instancias comenzando por el primer tipo de su lista. Si un tipo de instancia no está disponible, el sistema pasa automáticamente al siguiente hasta completar la solicitud. Los tipos de instancia comprados pueden variar según los cambios en el inventario.
Solo los clústeres con el servicio YARN desplegado son compatibles con las reglas de escalado basadas en carga.
Notas de uso
Cuando se activa una regla, el grupo de nodos escala automáticamente según la política predefinida. Sin reglas, el escalado automático no ocurre.
El sistema busca automáticamente instancias que coincidan con los tipos seleccionados y las muestra como candidatas. Debe seleccionar entre estas opciones para habilitar el escalado con dichos tipos de instancia.
Si se activan varias reglas de escalado al mismo tiempo, el sistema las ejecuta según a continuación:
Las reglas de escalado horizontal tienen prioridad sobre las de escalado vertical.
Las reglas basadas en tiempo y en carga se ejecutan en el orden en que se activan.
En el escalado basado en carga, las reglas se ordenan según la hora de activación de la métrica.
En el escalado basado en carga, las reglas que utilizan la misma métrica se activan en el orden en que se crearon.
Procedimiento
Método 1: Configurar reglas para un clúster existente
-
Vaya a la página Auto Scaling.
Inicie sesión en la consola EMR on ECS.
En la barra de navegación superior, seleccione una región y un resource group según sus necesidades.
Haga clic en el nombre del clúster de destino.
En la página que aparece, haga clic en la pestaña Auto Scaling.
-
Configure las reglas de escalado.
En la pestaña Configure Auto Scaling, haga clic en Configure Auto Scaling RuleCustom Auto Scaling Rule, seleccione Reconfigure y luego haga clic en Edit en la columna Actions del grupo de nodos de destino.
-
En el panel Configure Auto Scaling, configure los parámetros.
-
Limits on Node Quantity of Current Node Group: controla la cantidad de nodos del grupo para evitar que aumente o disminuya demasiado durante el escalado automático. Para cambiar esta configuración, haga clic en Modify Limit.
Maximum Number of Instances: número máximo de nodos en el grupo actual. Al alcanzar este límite, el grupo deja de escalar horizontalmente.
Minimum Number of Instances: número mínimo de nodos en el grupo actual. Al alcanzar este límite, el grupo deja de escalar verticalmente.
-
Trigger Rule: muestra y permite configurar las reglas de escalado del grupo de nodos actual.
-
Escalado basado en tiempo
Si la carga de cómputo de su clúster tiene picos y valles predecibles, establezca una hora fija diaria, semanal o mensual para escalar horizontalmente una cantidad específica de nodos de tarea. Así se agregan recursos de cómputo cuando se necesitan, lo que ayuda a garantizar la finalización de los trabajos y a ahorrar costos. Las reglas de escalado se dividen en reglas de escalado horizontal y de escalado vertical.
ImportantePara evitar conflictos y garantizar un escalado fluido, no establezca las mismas horas de ejecución para las reglas de escalado horizontal y vertical.
Esta sección utiliza una regla de escalado horizontal como ejemplo.
Parámetro
Descripción
Scale-out type
Escalar horizontalmente por tiempo.
Rule Name
Los nombres de las reglas de escalado deben ser únicos dentro de un clúster.
Frequency
-
Execute Repeatedly: la acción de escalado se ejecuta a una hora específica de forma diaria, semanal o mensual.
-
Execute Only Once: la acción de escalado se ejecuta una sola vez a la hora especificada.
Execution Time
Hora en la que se ejecuta la regla.
Rule Expiration Time
Si establece Frequency en Execute Repeatedly, defina una hora de vencimiento para la regla. Después de ese momento, la regla deja de activar acciones de escalado.
Retry Time Range
Una acción de escalado podría no ejecutarse a la hora programada por diversos motivos. Si establece un intervalo de reintento, el sistema vuelve a intentar la acción cada 30 segundos dentro de ese rango hasta lograrlo. El valor puede ir de 0 a 3600 segundos.
Por ejemplo, si la acción A está programada pero no se ejecuta porque la acción B está en curso o en periodo de enfriamiento, el sistema reintenta la acción A cada 30 segundos durante el intervalo especificado. La acción se ejecuta en cuanto las condiciones lo permiten.
Nodes for each scale-out
Cantidad de nodos que se agregan cuando se activa la regla.
Best-effort Delivery
Se recomienda habilitar esta función. Una vez habilitada, el sistema entrega la mayor cantidad posible de nodos para garantizar la continuidad de las operaciones.
Por ejemplo, si configura el sistema para escalar horizontalmente 100 nodos todos los días a las 00:00 y solo hay 90 disponibles, el proceso normalmente fallaría. Con esta función habilitada, se entregan los 90 nodos disponibles.
-
-
Escalado basado en carga
NotaEsta función solo es compatible cuando el servicio YARN está desplegado en el clúster.
Si no puede predecir con exactitud los picos y valles de su carga de cómputo de big data, pero conoce bien su modelo de negocio, utilice el escalado basado en carga. Las reglas de escalado se dividen en reglas de escalado horizontal y de escalado vertical. Esta sección utiliza una regla de escalado horizontal como ejemplo.
Parámetro
Descripción
Scale-out type
Escalar horizontalmente por carga.
Rule Name
Los nombres de las reglas de escalado deben ser únicos dentro de un clúster.
Load Metric-based Trigger Conditions
Condiciones que activan la regla de escalado basada en carga. Seleccione una o más métricas de carga definidas por el sistema. Para elegir varias métricas, haga clic en Add Metric. Se incluyen a continuación:
-
Métrica de carga: nombre de una métrica de carga admitida por el sistema. Para obtener más información sobre la correspondencia entre las métricas de escalado automático de E-MapReduce y las del servicio YARN, consulte Mapping between E-MapReduce auto scaling metrics and YARN service metrics.
NotaLas métricas de carga admitidas varían según el tipo de clúster. Prevalecen las métricas reales que se muestran en la consola.
-
Método de agregación: método (promedio, máximo o mínimo) que se usa para evaluar la métrica de carga frente a un umbral durante un periodo estadístico. La regla se activa si el valor agregado alcanza el umbral.
Multi-metric Relationship
Seleccione All Metrics Meet the Conditions o Any Metric Meets the Condition.
Statistical Period
Ventana de tiempo para recopilar y agregar las métricas. Un periodo más corto hace que la regla sea más sensible a los cambios de carga. Seleccione un periodo estadístico razonable según las necesidades de su negocio.
Condition Repetition Threshold
Cantidad de periodos estadísticos consecutivos en los que la métrica debe superar el umbral antes de activar la regla. Esto evita el escalado provocado por picos breves.
Nodes for each scale-out
Cantidad de nodos que se agregan cuando se activa la regla.
Best-effort Delivery
Si habilita esta función, el sistema entrega la mayor cantidad posible de nodos. Evalúe si conviene habilitarla para el escalado basado en carga. A diferencia del escalado por tiempo, donde la capacidad necesaria se conoce, el escalado por carga reacciona a las métricas y un cumplimiento parcial podría no ser deseable.
Cooldown Time
Intervalo entre el inicio de una actividad de escalado automático y el momento en que puede comenzar otra. Durante este periodo, se ignoran todas las activaciones de escalado. Cuando termina el enfriamiento, el sistema solo responde a nuevas activaciones que cumplan las condiciones de escalado.
Este periodo de enfriamiento permite que la carga del sistema se estabilice después de un evento de escalado antes de iniciar otro.
Effective Time Period
Parámetro opcional que indica el rango de tiempo durante el cual una regla de escalado basada en carga está activa. De forma predeterminada, la regla funciona las 24 horas del día, los 7 días de la semana. Si establece un rango de tiempo, las actividades de escalado solo se activan dentro de ese periodo.
-
-
-
-
Una vez completada la configuración, haga clic en Save and Apply.
Cuando se cumplen las condiciones, se activan las actividades de escalado automático para el grupo de nodos.
Método 2: Configurar reglas durante la creación del clúster
Inicie sesión en la consola EMR on ECS.
En la barra de navegación superior, seleccione una región y un resource group según sus necesidades.
-
Haga clic en CREATE_CLUSTER. Para obtener más información sobre los parámetros, consulte Create a cluster.
NotaDebe agregar un grupo de nodos de tarea pay-as-you-go al clúster antes de configurar las reglas correspondientes.
-
Configure Cluster Scaling.
Seleccione Custom Auto Scaling Rule y haga clic en Edit en la columna Actions del grupo de nodos de destino.
En el panel Configure Auto Scaling, configure los parámetros. Para obtener más información, consulte Configure scaling rules.
Una vez completada la configuración, haga clic en Save and Apply.
-
Confirme el pedido y cree el clúster.
Después de crear el clúster, las actividades de escalado se activan para el grupo de nodos cuando se cumplen las condiciones de la regla.
Método 3: Configurar reglas con un SDK
Al crear un clúster o un grupo de nodos, configure reglas de escalado personalizadas para automatizar la creación y gestión de nodos. Para obtener más información, consulte Create a cluster y Create a node group. También configure reglas de escalado personalizadas para un grupo de nodos existente. Para obtener más información, consulte Create custom auto scaling policies.
A continuación se muestra un ejemplo de código Java para configurar una regla de escalado horizontal basada en carga.
Se recomienda usar el método STS, que es más seguro, para inicializar el cliente. Para obtener más información sobre los métodos de autenticación, consulte Manage access credentials.
// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* <b>description</b> :
* <p>Use an AccessKey pair to initialize the client.</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.emr20210320.Client createClient() throws Exception {
// Leaking source code may cause the AccessKey pair to be leaked, posing a threat to the security of all your resources. The following code is for reference only.
// We recommend that you use the more secure STS method for authentication.
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// For the endpoint, see https://api.alibabacloud.com/product/Emr.
config.endpoint = "emr.eu-central-1.aliyuncs.com";
return new com.aliyun.emr20210320.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.emr20210320.Client client = Sample.createClient();
com.aliyun.emr20210320.models.ScalingConstraints scalingConstraints = new com.aliyun.emr20210320.models.ScalingConstraints()
.setMaxCapacity(10)
.setMinCapacity(0);
com.aliyun.emr20210320.models.TriggerCondition scalingRule0MetricsTriggerTriggerCondition0 = new com.aliyun.emr20210320.models.TriggerCondition()
.setMetricName("yarn_resourcemanager_queue_AvailableVCoresPercentage")
.setStatistics("AVG")
.setComparisonOperator("LE")
.setThreshold(15D);
com.aliyun.emr20210320.models.TriggerCondition scalingRule0MetricsTriggerTriggerCondition1 = new com.aliyun.emr20210320.models.TriggerCondition()
.setMetricName("yarn_resourcemanager_queue_AvailableMBPercentage")
.setStatistics("AVG")
.setComparisonOperator("LE")
.setThreshold(15D);
com.aliyun.emr20210320.models.MetricsTrigger scalingRule0MetricsTrigger = new com.aliyun.emr20210320.models.MetricsTrigger()
.setTimeWindow(300)
.setEvaluationCount(1)
.setCoolDownInterval(300)
.setConditionLogicOperator("Or")
.setConditions(java.util.Arrays.asList(
scalingRule0MetricsTriggerTriggerCondition0,
scalingRule0MetricsTriggerTriggerCondition1
));
com.aliyun.emr20210320.models.ScalingRule scalingRule0 = new com.aliyun.emr20210320.models.ScalingRule()
.setRuleName("default")
.setTriggerType("METRICS_TRIGGER")
.setActivityType("SCALE_OUT")
.setAdjustmentValue(1)
.setMetricsTrigger(scalingRule0MetricsTrigger);
com.aliyun.emr20210320.models.PutAutoScalingPolicyRequest putAutoScalingPolicyRequest = new com.aliyun.emr20210320.models.PutAutoScalingPolicyRequest()
.setRegionId("cn-hangzhou")
.setClusterId("c-xxxx")
.setNodeGroupId("ng-xxx")
.setScalingRules(java.util.Arrays.asList(
scalingRule0
))
.setConstraints(scalingConstraints);
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// Print the API return values on your own.
client.putAutoScalingPolicyWithOptions(putAutoScalingPolicyRequest, runtime);
} catch (TeaException error) {
// The following code is for demonstration purposes only. We recommend that you handle exceptions with caution and do not ignore them in your project.
// Error message
System.out.println(error.getMessage());
// Diagnosis address
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception exception) {
TeaException error = new TeaException(exception.getMessage(), exception);
// The following code is for demonstration purposes only. We recommend that you handle exceptions with caution and do not ignore them in your project.
// Error message
System.out.println(error.getMessage());
// Diagnosis address
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}
Correspondencia entre las métricas de escalado automático de EMR y las de YARN
Para las métricas de escalado automático relacionadas con colas, especifique el parámetro queue_name. El valor predeterminado es root. Se admiten colas personalizadas.
Para las métricas de escalado automático relacionadas con particiones, debe especificar el parámetro partition_name.
|
Métrica de EMR |
Servicio |
Descripción |
|
yarn_resourcemanager_queue_AvailableVCores |
YARN |
Cantidad de núcleos de CPU virtuales disponibles en la cola especificada. |
|
yarn_resourcemanager_queue_PendingVCores |
YARN |
Cantidad de núcleos de CPU virtuales pendientes de asignación en la cola especificada. |
|
yarn_resourcemanager_queue_AllocatedVCores |
YARN |
Cantidad de núcleos de CPU virtuales asignados en la cola especificada. |
|
yarn_resourcemanager_queue_ReservedVCores |
YARN |
Cantidad de núcleos de CPU virtuales reservados en la cola especificada. |
|
yarn_resourcemanager_queue_AvailableMB |
YARN |
Cantidad de memoria disponible en la cola especificada. |
|
yarn_resourcemanager_queue_PendingMB |
YARN |
Cantidad de memoria pendiente de asignación en la cola especificada. |
|
yarn_resourcemanager_queue_AllocatedMB |
YARN |
Cantidad de memoria asignada en la cola especificada. |
|
yarn_resourcemanager_queue_ReservedMB |
YARN |
Cantidad de memoria reservada en la cola especificada. |
|
yarn_resourcemanager_queue_AppsRunning |
YARN |
Cantidad de aplicaciones en ejecución en la cola especificada. |
|
yarn_resourcemanager_queue_AppsPending |
YARN |
Cantidad de aplicaciones pendientes en la cola especificada. |
|
yarn_resourcemanager_queue_AppsKilled |
YARN |
Cantidad de aplicaciones finalizadas de forma abrupta en la cola especificada. |
|
yarn_resourcemanager_queue_AppsFailed |
YARN |
Cantidad de aplicaciones con errores en la cola especificada. |
|
yarn_resourcemanager_queue_AppsCompleted |
YARN |
Cantidad de aplicaciones completadas en la cola especificada. |
|
yarn_resourcemanager_queue_AppsSubmitted |
YARN |
Cantidad de aplicaciones enviadas en la cola especificada. |
|
yarn_resourcemanager_queue_AllocatedContainers |
YARN |
Cantidad de contenedores asignados en la cola especificada. |
|
yarn_resourcemanager_queue_PendingContainers |
YARN |
Cantidad de contenedores pendientes de asignación en la cola especificada. |
|
yarn_resourcemanager_queue_ReservedContainers |
YARN |
Cantidad de contenedores reservados en la cola especificada. |
|
yarn_resourcemanager_queue_AvailableMBPercentage |
YARN |
Porcentaje de recursos de memoria disponibles en la cola especificada. Nota
Esta métrica es compatible con EMR-3.43.0 y versiones posteriores, así como con EMR-5.9.0 y versiones posteriores. |
|
yarn_resourcemanager_queue_PendingContainersRatio |
YARN |
Proporción entre la cantidad de contenedores pendientes y la de contenedores asignados en la cola especificada. Nota
Esta métrica es compatible con EMR-3.43.0 y versiones posteriores, así como con EMR-5.9.0 y versiones posteriores. |
|
yarn_resourcemanager_queue_AvailableVCoresPercentage |
YARN |
Porcentaje de núcleos de CPU virtuales disponibles en la cola especificada. Nota
Esta métrica es compatible con EMR-3.43.0 y versiones posteriores, así como con EMR-5.9.0 y versiones posteriores. |
|
yarn_cluster_numContainersByPartition |
YARN |
Cantidad de contenedores en la partición especificada. El parámetro partition_name indica el nombre de la partición. Nota
Esta métrica es compatible con EMR-3.44.0 y versiones posteriores, así como con EMR-5.10.0 y versiones posteriores. |
|
yarn_cluster_usedMemoryMBByPartition |
YARN |
Uso de memoria de la partición especificada. El parámetro partition_name indica el nombre de la partición. Nota
Esta métrica es compatible con EMR-3.44.0 y versiones posteriores, así como con EMR-5.10.0 y versiones posteriores. |
|
yarn_cluster_availMemoryMBByPartition |
YARN |
Memoria disponible de la partición especificada. El parámetro partition_name indica el nombre de la partición. Nota
Esta métrica es compatible con EMR-3.44.0 y versiones posteriores, así como con EMR-5.10.0 y versiones posteriores. |
|
yarn_cluster_usedVirtualCoresByPartition |
YARN |
Cantidad de núcleos de CPU virtuales utilizados en la partición especificada. El parámetro partition_name indica el nombre de la partición. Nota
Esta métrica es compatible con EMR-3.44.0 y versiones posteriores, así como con EMR-5.10.0 y versiones posteriores. |
|
yarn_cluster_availableVirtualCoresByPartition |
YARN |
Cantidad de núcleos de CPU virtuales disponibles en la partición especificada. El parámetro partition_name indica el nombre de la partición. Nota
Esta métrica es compatible con EMR-3.44.0 y versiones posteriores, así como con EMR-5.10.0 y versiones posteriores. |