Prioriza los tipos de VM con VMs flexibles

Las VMs flexibles son una función de Managed Service para Apache Spark que te permite especificar listas priorizadas de tipos de VM para los nodos trabajadores principales, secundarios y de la instancia principal de Managed Service para Apache Spark cuando creas un clúster de Managed Service para Apache Spark.

¿Por qué usar VMs flexibles?

Anteriormente, si un tipo de VM no estaba disponible cuando enviabas una solicitud de creación de clúster, la solicitud fallaba y debías actualizar tu solicitud, secuencia de comandos o código para especificar un tipo de VM "mejor siguiente". Este proceso de reenvío de solicitudes podía implicar varias iteraciones hasta que especificabas un tipo de VM que estaba disponible.

La función de VM flexible de Managed Service para Apache Spark ayuda a que tu solicitud de creación de clúster se realice correctamente seleccionando los tipos de VM de trabajador principal, secundario y de la instancia principal de tus listas de VM clasificadas y, luego, buscando zonas dentro de la región de clúster especificada con disponibilidad de los tipos de VM enumerados.

Limitaciones

No se pueden detener los clústeres que usan VMs flexibles detenidos.

Terminología

  • Tipo de VM: Es la familia, la capacidad de memoria y la cantidad de núcleos de CPU de una instancia de VM. Managed Service para Apache Spark admite el uso de tipos de VM predefinidos y personalizados.
  • Nodos trabajadores principales y de la instancia principal: Un clúster tiene un nodo de la instancia principal y al menos dos trabajadores principales.
  • Trabajadores secundarios: Los trabajadores secundarios son opcionales y no almacenan datos. Solo funcionan como nodos de procesamiento. Puedes usar trabajadores secundarios para escalar la capacidad de procesamiento sin escalar el almacenamiento. El tipo de trabajador secundario de VM flexible predeterminado es una VM Spot, que es un tipo interrumpible (consulta Trabajadores secundarios de Managed Service para Apache Spark).

Uso

  • Las VMs flexibles están disponibles en Managed Service para Apache Spark en Compute Engine 2.0.74+, 2.1.76+, 2.2.42+ y versiones de imagen posteriores .
  • La creación de clústeres con VMs flexibles de trabajador principal o de la instancia principal lleva más tiempo (aproximadamente 32 segundos adicionales).
  • El nombre del clúster no debe exceder los 45 caracteres.
  • Se requiere el mismo tipo de disco para todos los tipos de VM.
  • Puedes especificar hasta cinco listas de tipos de VM clasificadas, con hasta 10 tipos de VM en una lista. Para obtener más información, consulta Cómo solicitar VMs flexibles.
  • La creación de un clúster con VMs flexibles requiere el uso de la ubicación automática de zonas de Managed Service para Apache Spark, lo que permite que Managed Service para Apache Spark elija la zona que tiene la capacidad de satisfacer tus solicitudes de tipo de VM.
  • Si tu solicitud de creación de clúster incluye una política de ajuste de escala automático, las VMs flexibles pueden ser de diferentes familias de VM, pero deben tener la misma cantidad de memoria y recuento de núcleos.
  • Cuando aprovisiona VMs flexibles, Managed Service para Apache Spark consume las reservas disponibles "coincidentes" , pero no las reservas "específicas" (consulta Consume instancias reservadas). Los tipos de máquina que coinciden con las reservas se seleccionan primero dentro de una clasificación, seguidos de los tipos de VM con la mayor cantidad de CPUs.
  • Managed Service para Apache Spark aplica Google Cloud cuotas al aprovisionamiento de VM flexibles.
  • Aunque puedes especificar diferentes proporciones de CPU a memoria para los tipos de V de trabajador principal y secundario en un clúster, esto puede provocar una degradación del rendimiento porque la proporción más pequeña de CPU a memoria se usa como la unidad de contenedor más pequeña.
  • Si actualizas un clúster que se creó con VMs flexibles, Managed Service para Apache Spark selecciona y agrega trabajadores de las listas de VM flexibles que proporcionaste cuando creaste el clúster.

Cómo solicitar VMs flexibles

Puedes especificar VMs flexibles cuando creas un clúster de Managed Service para Apache Spark con la Google Cloud consola, Google Cloud CLI o la API de Managed Service para Apache Spark.

  • Puedes especificar hasta cinco listas de tipos de VM clasificadas, con hasta 10 tipos de VM en una lista. Las listas con la clasificación más baja tienen la prioridad más alta. De forma predeterminada, las listas de VM flexibles tienen una clasificación de 0. Dentro de una lista, Managed Service para Apache Spark prioriza los tipos de VM con reservas sin usar, seguidos de los tamaños de VM más grandes. Los tipos de VM dentro de una lista con la misma cantidad de CPU se tratan por igual.

Console

Para crear un clúster con VMs flexibles de trabajador secundario, haz lo siguiente:

  1. Abre la página Crea un clúster en Compute Engine de Managed Service para Apache Spark en la Google Cloud consola.
  2. Se selecciona el panel Configurar clúster con los campos completados con valores predeterminados. Puedes cambiar el nombre sugerido y la región del clúster, y realizar otros cambios. Asegúrate de que esté seleccionado Cualquiera como la Zona del clúster para permitir que la ubicación automática de zonas de Managed Service para Apache Spark elija la zona que tenga la mejor disponibilidad de los tipos de VM especificados en tus listas de VMs flexibles.
  3. Selecciona el panel Configurar nodos. En la sección Nodos trabajadores secundarios, especifica la cantidad y la interrumpibilidad de los trabajadores secundarios.
    • Haz clic en Agregar un trabajador secundario para cada clasificación de trabajadores secundarios y especifica uno o más tipos de máquina para incluir en cada clasificación.
  4. Después de confirmar y especificar los detalles del clúster en los paneles de creación del clúster, haz clic en Crear.

gcloud

Usa el gcloud dataproc clusters create comando para agregar varias marcas master-machine-types, worker-machine-types y secondary-worker-machine-types para especificar listas de VM flexibles clasificadas para los trabajadores principales, secundarios y de la instancia principal.

En el siguiente ejemplo, se solicitan tipos de VM de trabajador principal, secundario y de la instancia principal con las siguientes prioridades:

  • Aprovisiona VMs e2-standard-8 si están disponibles (clasificación 0); si las e2-standard-8 máquinas no están disponibles, aprovisiona VMs n2-standard-8 (clasificación 1).

Como no se especifica el tipo de trabajador secundario, se aprovisionarán VMs secundarias interrumpibles de instancia de máquina virtual interrumpible.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --master-machine-types="type=e2-standard-8,rank=0" \
    --master-machine-types="type=n2-standard-8,rank=1" \
    --num-workers=10 \
    --worker-machine-types="type=e2-standard-8,rank=0" \
    --worker-machine-types="type=n2-standard-8,rank=1" \
    --num-secondary-workers=4 \
    --secondary-worker-machine-types="type=e2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=n2-standard-8,rank=1"

Notas:

  • --zone="": La función de VM flexible requiere la ubicación automática de zonas de Managed Service para Apache Spark para permitir que Managed Service para Apache Spark elija la zona que tiene tus tipos de VM disponibles para su uso. Si pasas un valor vacío ("") a la marca --zone, se anulará cualquier selección de zona especificada en tu gcloud config list predeterminado.

API

Usa instanceFlexibilityPolicy.instanceSelectionList como parte de una solicitud clusters.create de la API de Managed Service para Apache Spark para especificar una lista clasificada de machineTypes para los trabajadores principales, secundarios y de la instancia principal.

Ejemplo: En el siguiente fragmento de JSON de un cuerpo de solicitud clusters.create se especifican los tipos de máquina de trabajador principal (masterConfig), trabajador principal (workerConfig) y trabajador secundario (secondaryWorkerConfig) con las clasificaciones 0 y 1.

{
  "projectId": "PROJECT_ID",
  "clusterName": "CLUSTER_NAME",
  "config": {
    "gceClusterConfig": {
      "zoneUri": ""
    },
    "masterConfig": {
      "numInstances": 1,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    },
    "workerConfig": {
      "numInstances": 10,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    },
    "secondaryWorkerConfig": {
      "numInstances": 4,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    }
  }
}

Anula las propiedades de la VM flexible

Managed Service para Apache Spark establece propiedades a nivel del clúster. Cuando creas un clúster que usa VMs flexibles, puedes anular las propiedades generadas por el sistema para los tipos de VM flexible de trabajador principal y secundario.

gcloud

Para anular propiedades cuando creas un clúster, usa la marca --properties con la siguiente sintaxis:

--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
  • ROLE puede ser primary_worker o secondary_worker.
  • Separa varias propiedades con una coma.

Ejecuta el siguiente comando gcloud dataproc clusters create para anular la cantidad de CPU virtuales que YARN asigna a NodeManager en los trabajadores secundarios. En este ejemplo, se establece el valor yarn.nodemanager.resource.cpu-vcores en yarn-site.xml en 6 para todas las VMs de trabajador secundario e2-standard-8 y n2-standard-8.

gcloud dataproc clusters create CLUSTER_NAME \
    --num-workers=10 \
    --num-secondary-workers=4 \
    --worker-machine-types="type=e2-standard-8,rank=0" \
    --worker-machine-types="type=n2-standard-8,rank=1" \
    --master-machine-types="type=e2-standard-8,rank=0" \
    --master-machine-types="type=n2-standard-8,rank=1" \
    --secondary-worker-machine-types="type=e2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=n2-standard-8,rank=1" \
    --region=us-central1 \
    --zone="" \
    --properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6,secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"

API

Para anular propiedades, defínelas en el campo properties del SoftwareConfig objeto en tu solicitud de creación de clúster.

Usa la siguiente sintaxis para la clave de propiedad:

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY
  • ROLE puede ser primary_worker o secondary_worker.

El siguiente objeto SoftwareConfig anula la cantidad de CPU virtuales que YARN asigna a NodeManager en los trabajadores secundarios. En este ejemplo, se establece el valor yarn.nodemanager.resource.cpu-vcores en 6 para todas las VMs de trabajador secundario e2-standard-8 y n2-standard-8.

{
  "imageVersion":"2.2.42",
  "properties": {
    "secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6",
    "secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6"
  }
}

¿Qué sigue?