VMs flexibles de Dataproc

Las VMs flexibles son una función de Dataproc que te permite especificar listas de prioridad de tipos de VM para los 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 la solicitud, la secuencia de comandos o el código para especificar un tipo de VM “siguiente mejor”. Este proceso de reenvío de la solicitud podría implicar varias iteraciones hasta que especifiques un tipo de VM que esté disponible.

La función de VM flexible de Dataproc ayuda a que tu solicitud de creación de clúster sea exitosa, ya que selecciona tipos de VM de trabajador secundarios 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: Es 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.

  • Trabajadores secundarios: Los trabajadores secundarios no almacenan datos. Solo funcionan como nodos de procesamiento. Puedes usar trabajadores secundarios para escalar el procesamiento sin escalar el almacenamiento.

Limitaciones y consideraciones

  • Las VMs flexibles están disponibles en las versiones de imagen de Dataproc en Compute Engine 2.0.74+, 2.1.22+ y versiones posteriores.

  • Solo puedes especificar VMs flexibles para trabajadores secundarios.

  • Puedes especificar hasta cinco listas de tipos de VM clasificados, 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 de zona automática de Dataproc, que permite que Dataproc elija la zona que tiene la capacidad de entregar 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 aprovisionas VMs flexibles, Dataproc consume “cualquier reserva que coincida” disponible, pero no las reservas “específicas” (consulta Cómo consumir instancias reservadas). Los tipos de máquinas 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.

  • Dataproc aplica las cuotas de Google Cloud al aprovisionamiento flexible de VM.

  • Aunque puedes especificar diferentes proporciones de CPU a memoria para los tipos de VM de trabajo primarios y secundarios en un clúster, esto puede provocar una degradación del rendimiento, ya que la proporción de CPU a memoria más pequeña se usa como la unidad de contenedor más pequeña.

  • Si actualizas un clúster que se creó con VMs flexibles, Dataproc 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 Dataproc con la consola de Google Cloud, Google Cloud CLI o la API de Dataproc.

  • Puedes especificar hasta cinco listas de tipos de VM clasificados, 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, 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, sigue estos pasos:

  1. Abre la página de Dataproc Crea un clúster en Compute Engine en la consola de Google Cloud.

  2. Se selecciona el panel Configura el clúster 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 Any esté seleccionada 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 Configura los 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áquinas para incluir en cada clasificación.
  4. Después de confirmar y especificar los detalles del clúster en los paneles de creación de clústeres, haz clic en Crear.

gcloud

Usa el comando gcloud dataproc clusters create para agregar varias marcas secondary-worker-machine-types y especificar listas de VM flexibles clasificadas para los trabajadores secundarios de Dataproc. El tipo de trabajador secundario predeterminado de la VM flexible es Spot, que es un tipo interrumpible.

En el siguiente ejemplo de gcloud CLI, Dataproc intenta aprovisionar primero trabajadores secundarios con n2-standard-8 VMs (rango 0). Si no hay máquinas n2-standard-8 disponibles, Dataproc intenta aprovisionar trabajadores secundarios con VMs e2-standard-8 o t2d-standard-8 (rango 1).

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --master-machine-type=n1-standard-8 \
    --worker-machine-type=n1-standard-8 \
    --num-workers=4 \
    --num-secondary-workers=4 \
    --secondary-worker-type=non-preemptible \
    --secondary-worker-machine-types="type=n2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=e2-standard-8,type=t2d-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 tus tipos de VM disponibles para su uso. Pasar un valor vacío ("") a la marca --zone anula cualquier selección de zona especificada en tu gcloud config list predeterminado.

  • Dataproc genera propiedades role de componentes según los núcleos y la memoria de la máquina. Puedes anular estas propiedades generadas por el sistema con la marca --properties mediante la siguiente sintaxis:

    --properties="ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE"
    

    Solo se admite el rol secondary_worker.

    En el siguiente ejemplo, la marca --properties cambia la cantidad de núcleos de máquinas e2-standard-8 asignadas a nodos de trabajo secundarios de 8 a 6:

    --properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"
    

API

Usa instanceFlexibilityPolicy.instanceSelectionList como parte de una solicitud clusters.create de la API de Dataproc para especificar una lista ordenada de machineTypes para los trabajadores secundarios.

Ejemplo:

En el siguiente fragmento JSON de un cuerpo de solicitud de clusters.create de Dataproc, se especifican los tipos de máquinas de los trabajadores secundarios para el rango 0 y el rango 1.

"config": {
  "secondaryWorkerConfig": {
    "instanceFlexibilityPolicy": {
      "instanceSelectionList": [
        {
          "machineTypes": [
            "n1-standard-4",
            "n2-standard-4"
          ],
          "rank": 0
        },
        {
          "machineTypes": [
            "e2-standard-4",
            "n2d-standard-4"
          ],
          "rank": 1
        }
      ]
    }
  }
}

Usa propiedades de clúster para personalizar los roles de los componentes: Dataproc genera propiedades role de componentes según los núcleos y la memoria de la VM. Para anular estas propiedades generadas por el sistema, agrega SoftwareConfig.properties a tu solicitud clusters.create con la siguiente sintaxis key=value:

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE

Solo se admite el rol secondary_worker.

En el siguiente ejemplo, el campo properties cambia la cantidad de núcleos asignados al nodo trabajador secundario de una VM e2-standard-8 de 8 a 6:

"secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"