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 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 se realice correctamente, ya que selecciona 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 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 Dataproc en Compute Engine 2.0.74+, 2.1.22+ y versiones posteriores de la imagen de Dataproc en Compute Engine.
Solo puedes especificar VMs flexibles para los trabajadores secundarios.
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.
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 selecciona y agrega trabajadores de las listas de VM flexibles que proporcionaste cuando creaste el clúster.
Solicita 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. 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 la misma cantidad de CPU se tratan por igual.
Console
Para crear un clúster con VMs flexibles de trabajadores secundarios, haz lo siguiente:
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 VMs flexibles.
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.
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 secondary-worker-machine-types y especificar listas clasificadas de VM flexibles para los trabajadores secundarios de Dataproc.
El tipo de trabajador secundario de VM flexible predeterminado es Spot, que es un tipo interrumpible.
En el siguiente ejemplo de gcloud CLI, Dataproc intenta aprovisionar primero trabajadores secundarios con VMs de n2-standard-8 (ranking 0). Si no hay máquinas n2-standard-8 disponibles, Dataproc intentará aprovisionar trabajadores secundarios con VMs e2-standard-8 o t2d-standard-8 (rango 1).
--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.
Dataproc genera propiedades de role de componentes basadas en núcleos y memoria de la máquina. Puedes anular estas propiedades generadas por el sistema con la marca --properties, usando la siguiente sintaxis:
En el siguiente ejemplo, la marca --properties cambia la cantidad de núcleos de las máquinas e2-standard-8 asignadas a los nodos trabajadores secundarios de 8 a 6:
El siguiente fragmento JSON de un clusters.create de Dataproc cuerpo de la solicitud especifica los tipos de máquinas de los trabajadores secundarios para el rango 0 y el rango 1.
Usa propiedades del clúster para personalizar los roles de los componentes: Dataproc genera propiedades de role componentes basadas en la memoria y los núcleos de la VM.
Puedes anular estas propiedades generadas por el sistema agregando SoftwareConfig.properties a tu solicitud de clusters.create con la siguiente sintaxis de key=value:
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (UTC)"],[[["\u003cp\u003eFlexible VMs allow you to specify prioritized lists of VM types for Dataproc secondary workers, ensuring cluster creation success even if preferred VM types are unavailable.\u003c/p\u003e\n"],["\u003cp\u003eThis feature uses ranked lists of up to five different lists of machine types, with each list containing up to 10 VM types and employing Dataproc autozone placement to select the best-suited zone.\u003c/p\u003e\n"],["\u003cp\u003eFlexible VMs can be set up when creating a Dataproc cluster through the Google Cloud console, gcloud CLI, or Dataproc API, and they only apply to secondary workers that function as processing nodes without storing data.\u003c/p\u003e\n"],["\u003cp\u003eWhen using an autoscaling policy, flexible VMs can be from different families but must maintain the same memory and core count, and the use of a uniform CPU-to-memory ratio for all workers is advised to prevent performance degradation.\u003c/p\u003e\n"],["\u003cp\u003eWhen provisioning flexible VMs, Dataproc prioritizes VM types that have matching unused reservations and then the largest VM sizes within the specified ranks, adhering to Google Cloud quotas.\u003c/p\u003e\n"]]],[],null,["Flexible VMs is a Dataproc feature that lets you specify\nprioritized lists of [VM types](#vm_types) for Dataproc\n[secondary workers](#secondary_workers) when you\n[create a Dataproc cluster](/dataproc/docs/guides/create-cluster).\n\nWhy use flexible VMs\n\nPreviously, if a VM type was unavailable when you submitted\na cluster creation request, the request failed, and you needed to update\nyour request, script, or code to specify a \"next-best\" VM type. This\nre-request process could involve multiple iterations until you specified a VM type\nthat was available.\n\nThe Dataproc Flexible VM feature helps your cluster creation\nrequest succeed by selecting secondary worker VM types from your ranked VM lists, and then searching\nfor zones within your specified cluster region with availability of the listed VM types.\n\nTerminology\n\n- VM type:\n The family, memory capacity, and number of CPU cores of a VM instance.\n Dataproc supports the use of\n [predefined and custom VM types](/dataproc/docs/concepts/compute/supported-machine-types).\n\n- Secondary workers:\n [Secondary workers](/dataproc/docs/concepts/compute/secondary-vms#gcloud-command)\n don't store data. They function only as processing nodes. You can use\n secondary workers to scale compute without scaling storage.\n\nLimitations and considerations\n\n- Flexible VMs are available in Dataproc on Compute Engine `2.0.74+`,\n `2.1.22+` and later Dataproc on Compute Engine\n [image versions](/dataproc/docs/concepts/versioning/dataproc-version-clusters#supported-dataproc-image-versions).\n\n- You can specify flexible VMs for secondary workers only.\n\n- You can specify up to five ranked VM type lists, with up to 10 VM types\n in a list. For more information, see [How to request flexible VMs](#how_to_request_flexible_vms).\n\n- The creation of a cluster with flexible VMs requires the use of\n [Dataproc autozone placement](/dataproc/docs/concepts/configuring-clusters/auto-zone), which\n allows Dataproc to choose the zone that has the capacity to fulfill\n your VM type requests.\n\n- If your cluster creation request includes an\n [autoscaling policy](/dataproc/docs/concepts/configuring-clusters/autoscaling#create_an_autoscaling_cluster),\n flexible VMs can be from different VM families, but they must have the same\n amount of memory and core count.\n\n- When provisioning flexible VMs, Dataproc consumes \"any matching\"\n available reservations, but not \"specific\" reservations (see\n [Consume reserved instances](/compute/docs/instances/reservations-consume#consuming_reserved_instances)).\n Machine types that match reservations are first selected within a rank, followed by\n VM types with the largest number of CPUs.\n\n- [Dataproc applies Google Cloud quotas](/dataproc/quotas)\n to flexible VM provisioning.\n\n- Although you can specify different CPU-to-memory ratios for primary and\n secondary worker V types in a cluster, this can lead to performance degradation\n because the smallest CPU-to-memory ratio is used as the smallest container unit.\n\n | Use a uniform CPU-to-memory ratio for primary and secondary workers, including flexible VMs.\n\n \u003cbr /\u003e\n\n- If you update a cluster that was created using flexible VMs,\n Dataproc selects and adds workers from the flexible VM lists that\n you provided when you created your cluster.\n\nRequest flexible VMs\n\nYou can specify flexible VMs when you create a Dataproc cluster\nusing the Google Cloud console, Google Cloud CLI, or Dataproc API.\n\n- You can specify up to five ranked VM type lists, with up to 10 VM types in a list. Lowest ranked lists have the highest priority. By default, flexible VM lists have a rank of 0. Within a list, Dataproc prioritizes VM types with unused reservations, followed by the largest VM sizes. VM types within a list with the same CPU count are treated equally.\n\nConsole\n\nTo create a cluster with secondary worker flexible VMs:\n\n1. Open the Dataproc\n [**Create a cluster on Compute Engine**](https://console.cloud.google.com/dataproc/clustersAdd)\n page in the Google Cloud console.\n\n2. The **Set up cluster** panel is selected with fields filled in with default\n values. You can change the suggested name and the cluster region, and\n make other changes. Make sure that **Any** is selected as the cluster\n **Zone** to allow\n [Dataproc autozone placement](/dataproc/docs/concepts/configuring-clusters/auto-zone)\n to choose the zone that has the best availability of the\n VM types specified in your flexible VM lists.\n\n3. Select the **Configure nodes** panel. In the **Secondary worker nodes**\n section, specify the number and preemptibility of secondary workers.\n\n - Click **Add a secondary worker** for each rank of secondary workers, specifying one or more machine types to include in each rank.\n4. After confirming and specifying cluster details in the cluster create panels,\n click **Create**.\n\ngcloud\n\nUse the\n[`gcloud dataproc clusters create`](/sdk/gcloud/reference/dataproc/clusters/create)\ncommand to add multiple `secondary-worker-machine-types` flags to specify ranked\nflexible VM lists for\n[Dataproc secondary workers](/dataproc/docs/concepts/compute/secondary-vms).\nThe default flexible VM secondary worker type is Spot, which is a preemptible type.\n\nIn the following gcloud CLI example, Dataproc attempts\nto provision secondary workers with `n2-standard-8` VMs first (rank 0). If\nn2-standard-8 machines are not available, Dataproc attempts\nto provision secondary workers with either `e2-standard-8` or `t2d-standard-8`\nVMs (rank 1). \n\n```\ngcloud dataproc clusters create CLUSTER_NAME \\\n --region=REGION \\\n --zone=\"\" \\\n --master-machine-type=n1-standard-8 \\\n --worker-machine-type=n1-standard-8 \\\n --num-workers=4 \\\n --num-secondary-workers=4 \\\n --secondary-worker-type=non-preemptible \\\n --secondary-worker-machine-types=\"type=n2-standard-8,rank=0\" \\\n --secondary-worker-machine-types=\"type=e2-standard-8,type=t2d-standard-8,rank=1\"\n```\n\nNotes:\n\n- `--zone=\"\"`: The Flexible VM feature requires\n [Dataproc autozone placement](/dataproc/docs/concepts/configuring-clusters/auto-zone) to\n allow Dataproc to choose the zone that has your\n VM types available for use. Passing an empty value\n (\"\") to the `--zone` flag overrides any zone selection specified in your default\n `gcloud config list`.\n\n- Dataproc generates component `role` properties based on machine\n cores and memory. You can override these system-generated properties with the\n `--properties` flag, using the following syntax:\n\n ```\n --properties=\"ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE\"\n ```\n\n Only the `secondary_worker` role is the only supported role.\n\n In the following example, the `--properties` flag changes the number of cores\n of `e2-standard-8` machines assigned to secondary worker nodes from `8` to `6`: \n\n ```\n --properties=\"secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6\"\n ```\n\nAPI\n\nUse the [`instanceFlexibilityPolicy.instanceSelectionList`](/dataproc/docs/reference/rest/v1/InstanceGroupConfig#InstanceFlexibilityPolicy.FIELDS.instance_selection_list)\nas part of a Dataproc API\n[`clusters.create`](/dataproc/docs/reference/rest/v1/projects.regions.clusters/create)\nrequest to specify a ranked list of [machineTypes]() for secondary workers.\n\nExample:\n\nThe following JSON snippet from a Dataproc `clusters.create`\n[request body](/dataproc/docs/reference/rest/v1/projects.regions.clusters/create#request-body)\nspecifies secondary workers machine types for rank 0 and rank 1. \n\n```\n\"config\": {\n \"secondaryWorkerConfig\": {\n \"instanceFlexibilityPolicy\": {\n \"instanceSelectionList\": [\n {\n \"machineTypes\": [\n \"n1-standard-4\",\n \"n2-standard-4\"\n ],\n \"rank\": 0\n },\n {\n \"machineTypes\": [\n \"e2-standard-4\",\n \"n2d-standard-4\"\n ],\n \"rank\": 1\n }\n ]\n }\n }\n}\n```\n\n**Use cluster properties to customize component roles:** Dataproc\ngenerates component `role` properties based on VM cores and memory.\nYou can override these system-generated properties by adding\n[`SoftwareConfig.properties`](/static/dataproc/docs/reference/rest/v1/ClusterConfig#SoftwareConfig.FIELDS.properties)\nto your `clusters.create` request, using the following \u003cvar translate=\"no\"\u003ekey\u003c/var\u003e`=`\u003cvar translate=\"no\"\u003evalue\u003c/var\u003e syntax: \n\n```\nROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE\n```\n\nOnly the `secondary_worker` role is the only supported role.\n\nIn the following example, the `properties` field changes the number of cores\nassigned to the secondary worker node of an `e2-standard-8` VM from `8` to `6`:\n\n\u003cbr /\u003e\n\n```\n\"secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6\"\n \n```\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e"]]