VMs flexibles de Dataproc

Las VM flexibles son una función de Dataproc que te permite especificar listas prioritarias de tipos de VM para los trabajadores secundarios de Dataproc cuando creas un clúster de Dataproc.

¿Por qué usar VMs flexibles?

Antes, si un tipo de VM no estaba disponible cuando enviabas una solicitud de creación de clúster, la solicitud fallaba y necesitabas actualizar tu solicitud, secuencia de comandos o código para especificar el tipo de VM "siguiente mejor". Este proceso de nueva solicitud puede implicar varias iteraciones hasta que especifiques un tipo de VM disponible.

La función de VM flexible de Dataproc ayuda a que la solicitud de creación de clústeres se realice de forma correcta, ya que selecciona los tipos de VM de trabajador secundarios de tus listas de VM clasificadas y, luego, busca zonas dentro de la región del clúster especificada con la 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.

  • 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 VM flexibles están disponibles en Dataproc en Compute Engine 2.0.74+, 2.1.22+ y en las versiones de imagen posteriores de Dataproc en Compute Engine.

  • Durante la versión preliminar, sucede lo siguiente:

    • Solo puedes especificar VMs flexibles para trabajadores secundarios.
    • Puedes especificar tipos de trabajadores secundarios Spot o no interrumpibles como VM flexibles, pero no ambos, en la solicitud de creación del clúster. Si no especificas el tipo de trabajador secundario, Dataproc usa VMs Spot, que son interrumpibles.
  • 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 VM flexibles.

  • La creación de un clúster con VM flexibles requiere el uso de posición de zona automática de Dataproc, que permite que Dataproc elija la zona que tiene la capacidad para entregar tus solicitudes de tipo de VM.

  • Si la solicitud de creación de tu clúster incluye una política de ajuste de escala automático, las VM flexibles pueden pertenecer a diferentes familias de VM, pero deben tener la misma cantidad de memoria y de núcleos.

  • Cuando se aprovisionan VM flexibles, Dataproc consume “cualquier reserva disponible” que coincida, pero no las reservas “específicas” (consulta Consume instancias reservadas). Los tipos de máquinas que coinciden con las reservas se seleccionan primero en una clasificación, seguidos de los tipos de VM con la mayor cantidad de CPU.

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

  • Aunque puedes especificar diferentes proporciones de CPU a memoria para los tipos V de trabajador primario y secundario 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 VM flexibles, Dataproc selecciona y agrega trabajadores de las listas de VM flexibles que proporcionaste cuando creaste el clúster.

Cómo solicitar VM flexibles

Puedes especificar VM 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 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. En 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 el mismo recuento de CPU se tratan de la misma forma.

Consola

Para crear un clúster con VM flexibles de trabajador secundarias, sigue estos pasos:

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

  2. El panel Configurar clúster (Set up cluster) 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é seleccionada como la Zona del clúster para permitir que la posició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 Nodos trabajadores secundarios, especifica la cantidad y la prioridad 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 que se incluirán 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 a fin de agregar varias marcas secondary-worker-machine-types a fin de especificar listas de VM flexibles clasificadas para los trabajadores secundarios de Dataproc. El tipo de trabajador secundario predeterminado de VM flexible es Spot, que es un tipo interrumpible.

En el siguiente ejemplo de gcloud CLI, Dataproc intenta aprovisionar primero a los trabajadores secundarios con las VMs n2-standard-8 (clasificación 0). Si las máquinas n2-standard-8 no están disponibles, Dataproc intenta aprovisionar a los trabajadores secundarios con VM 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 posición de zona automática de Dataproc a fin de permitir que Dataproc elija la zona que tiene disponibles los tipos de VM para su uso. Pasar un valor vacío (“”) a la marca --zone anula cualquier selección de zona especificada en el gcloud config list predeterminado.

  • Dataproc genera las propiedades role del componente en función de los núcleos de la máquina y la memoria. 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"
    

    En la versión preliminar, el rol secondary_worker es el único admitido.

    En el siguiente ejemplo, la marca --properties cambia la cantidad de núcleos de máquinas e2-standard-8 asignadas a nodos trabajadores 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 a la API de Dataproc para especificar una lista clasificada de machineTypes para trabajadores secundarios.

Ejemplo:

En el siguiente fragmento JSON del cuerpo de la solicitud clusters.create de Dataproc, se especifican los tipos de máquina de los trabajadores secundarios para los rangos 0 y 1.

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

Usa las propiedades del clúster para personalizar las funciones de los componentes: Dataproc genera las propiedades del componente role en función de los núcleos y la memoria de la VM. Puedes anular estas propiedades generadas por el sistema agregando SoftwareConfig.properties a tu solicitud clusters.create con la siguiente sintaxis key=value:

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE

En la versión preliminar, el rol secondary_worker es el único admitido.

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"