VMs flexíveis do Dataproc

As VMs flexíveis são um recurso do Dataproc que permite especificar listas priorizadas de tipos de VM para workers secundários do Dataproc ao criar um cluster do Dataproc.

Por que usar VMs flexíveis?

Antes, se um tipo de VM não estava disponível quando você enviava uma solicitação de criação de cluster, a solicitação falhou e era necessário atualizar a solicitação, o script ou o código para especificar um tipo de VM "próximo-melhor". Esse processo de nova solicitação pode envolver várias iterações até você especificar um tipo de VM disponível.

O recurso de VM flexível do Dataproc ajuda na solicitação de criação do cluster selecionando tipos de VM de worker secundários nas listas de VMs classificadas e, em seguida, pesquisando 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 aceita o uso de tipos de VM predefinidos e personalizados.

  • Workers secundários: os workers secundários não armazenam dados. Eles funcionam apenas como nós de processamento. É possível usar workers secundários para escalonar a computação sem dimensionar 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 mais recentes do Dataproc nas versões de imagem do Compute Engine.

  • Durante a versão de pré-lançamento:

    • Só é possível especificar VMs flexíveis para workers secundários.
    • É possível especificar os tipos de worker secundário Spot ou não preemptiva como VMs flexíveis, mas não ambos, na solicitação de criação do cluster. Se você não especificar o tipo de worker secundário, o Dataproc usará VMs spot, que são preemptivas.
  • É possível especificar até cinco listas de tipos de VM classificados, com até 10 em uma lista. Para mais informações, consulte Como solicitar VMs flexíveis.

  • A criação de um cluster com VMs flexíveis requer o uso da colocação em zona automática do Dataproc, que permite ao Dataproc escolher a zona que tem capacidade para atender às solicitações do tipo de VM.

  • Se a solicitação de criação de cluster incluir uma política de escalonamento automático, as VMs flexíveis poderão ser de diferentes famílias, mas precisarão ter a mesma quantidade de memória e contagem de núcleos.

  • Ao provisionar VMs flexíveis, o Dataproc consome "todas as reservas disponíveis" correspondentes, mas não reservas "específicas" (consulte Como 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.

  • O Dataproc aplica cotas do Google Cloud ao provisionamento flexível de VMs.

  • Embora seja possível especificar diferentes proporções de CPU para memória para tipos V de worker primário e secundário em um cluster, isso pode levar à degradação do desempenho, 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 selecionará e adicionará workers das listas de VMs flexíveis fornecidas quando você criou o cluster.

Como solicitar VMs flexíveis

É possível especificar VMs flexíveis ao criar um cluster do Dataproc usando o console do Google Cloud, a Google Cloud CLI ou a API Dataproc.

  • É possível especificar até cinco listas de tipos de VM classificados, com até 10 em uma lista. As listas com a menor classificação têm a prioridade mais alta. Por padrão, as listas de VMs flexíveis têm uma classificação de 0. Dentro de uma lista, o Dataproc prioriza os 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 CPUs são tratados da mesma forma.

Console

Para criar um cluster com VMs flexíveis do worker secundário:

  1. Abra a página Criar um cluster no Compute Engine do Dataproc no console do Google Cloud.

  2. O painel Configurar cluster está selecionado com os campos preenchidos com valores padrão. É possível alterar o nome sugerido e a região do cluster e fazer outras alterações. Verifique se Qualquer está selecionado como a Zona do cluster para permitir que o posicionamento em zona automática do Dataproc escolha a zona que tem a melhor disponibilidade dos tipos de VM especificados nas listas de VMs flexíveis.

  3. Selecione o painel Configurar nós. Na seção Nós de trabalho secundários, especifique o número e a 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áquina a serem incluídos em cada classificação.
  4. Depois de confirmar e especificar os detalhes do cluster no painel de criação, clique em Criar.

gcloud

Use o comando gcloud dataproc clusters create para adicionar várias sinalizações secondary-worker-machine-types a fim de especificar listas de VMs flexíveis classificadas para trabalhos secundários do Dataproc. O tipo de worker secundário de VM flexível padrão é Spot, que é um tipo preemptiva.

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).

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"

Observações:

  • --zone="": o recurso de VM flexível requer o posicionamento em zona automática do Dataproc para permitir que o Dataproc escolha a zona que tem seus tipos de VM disponíveis para uso. Transmitir um valor vazio ("") para a sinalização --zone substitui qualquer seleção de zona especificada no gcloud config list padrão.

  • O Dataproc gera as propriedades role do componente 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:

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

    Nessa versão, o papel secondary_worker é o único compatível.

    No exemplo a seguir, a sinalização --properties altera o número de núcleos de máquinas e2-standard-8 atribuídas aos nós de trabalho secundários de 8 para 6:

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

API

Use instanceFlexibilityPolicy.instanceSelectionList como parte de uma solicitação clusters.create da API Dataproc para especificar uma lista de classificação de machineTypes para workers secundários.

Exemplo:

O snippet JSON a seguir de um corpo da solicitação clusters.create do Dataproc especifica os tipos de máquina de workers secundários para as classificações 0 e 1.

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

Use as propriedades do cluster para personalizar papéis de componentes: o Dataproc gera propriedades role do componente com base nos núcleos de VM e na memória. É possível substituir essas propriedades geradas pelo sistema adicionando SoftwareConfig.properties à solicitação clusters.create usando a seguinte sintaxe key=value:

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE

Nessa versão, o papel secondary_worker é o único compatível.

No exemplo a seguir, o campo properties altera o número de núcleos atribuídos ao nó de trabalho secundário de uma VM e2-standard-8 de 8 para 6:

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