Maximiza la flexibilidad y la eficiencia de los clústeres y los trabajos
En esta página, se proporcionan prácticas recomendadas y estrategias de programación para ayudarte a diseñar clústeres de Managed Service para Apache Spark resilientes que maximicen la obtención de recursos en las regiones de Google Cloud , reduzcan los retrasos en el aprovisionamiento y aprovechen las optimizaciones de rendimiento y costos.
Descripción general de la obtención de recursos
Ejecutar trabajos en clústeres rígidos de Managed Service para Apache Spark crea puntos únicos de fallo que pueden provocar interrupciones en los trabajos y fallas en los clústeres y los trabajos debido a la falta de disponibilidad localizada o a retrasos en el aprovisionamiento.
El riesgo de que los recursos no estén disponibles es alto para los clústeres configurados con cualquiera de los siguientes antipatrones rígidos:
- Ubicación de zona fija: Codificar de forma fija una sola zona con la marca o el campo
zoneen lugar de permitir que AutoZone de Managed Service para Apache Spark coloque el clúster de forma dinámica en la zona óptima. Este antipatrón impide que la creación del clúster use recursos de procesamiento disponibles en zonas adyacentes. - Un solo tipo o generación de máquina por rol de nodo: Restringe los roles de nodo a una sola generación o tipo de máquina. Este antipatrón impide que el clúster recurra a alternativas.
- Muy pocas familias de máquinas en el rango de prioridad más alto: Se incluye solo una o dos familias de máquinas en el rango 0 de una política de VM flexible, incluso cuando se definen rangos de resguardo. Este antipatrón reduce el grupo de recursos del que Managed Service para Apache Spark puede extraer primero, lo que aumenta la probabilidad de recurrir a rangos más bajos o de retrasos en el aprovisionamiento.
- Escalamiento vertical con menos VMs grandes: Escala los clústeres de forma vertical para depender de una pequeña cantidad de formas de VM grandes. Este antipatrón restringe la flexibilidad de la programación.
- Creación de clústeres de todo o nada: Requiere que todos los nodos trabajadores se aprovisionen de forma simultánea en lugar de usar la creación parcial de clústeres vinculada con el escalado automático. Este antipatrón hace que falle la creación del clúster si no se puede asignar un nodo trabajador debido a la falta de disponibilidad temporal de recursos.
- Picos de programación: Se activan canalizaciones por lotes grandes durante las horas de mayor uso, lo que aumenta la contención regional.
La obtención de recursos es la práctica de diseñar trabajos para que sean flexibles en cuanto al hardware, multizonales y escalables. Si desvinculas los clústeres de las configuraciones rígidas y habilitas las reservas de familias de varias máquinas, puedes aumentar las tasas de éxito de creación, minimizar la latencia de inicio y alcanzar los ANS de forma coherente.
Recomendaciones para obtener recursos
Adopta las siguientes optimizaciones para mejorar la disponibilidad de recursos y la estabilidad de los trabajos:
Usa VMs flexibles
La función VM flexible te permite especificar una lista clasificada de tipos de VMs para los nodos trabajadores principales, secundarios y principales. Esto aumenta las tasas de éxito de creación, ya que evalúa los tipos de VM enumerados y selecciona automáticamente las zonas con capacidad disponible.
Recomendaciones: Usa VMs flexibles con anulaciones de disco, lo que te permite especificar diferentes tipos de discos, como Hyperdisk y disco persistente, para diferentes familias de máquinas candidatas en la misma política de clúster. También puedes combinar familias de máquinas Gen2 y Gen4 en una sola política para escalar trabajos en un grupo más amplio y omitir los límites de capacidad.
Especifica al menos tres familias de máquinas distintas en el rango 0. Managed Service para Apache Spark extrae primero de la lista de mayor prioridad (rango 0), por lo que un rango 0 amplio le da a la creación del clúster el grupo más grande de recursos candidatos antes de recurrir a rangos más bajos. Combinar las familias de 4ª y 2ª gen. en el rango 0 es la forma más eficaz de ampliar este grupo.
Para las cargas de trabajo de uso general, por ejemplo, los trabajos que se ejecutan en máquinas N2 o N2D, usa las siguientes clasificaciones:
- Rango 0: N4, N4D (con Hyperdisk Balanced), N2, N2D
- Rango 1: C4, C4D (con Hyperdisk balanceado) y C2D. Los SSD locales se pueden usar con C4 y C4D, pero, por lo general, 8 o 16 núcleos solo admiten de 1 a 2 SSD locales.
- Clasificación 2: E2 (rendimiento más bajo; usa solo si es necesario)
Por ejemplo, para los trabajos que usan n2d-standard-16, las clasificaciones son las siguientes:
- Rango 0:
n4-standard-16,n4d-standard-16,n2-standard-16,n2d-standard-16 - Puesto 1:
c4-standard-16,c4d-standard-16,c2d-standard-16 - Rango 2:
e2-standard-16
Debido a que N4 y N4D requieren Hyperdisk y N2 y N2D usan disco persistente, define
el rango 0 como dos selecciones de instancias que comparten el mismo rango, pero usan valores
diskConfig diferentes. Por ejemplo, las siguientes marcas gcloud dataproc clusters create definen la política de trabajador principal para el ejemplo anterior:
gcloud dataproc clusters create CLUSTER_NAME \
--region=REGION \
--zone="" \
--num-workers=NUM_WORKERS \
--worker-instance-selection='{"machineTypes":["n4-standard-16","n4d-standard-16"],"rank":0,"diskConfig":{"bootDiskType":"hyperdisk-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}' \
--worker-instance-selection='{"machineTypes":["n2-standard-16","n2d-standard-16"],"rank":0,"diskConfig":{"bootDiskType":"pd-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}' \
--worker-instance-selection='{"machineTypes":["c4-standard-16","c4d-standard-16"],"rank":1,"diskConfig":{"bootDiskType":"hyperdisk-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}' \
--worker-instance-selection='{"machineTypes":["c2d-standard-16"],"rank":1,"diskConfig":{"bootDiskType":"pd-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}' \
--worker-instance-selection='{"machineTypes":["e2-standard-16"],"rank":2,"diskConfig":{"bootDiskType":"pd-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}'
Cuando uses VMs flexibles, ten en cuenta los siguientes factores:
Compatibilidad con tipos de discos mixtos: Los tipos de máquinas Gen3 y Gen4 solo admiten tipos de discos Hyperdisk y no admiten tipos de Persistent Disk. Cuando combines Gen2 y Gen4, especifica un
diskConfigpara cada selección de instancia eninstanceFlexibilityPolicy. Para obtener más información, consulta Anulaciones de disco.- Usa Hyperdisk Balanced con los valores de referencia para las IOPS y la capacidad de procesamiento especificados en el rendimiento predeterminado de Hyperdisk Balanced.
Cuotas de recursos: Cuando defines una política de VM flexible con tipos de resguardo, Compute Engine verifica las cuotas de todos los tipos y discos candidatos en la región. Asegúrate de que tu proyecto tenga suficientes cuotas de procesamiento y disco asignadas para todos los elementos configurados.
Descuentos de Compute Engine: Aprovecha los descuentos por compromiso de uso (CUD) flexibles para aplicar ahorros basados en el gasto en varias familias de VM y regiones.
Precios: Usa la calculadora de precios deGoogle Cloud para comparar los costos de cada rango de tu política.
Para obtener plantillas de configuración y ejemplos de implementación, consulta los siguientes recursos:
Usa la ubicación de zona automática
Usa la ubicación de AutoZone para permitir que Managed Service para Apache Spark seleccione la mejor zona para aprovisionar recursos. Si usas redes de nube privada virtual (VPC) personalizadas, asegúrate de que la subred tenga suficientes direcciones IP en todas las zonas regionales.
Usa formas de máquina más pequeñas
Diseña trabajos para escalar de forma horizontal en tipos de máquinas más pequeños (4, 8 o 16 núcleos) en lugar de escalar de forma vertical con VMs más grandes. Los tamaños de VM más pequeños tienen una mayor disponibilidad en todas las zonas, lo que ayuda a evitar demoras en la creación.
- Revisa y rediseña los trabajos que usan tipos de máquinas grandes para los nodos controladores.
- Revisa los trabajos que solo ejecutan nodos controladores sin nodos trabajadores (clústeres de un solo nodo). Los trabajos que se ejecutan en clústeres de un solo nodo no pueden escalar verticalmente de forma dinámica y vincular la ejecución a un solo host físico.
Usar el escalado automático de clústeres
Usa el ajuste de escala automático del clúster con una cantidad máxima suficiente de instancias para administrar la capacidad de los trabajos con variabilidad de recursos (picos).
Usa la creación parcial de clústeres con el ajuste de escala automático
Usa la creación parcial de clústeres, que te permite especificar una cantidad mínima de trabajadores principales, con el ajuste de escala automático. Si el clúster comienza con menos trabajadores de los solicitados, el ajuste de escala automático puede agregar más trabajadores de forma dinámica una vez que los recursos estén disponibles.
Programa trabajos durante las horas de menor demanda
Programa trabajos durante las horas de menor demanda, como al mediodía y los fines de semana. Programa en
horarios no estándar, por ejemplo, a las 10:07 en lugar de las 10:00, para evitar
picos de programación.
¿Qué sigue?
- Obtén más información para priorizar los tipos de VM con VMs flexibles.
- Obtén información para configurar la ubicación de AutoZone.
- Obtén más información para crear un clúster parcial.
- Obtén información para configurar políticas de ajuste de escala automático.
- Obtén más información sobre los descuentos por compromiso de uso.
- Obtén más información sobre Managed Service para Apache Spark sin servidores.