Criar um cluster de alta disponibilidade

Neste documento, descrevemos como criar um cluster do Serviço Gerenciado para Apache Spark no modo de alta disponibilidade (HO, na sigla em inglês). O modo de alta disponibilidade aumenta a probabilidade de provisionar VMs de cluster com sucesso durante períodos de alta demanda ou restrições de recursos, permitindo que o Serviço Gerenciado para Apache Spark selecione entre uma gama de tipos de máquina compatíveis, em vez de exigir um tipo de máquina fixo ao criar um cluster.

Use o modo de alta disponibilidade para criar clusters com requisitos de computação de uso geral para ajudar a evitar falhas de criação e escalonamento de clusters devido à indisponibilidade da VM.

Como funciona o modo de alta disponibilidade

Nas solicitações de criação de cluster padrão, você especifica tipos de máquina específicos (como n2-standard-4) para nós de cluster. Se esse tipo de máquina específico não estiver disponível em uma zona, a solicitação de criação vai falhar.

No modo de alta disponibilidade, você especifica requisitos de recursos flexíveis para nós mestre, de worker primário e de worker secundário em vez de tipos de máquina fixos:

  • Contagem de núcleos de vCPU: você solicita um número de vCPUs por instância de VM (2, 4, 8, 16 ou 32 núcleos).
  • Classe de hardware: especifique o perfil de desempenho e memória:

    • STANDARD: oferece uma configuração equilibrada com aproximadamente 4 GB de memória por vCPU e níveis de armazenamento permanente padrão. Os tipos de máquina candidatos atuais incluem n4-standard, n4d-standard, n2-standard e n2d-standard (preferência de classificação 0) e c4-standard e c4d-standard (preferência de classificação 1).
    • PERFORMANCE: fornece uma configuração de alto desempenho com aproximadamente 8 GB de memória por vCPU e configurações de disco de nível mais alto (IOPS e capacidade de processamento mais altas). Os tipos de máquina candidatos atuais incluem n4-highmem, n4d-highmem, n2-highmem e n2d-highmem (preferência de classificação 0) e c4-highmem e c4d-highmem (preferência de classificação 1).
  • Contagem de instâncias: especifique o número de instâncias para cada grupo:

    • Mestre: precisa ser uma instância.
    • Workers primários: número inteiro positivo.
    • Workers secundários: número inteiro não negativo.
  • Tamanho do disco de inicialização: tamanho opcional do disco de inicialização (por exemplo, 100 GB).

O Serviço Gerenciado para Apache Spark usa automaticamente o posicionamento de zona automática para avaliar as zonas na região do cluster e selecionar tipos de máquina candidatos na classe de hardware solicitada que tenham capacidade disponível.

Requisitos e limitações

O modo de alta disponibilidade tem os seguintes requisitos e limitações:

  • Cotas de recursos: seu projeto precisa ter cotas de recursos do Compute Engine suficientes na região do cluster para todas as famílias de máquinas candidatas na classe de hardware selecionada (N4, N4D, N2, N2D, C4 e C4D). Como os tipos de máquina candidatos são controlados pelo Google e podem mudar a qualquer momento, não dependa de tipos de máquina específicos.
  • Especificação de zona: não é possível especificar um --zone (ou zoneUri) explícito. O Serviço Gerenciado para Apache Spark seleciona automaticamente uma zona disponível na região usando o posicionamento de zona automática.
  • Exclusividade mútua com configurações fixas de máquina e nó:
    • Ao configurar grupos de nós mestre, de worker primário ou de worker secundário com configurações flexíveis (--master-flexible-config, --worker-flexible-config ou --secondary-worker-flexible-config), não é possível especificar o tipo de máquina padrão, a seleção de instâncias, a contagem de instâncias, o disco ou as sinalizações de acelerador para esses grupos de nós:
      • Master: não pode ser combinado com --master-machine-type, --master-machine-types, --master-instance-selection, --master-instance-flexibility-policy-file, --master-boot-disk-size, --master-boot-disk-type, --num-master-local-ssds, --master-accelerator ou --master-min-cpu-platform.
      • Workers primários: não podem ser combinados com --num-workers, --worker-machine-type, --worker-machine-types, --worker-instance-selection, --worker-instance-flexibility-policy-file, --worker-boot-disk-size, --worker-boot-disk-type, --num-worker-local-ssds, --worker-accelerator ou --worker-min-cpu-platform.
      • Workers secundários: não podem ser combinados com --num-secondary-workers, --secondary-worker-type, --secondary-worker-machine-types, --secondary-worker-instance-selection, --secondary-worker-instance-flexibility-policy-file, --secondary-worker-boot-disk-size, --secondary-worker-boot-disk-type, --num-secondary-worker-local-ssds ou --secondary-worker-accelerator.
    • Em um cluster de vários nós, se o modo de alta disponibilidade estiver ativado para o grupo de nós mestre, o grupo de nós de trabalho primário também precisará usar configurações flexíveis (--worker-flexible-config).
    • Se workers secundários forem usados em um cluster de alta disponibilidade, eles precisarão usar --secondary-worker-flexible-config em vez de flags de worker secundário padrão.
  • Clusters de nó único: em um cluster de nó único (--single-node ou --cluster-type=single-node), apenas --master-flexible-config pode ser especificado. As flags de configuração flexível de workers primários e secundários não são compatíveis.
  • Atualizações de cluster: é possível atualizar o número de instâncias (num-instances) para workers primários e secundários usando gcloud dataproc clusters update. A contagem de núcleos, a classe de hardware e o tamanho do disco de inicialização são especificações de tempo de criação e não podem ser modificados após a criação.
  • Clusters de alta disponibilidade: os clusters de alta disponibilidade (HA, na sigla em inglês) (clusters com três nós mestre) não são compatíveis com o modo de alta disponibilidade. A contagem de instâncias mestre precisa ser 1.

Criar um cluster de alta disponibilidade

É possível criar um cluster no modo de alta disponibilidade usando a Google Cloud CLI ou a API Dataproc.

gcloud

Para criar um cluster no modo de alta disponibilidade, execute o comando gcloud dataproc clusters create com as flags --master-flexible-config e --worker-flexible-config.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --master-flexible-config="cores=CORES,hardware-class=HARDWARE_CLASS,num-instances=1,boot-disk-size=BOOT_DISK_SIZE" \
    --worker-flexible-config="cores=CORES,hardware-class=HARDWARE_CLASS,num-instances=NUM_WORKERS,boot-disk-size=BOOT_DISK_SIZE"

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • REGION: a região do Compute Engine do cluster, como us-central1. Não especifique um --zone.
  • CORES: o número de vCPUs por instância de VM. Precisa ser uma potência de 2 (2, 4, 8, 16 ou 32).
  • HARDWARE_CLASS: a classe do perfil de hardware, STANDARD ou PERFORMANCE.
  • NUM_WORKERS: o número de nós de trabalho primários no cluster.
  • BOOT_DISK_SIZE: o tamanho do disco de inicialização, como 100GB.

Adicionar workers secundários

Para adicionar nós de trabalho secundários no modo de alta disponibilidade, inclua a flag --secondary-worker-flexible-config:

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --master-flexible-config="cores=4,hardware-class=STANDARD,num-instances=1,boot-disk-size=100GB" \
    --worker-flexible-config="cores=4,hardware-class=STANDARD,num-instances=2,boot-disk-size=100GB" \
    --secondary-worker-flexible-config="cores=4,hardware-class=STANDARD,num-instances=2,boot-disk-size=100GB"

Criar um cluster de nó único

Para criar um cluster de alta disponibilidade de nó único, especifique --single-node (ou --cluster-type=single-node) com --master-flexible-config e omita as flags de configuração flexível do worker:

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --single-node \
    --master-flexible-config="cores=4,hardware-class=STANDARD,boot-disk-size=100GB"

Atualizar a capacidade de workers do cluster

Para escalonar o número de workers principais ou secundários em um cluster de alta disponibilidade, use o comando gcloud dataproc clusters update:

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --worker-flexible-config="num-instances=NEW_NUM_WORKERS"

REST

Para criar um cluster de alta disponibilidade usando a API REST, envie uma solicitação clusters.create. No objeto ClusterConfig:

  1. Deixe gceClusterConfig.zoneUri vazio (ou omita-o) para ativar o posicionamento de zona automática.
  2. Especifique os objetos masterFlexibleConfig e workerFlexibleConfig.

Método HTTP e URL:

POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/clusters

Corpo JSON da solicitação:

{
  "projectId": "PROJECT_ID",
  "clusterName": "CLUSTER_NAME",
  "config": {
    "gceClusterConfig": {
      "zoneUri": ""
    },
    "masterFlexibleConfig": {
      "numInstances": 1,
      "coreCount": 4,
      "hardwareClass": "STANDARD",
      "bootDiskSizeGb": 100
    },
    "workerFlexibleConfig": {
      "numInstances": 2,
      "coreCount": 4,
      "hardwareClass": "STANDARD",
      "bootDiskSizeGb": 100
    }
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto Google Cloud .
  • REGION: a região do Compute Engine em que o cluster será criado, como us-central1.
  • CLUSTER_NAME: o nome do cluster.

Opcional: para adicionar workers secundários, inclua o objeto secondaryWorkerFlexibleConfig com os valores desejados para numInstances, coreCount, hardwareClass e bootDiskSizeGb.

A seguir