Priorizar tipos de VM com VMs flexíveis

As VMs flexíveis são um recurso do Dataproc que permite especificar listas priorizadas de tipos de VM para nós mestre, principal e secundário do Dataproc ao criar um cluster do Dataproc.

Por que usar VMs flexíveis?

Anteriormente, se um tipo de VM não estivesse disponível ao enviar uma solicitação de criação de cluster, a solicitação falhava e era necessário atualizar a solicitação, o script ou o código para especificar um tipo de VM "melhor seguinte". Esse processo de nova solicitação poderia envolver várias iterações até que você especificasse 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 selecionando tipos de VM mestre, principal e secundária nas listas de VMs classificadas e, em seguida, pesquisando zonas na região de cluster especificada 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 oferece suporte ao uso de tipos de VM predefinidos e personalizados.
  • Nós mestre e de worker principal: um cluster tem um nó mestre e pelo menos dois workers principais.
  • Workers secundários: Os workers secundários são opcionais e não armazenam dados. Eles funcionam apenas como nós de processamento. É possível usar workers secundários para escalonar a computação sem escalonar o armazenamento. O tipo de worker secundário de VM flexível padrão é uma VM Spot, que é um tipo preemptivo (consulte Workers secundários do Dataproc).

Uso

  • As VMs flexíveis estão disponíveis no Dataproc no Compute Engine 2.0.74+, 2.1.76+, 2.2.42+ e versões de imagem mais recentes .
  • A criação de clusters com VMs flexíveis mestre ou de worker principal leva mais tempo (aproximadamente mais 32 segundos).
  • O nome do cluster não pode exceder 45 caracteres.
  • O mesmo tipo de disco é necessário para todos os tipos de VM.
  • É possível especificar até cinco listas de tipos de VM classificadas, com até 10 tipos de VM em uma lista. Para mais informações, consulte Como solicitar VMs flexíveis.
  • A criação de um cluster com VMs flexíveis exige o uso da colocação em zona automática do Dataproc, que permite que o Dataproc escolha a zona que tem 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 poderão ser de famílias de VM diferentes, mas precisarão 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 por tipos de VM com o maior número de CPUs.
  • O Dataproc aplica Google Cloud cotas ao provisionamento flexível de VM.
  • Embora seja possível especificar proporções diferentes de CPU para memória para tipos de worker principal 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 usando VMs flexíveis, o Dataproc vai selecionar e adicionar workers das listas de VMs flexíveis que você forneceu ao criar o cluster.

Como solicitar VMs flexíveis

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

  • É possível especificar até cinco listas de tipos de VM classificadas, com até 10 tipos de VM em uma lista. As listas com classificação mais baixa têm a maior prioridade. 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 igualmente.

Console

Para criar um cluster com VMs flexíveis de worker secundário, faça o seguinte:

  1. Abra a página Criar um cluster no Compute Engine do Dataproc no Google Cloud console.
  2. 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 mudanças. 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 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 workers secundários, especifique o número e a capacidade de preempção de 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 para incluir em cada classificação.
  4. Depois de confirmar e especificar os detalhes do cluster nos painéis de criação de cluster, clique em Criar.

gcloud

Use the gcloud dataproc clusters create comando para adicionar várias flags master-machine-types, worker-machine-types e secondary-worker-machine-types para especificar listas de VMs flexíveis classificadas para workers mestre, principal e secundário.

O exemplo a seguir solicita tipos de VM mestre, principal e secundária com as seguintes prioridades:

  • Provisionar VMs e2-standard-8 se disponíveis (classificação 0). Se as máquinas e2-standard-8 não estiverem disponíveis, provisione VMs n2-standard-8 (classificação 1).

Como o tipo de worker secundário não está especificado, as VMs secundárias Spot preemptivas serão provisionadas.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --master-machine-types="type=e2-standard-8,rank=0" \
    --master-machine-types="type=n2-standard-8,rank=1" \
    --num-workers=10 \
    --worker-machine-types="type=e2-standard-8,rank=0" \
    --worker-machine-types="type=n2-standard-8,rank=1" \
    --num-secondary-workers=4 \
    --secondary-worker-machine-types="type=e2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=n2-standard-8,rank=1"

Observações:

  • --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 que tem os tipos de VM disponíveis para uso. A transmissão de um valor vazio ("") para a flag --zone substitui qualquer seleção de zona especificada em seu padrão gcloud config list.

API

Use the instanceFlexibilityPolicy.instanceSelectionList como parte de uma solicitação da API Dataproc clusters.create para especificar uma lista classificada de machineTypes para workers mestre, principal e secundário.

Exemplo: o snippet JSON a seguir de um clusters.create corpo de solicitação especifica tipos de máquina mestre (masterConfig), de worker principal (workerConfig) e de worker secundário (secondaryWorkerConfig) com classificações 0 e 1.

{
  "projectId": "PROJECT_ID",
  "clusterName": "CLUSTER_NAME",
  "config": {
    "gceClusterConfig": {
      "zoneUri": ""
    },
    "masterConfig": {
      "numInstances": 1,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    },
    "workerConfig": {
      "numInstances": 10,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    },
    "secondaryWorkerConfig": {
      "numInstances": 4,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    }
  }
}

Substituir propriedades de VM flexível

O Dataproc define propriedades no nível do cluster. Ao criar um cluster que usa VMs flexíveis, é possível substituir as propriedades geradas pelo sistema para tipos de VM flexíveis de worker principal e secundário.

gcloud

Para substituir propriedades ao criar um cluster, use a --properties flag com a seguinte sintaxe:

--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
  • ROLE pode ser primary_worker ou secondary_worker.
  • Separe várias propriedades com uma vírgula.

Execute o comando gcloud dataproc clusters create a seguir para substituir o número de vCPUs que o YARN aloca para o NodeManager em workers secundários. Este exemplo define o valor yarn.nodemanager.resource.cpu-vcores em yarn-site.xml como 6 para todas as VMs de worker secundário e2-standard-8 e n2-standard-8.

gcloud dataproc clusters create CLUSTER_NAME \
    --num-workers=10 \
    --num-secondary-workers=4 \
    --worker-machine-types="type=e2-standard-8,rank=0" \
    --worker-machine-types="type=n2-standard-8,rank=1" \
    --master-machine-types="type=e2-standard-8,rank=0" \
    --master-machine-types="type=n2-standard-8,rank=1" \
    --secondary-worker-machine-types="type=e2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=n2-standard-8,rank=1" \
    --region=us-central1 \
    --zone="" \
    --properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6,secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"

API

Para substituir propriedades, defina-as no campo properties do SoftwareConfig objeto na solicitação de criação de cluster.

Use a seguinte sintaxe para a chave de propriedade:

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY
  • ROLE pode ser primary_worker ou secondary_worker.

O objeto SoftwareConfig a seguir substitui o número de vCPUs que o YARN aloca para o NodeManager em workers secundários. Este exemplo define o valor yarn.nodemanager.resource.cpu-vcores como 6 para todas as VMs de worker secundário e2-standard-8 e n2-standard-8.

{
  "imageVersion":"2.2.42",
  "properties": {
    "secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6",
    "secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6"
  }
}

A seguir