Prioriza los tipos de VM con VMs flexibles

Las VMs flexibles son una función de Dataproc que te permite especificar listas priorizadas de tipos de VM para los nodos principales, primarios y trabajadores secundarios de Dataproc cuando creas un clúster de Dataproc.

¿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 "óptimo siguiente". Este proceso de reenvío de solicitudes podría implicar varias iteraciones hasta que especifiques un tipo de VM que esté disponible.

La función de VMs flexibles de Dataproc ayuda a que tu solicitud de creación de clúster se realice correctamente, ya que selecciona los tipos de VM principal, secundaria y de trabajador de tus listas de VMs clasificadas y, luego, busca zonas dentro de la región del clúster especificada con disponibilidad de los tipos de VM enumerados.

Terminología

  • Tipo de VM: La familia, la capacidad de memoria y la cantidad de núcleos de CPU de una instancia de VM. Dataproc admite el uso de tipos de VM predefinidos y personalizados.
  • Nodos principales y trabajadores principales: Un clúster tiene un nodo 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 el 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 Dataproc).

Uso

  • Las VMs flexibles están disponibles en Dataproc 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 maestro tarda más (aproximadamente 32 segundos adicionales).
  • El nombre del clúster no debe superar los 45 caracteres.
  • Se requiere el mismo tipo de disco para todos los tipos de VM.
  • Puedes especificar hasta cinco listas clasificadas de tipos de VM, con hasta 10 tipos de VM en cada 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 de zona automática de Dataproc, que permite que Dataproc 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 la misma cantidad de núcleos.
  • Cuando aprovisiona VMs flexibles, Dataproc consume las reservas disponibles "que coincidan", pero no las reservas "específicas" (consulta Consume instancias reservadas). Primero, se seleccionan los tipos de máquinas que coinciden con las reservas dentro de un rango, seguidos de los tipos de VM con la mayor cantidad de CPU.
  • Dataproc aplica Google Cloud cuotas al aprovisionamiento flexible de VM.
  • Si bien puedes especificar diferentes proporciones de CPU a memoria para los tipos de V de trabajadores principales y secundarios en un clúster, esto puede provocar una degradación del rendimiento, ya que 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, Dataproc seleccionará y agregará 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 Dataproc con la consola de Google Cloud , Google Cloud CLI o la API de Dataproc.

  • Puedes especificar hasta cinco listas clasificadas de tipos de VM, con hasta 10 tipos de VM en cada 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 un rango de 0. Dentro de una lista, Dataproc 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 de la misma manera.

Console

Para crear un clúster con VMs flexibles de trabajadores secundarios, haz lo siguiente:

  1. Abre la página de Dataproc Crea un clúster en Compute Engine en la consola de Google Cloud .
  2. El panel Configura el clúster se selecciona con 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 Cualquiera esté seleccionado como la zona del clúster para permitir que la ubicación de zona automática de Dataproc elija la zona que tenga la mejor disponibilidad de los tipos de VM especificados en tus listas de VM flexibles.
  3. Selecciona el panel Configurar nodos. En la sección Secondary worker nodes, especifica la cantidad y la capacidad de interrupción de los trabajadores secundarios.
    • Haz clic en Agregar un trabajador secundario para cada rango de trabajadores secundarios y especifica uno o más tipos de máquinas para incluir en cada rango.
  4. Después de confirmar y especificar los detalles del clúster en los paneles de creación, haz clic en Crear.

gcloud

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

En el siguiente ejemplo, se solicitan tipos de VM principal, secundaria y maestra con las siguientes prioridades:

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

Como no se especificó el tipo de trabajador secundario, se aprovisionarán VMs secundarias Spot interrumpibles.

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 de zona automática de Dataproc para permitir que Dataproc elija la zona que tiene disponibles los tipos de VM 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 de la API de Dataproc clusters.create para especificar una lista clasificada de machineTypes para los trabajadores principales, secundarios y maestros.

Ejemplo: El siguiente fragmento JSON de un clusters.create cuerpo de solicitud especifica los tipos de máquinas principal (masterConfig), trabajador principal (workerConfig) y trabajador secundario (secondaryWorkerConfig) con los rangos 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

Dataproc 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 de Flex 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 de yarn.nodemanager.resource.cpu-vcores en yarn-site.xml como 6 para todas las VMs de trabajadores secundarios 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 objeto SoftwareConfig en la solicitud de creación del clúster.

Usa la siguiente sintaxis para la clave de la 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?