Escalonar clusters do Dataproc

Depois de criar um cluster do Cloud Dataproc, será possível ajustar ("escalonar") o cluster aumentando ou diminuindo o número de nós de trabalho principais ou secundários no cluster. Escalone um cluster do Cloud Dataproc a qualquer momento, mesmo quando houver jobs em execução no cluster. Não é possível alterar o tipo de máquina de um cluster atual (escalonamento vertical). Para escalonar verticalmente, crie um cluster usando um tipo de máquina com suporte e migre os jobs para o novo cluster.

Por que escalonar um cluster do Dataproc?

  1. Para aumentar o número de trabalhos e executar um job mais rapidamente
  2. Para diminuir o número de trabalhos e economizar. Consulte Desativação otimizada como opção ao reduzir o tamanho de um cluster para evitar a perda do trabalho em andamento.
  3. Para aumentar o número de nós e expandir o armazenamento disponível do Hadoop Distributed Filesystem (HDFS).

Como os clusters podem ser escalonados mais de uma vez, convém aumentar/diminuir o tamanho do cluster ao mesmo tempo e diminuir/aumentar o tamanho posteriormente.

Como usar escalonamento

Há três maneiras de escalonar o cluster do Dataproc:

  1. Use a ferramenta de linha de comando gcloud na CLI gcloud.
  2. Edite a configuração do cluster no console do Google Cloud.
  3. Usar a REST API.

Os novos trabalhos adicionados a um cluster usarão o mesmo tipo de máquina dos trabalhos existentes. Por exemplo, se um cluster for criado com workers que usam o tipo de máquina n1-standard-8, os novos workers também usarão o tipo de máquina n1-standard-8.

Escalone o número de trabalhos principais, secundários (preemptivos) ou ambos. Por exemplo, se você só escalonar o número de trabalhos preemptivos, o número de trabalhos principais permanecerá o mesmo.

gcloud

Para escalonar um cluster com gcloud dataproc clusters update, execute o comando a seguir.
gcloud dataproc clusters update cluster-name \
    --region=region \
    [--num-workers and/or --num-secondary-workers]=new-number-of-workers
em que cluster-name é o nome do cluster a ser atualizado e new-number-of-workers é o número atualizado de nós de trabalho principais e/ou secundários. Por exemplo, para escalonar um cluster chamado "dataproc-1" para usar cinco nós de trabalho principais, execute o comando a seguir.
gcloud dataproc clusters update dataproc-1 \
    --region=region \
    --num-workers=5
...
Waiting on operation [operations/projects/project-id/operations/...].
Waiting for cluster update operation...done.
Updated [https://dataproc.googleapis.com/...].
clusterName: my-test-cluster
...
  masterDiskConfiguration:
    bootDiskSizeGb: 500
  masterName: dataproc-1-m
  numWorkers: 5
  ...
  workers:
  - my-test-cluster-w-0
  - my-test-cluster-w-1
  - my-test-cluster-w-2
  - my-test-cluster-w-3
  - my-test-cluster-w-4
...

API REST

Consulte clusters.patch.

Exemplo

PATCH /v1/projects/project-id/regions/us-central1/clusters/example-cluster?updateMask=config.worker_config.num_instances,config.secondary_worker_config.num_instances
{
  "config": {
    "workerConfig": {
      "numInstances": 4
    },
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  },
  "labels": null
}

Console

Após a criação de um cluster, é possível escaloná-lo abrindo a página Detalhes do cluster na página Clusters do Console do Google Cloud e clicando no botão Editar na guia Configuração.
Informe um novo valor para o número de nós de trabalho e/ou nós de trabalho preemptivos (atualizados para "5" e "2", respectivamente, na captura de tela a seguir).
Clique em Salvar para atualizar o cluster.

Como o Dataproc seleciona nós de cluster para remoção

Em clusters criados com as versões de imagem 1.5.83+, 2.0.57+ e 2.1.5+, ao reduzir um cluster, o Dataproc tenta minimizar o impacto da remoção de nós em aplicativos YARN em execução removendo os nós inativos, não íntegros e ociosos e, em seguida, removendo os nós com o menor número de mestres de aplicativo YARN em execução e contêineres em execução.

Desativação otimizada

Quando você diminui um cluster, o trabalho em andamento pode ser interrompido antes da conclusão. Se você estiver usando o Dataproc v 1.2 ou posterior, use a desativação otimizada, que incorpora Desativação otimizada de nós do YARN para concluir o trabalho em andamento em um worker antes de ser removido do cluster do Cloud Dataproc.

Desativação otimizada e trabalhos secundários

O grupo de trabalhos preemptivos (secundário) continuará provisionando ou excluindo trabalhos para alcançar o tamanho esperado mesmo após uma operação de escalonamento de cluster ser marcada como concluída. Se você tentar realizar a desativação otimizada em um worker secundário e receber uma mensagem de erro semelhante a esta:

"O grupo de workers secundários não pode ser modificado fora do Dataproc. Se você tiver criado ou atualizado este cluster recentemente, espere alguns minutos antes de fazer uma desativação otimizada. Dessa forma, todas as instâncias secundárias poderão ingressar no cluster ou sair dele. Tamanho esperado do grupo de worker secundário: x, tamanho real: y",

aguarde alguns minutos e repita a solicitação de desativação otimizada.

Outras observações:

  • Você pode desativar à força os trabalhos preemptivos a qualquer momento.
  • Você desativa de modo otimizado os trabalhos principais a qualquer momento.

Como usar a desativação otimizada

A desativação otimizada do Dataproc incorpora a Desativação otimizada de nós YARN para concluir o trabalho em andamento em um worker antes de ser removido do cluster do Cloud Dataproc. Como padrão, a desativação otimizada fica desativada. Para ativá-la, você define um valor de tempo limite ao atualizar o cluster de modo a remover um ou mais trabalhadores do cluster.

gcloud

Ao atualizar um cluster para remover um ou mais workers, use o comando gcloud dataproc clusters update com a sinalização --graceful-decommission-timeout. Os valores de tempo limite (string) podem ser um valor de "0s" (o padrão, desativação à força, não otimizada) ou uma duração positiva em relação ao tempo atual (por exemplo, "3s"). A duração máxima é um dia.
gcloud dataproc clusters update cluster-name \
    --region=region \
    --graceful-decommission-timeout="timeout-value" \
    [--num-workers and/or --num-secondary-workers]=decreased-number-of-workers \
    ... other args ...

API REST

Consulte clusters.patch.gracefulDecommissionTimeout. Os valores de tempo limite (string) podem ser um valor de "0" (o padrão, desativação de modo forçado, e não otimizado) ou uma duração em segundos (por exemplo, "3s"). A duração máxima é um dia.

Console

Após a criação de um cluster, é possível selecionar a desativação otimizada de um cluster abrindo a página Detalhes do cluster na página Clusters do Console do Google Cloud e clicando no botão Editar na guia Configuração.
Na seção Desativação otimizada, marque a caixa "Usar desativação otimizada" e selecione um valor de tempo limite.
Clique em Salvar para atualizar o cluster.

Como cancelar uma operação de redução de escala de desativação otimizada

Em clusters do Dataproc criados com as versões de imagem 2.0.57+ ou 2.1.5+, é possível executar o comando gcloud dataproc operations cancel ou emitir uma solicitação da API Dataproc operations.cancel para cancelar uma operação de redução de escala de desativação otimizada.

Quando você cancela uma operação de redução de escala de desativação otimizada:

  • Os workers no estado DECOMMISSIONING são recomissionados e se tornam ACTIVE ao concluir o cancelamento da operação.

  • Se a operação de redução de escala incluir atualizações de rótulo, talvez elas não entrem em vigor.

Para verificar o status da solicitação de cancelamento, execute o comando gcloud dataproc operations describe ou emita uma solicitação operations.get da API Dataproc. Se a operação de cancelamento for bem-sucedida, o status da operação interna será marcado como CANCELLED.