Antes, se um tipo de VM não estivesse disponível quando você enviava
uma solicitação de criação de cluster, a solicitação falhava, e era necessário atualizar
o pedido, o script ou o código para especificar um tipo de VM "melhor alternativa". Esse processo de
nova solicitação pode envolver várias iterações até que você especifique um tipo de VM
disponível.
O recurso de VM flexível do Dataproc ajuda a solicitação de criação de cluster
a ser bem-sucedida. Para isso, ele seleciona tipos de VM de worker secundárias nas listas classificadas de VMs e pesquisa
zonas na região especificada do cluster com disponibilidade dos tipos de VM listados.
Terminologia
Tipo de VM:
a família, a capacidade de memória e o número de núcleos de CPU de uma instância de VM.
O Dataproc é compatível com o uso de tipos de VM predefinidos e personalizados.
Workers secundários:
os workers secundários
não armazenam dados. Elas funcionam apenas como nós de processamento. É possível usar
workers secundários para escalonar a computação sem escalonar o armazenamento.
Limitações e considerações
As VMs flexíveis estão disponíveis no Dataproc no Compute Engine 2.0.74+,
2.1.22+ e em versões de imagem posteriores do Dataproc no Compute Engine.
É possível especificar VMs flexíveis apenas para workers secundários.
É possível especificar até cinco listas de tipos de VM classificadas, com até 10 tipos de VM em cada uma. Para mais informações, consulte Como solicitar VMs flexíveis.
A criação de um cluster com VMs flexíveis exige o uso do
posicionamento em zona automática do Dataproc, que
permite que o Dataproc escolha a zona com capacidade para atender
às solicitações de tipo de VM.
Se a solicitação de criação de cluster incluir uma
política de escalonamento automático,
as VMs flexíveis podem ser de diferentes famílias de VMs, mas precisam ter a mesma
quantidade de memória e contagem de núcleos.
Ao provisionar VMs flexíveis, o Dataproc consome reservas disponíveis "correspondentes", mas não reservas "específicas" (consulte Consumir instâncias reservadas).
Os tipos de máquina que correspondem às reservas são selecionados primeiro em uma classificação, seguidos pelos tipos de VM com o maior número de CPUs.
Embora seja possível especificar diferentes proporções de CPU para memória para tipos de worker V primários e secundários em um cluster, isso pode levar à degradação da performance, porque a menor proporção de CPU para memória é usada como a menor unidade de contêiner.
Se você atualizar um cluster criado com VMs flexíveis, o Dataproc vai selecionar e adicionar workers das listas de VMs flexíveis que você forneceu ao criar o cluster.
Solicitar VMs flexíveis
É possível especificar VMs flexíveis ao criar um cluster do Dataproc
usando o console Google Cloud , a Google Cloud CLI ou a API Dataproc.
É possível especificar até cinco listas de tipos de VM classificadas, com até 10 tipos de VM em cada uma. As listas com classificação mais baixa têm a prioridade mais alta. Por padrão, as listas de VMs flexíveis têm uma classificação de 0. Em uma lista, o Dataproc prioriza tipos de VM com reservas não utilizadas, seguidos pelos maiores tamanhos de VM.
Os tipos de VM em uma lista com a mesma contagem de CPU são tratados da mesma forma.
Console
Para criar um cluster com VMs flexíveis de worker secundário:
O painel Configurar cluster é selecionado com campos preenchidos com valores padrão. É possível mudar o nome sugerido e a região do cluster, além de fazer outras alterações. Verifique se Qualquer está selecionado como a Zona do cluster para permitir que a colocação em zona automática do Dataproc escolha a zona com a melhor disponibilidade dos tipos de VM especificados nas listas de VMs flexíveis.
Selecione o painel Configurar nós. Na seção Nós de workers secundários, especifique o número e a capacidade de preempção dos workers secundários.
Clique em Adicionar um worker secundário para cada classificação de workers secundários,
especificando um ou mais tipos de máquinas para incluir em cada classificação.
Depois de confirmar e especificar os detalhes do cluster nos painéis de criação,
clique em Criar.
gcloud
Use o comando
gcloud dataproc clusters create
para adicionar várias flags secondary-worker-machine-types e especificar listas de
VMs flexíveis classificadas para
workers secundários do Dataproc.
O tipo padrão de worker secundário de VM flexível é spot, que é um tipo preemptivo.
No exemplo da CLI gcloud a seguir, o Dataproc tenta
provisionar workers secundários com VMs n2-standard-8 primeiro (classificação 0). Se as máquinas n2-standard-8 não estiverem disponíveis, o Dataproc tentará provisionar workers secundários com VMs e2-standard-8 ou t2d-standard-8 (classificação 1).
--zone="": o recurso de VM flexível exige a colocação em zona automática do Dataproc para permitir que o Dataproc escolha a zona com os tipos de VM disponíveis para uso. Transmitir um valor vazio ("") à flag --zone substitui qualquer seleção de zona especificada no gcloud config list padrão.
O Dataproc gera propriedades de componentes role com base nos núcleos e na memória da máquina. É possível substituir essas propriedades geradas pelo sistema com a flag --properties usando a seguinte sintaxe:
O snippet JSON a seguir de um corpo da solicitação do Dataproc clusters.create especifica os tipos de máquinas de workers secundários para as posições 0 e 1.
Use propriedades do cluster para personalizar papéis de componentes:o Dataproc
gera propriedades role de componentes com base nos núcleos e na memória da VM.
É possível substituir essas propriedades geradas pelo sistema adicionando
SoftwareConfig.properties
à sua solicitação clusters.create usando a seguinte sintaxe key=value:
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-08-22 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,["# Dataproc flexible VMs\n\nFlexible 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--------------------\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\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\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--------------------\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\n### Console\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\n### gcloud\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\n### API\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"]]