Parada programada de cluster

Para evitar Google Cloud cobranças por um cluster inativo ou a necessidade de excluir e recriar um cluster para evitar cobranças, use o recurso de parada programada do cluster do Dataproc, que interrompe todas as VMs do cluster. Não há cobranças por VMs interrompidas, mas as cobranças continuam para recursos associados, como discos permanentes.

A interrupção de um cluster interrompe todas as VMs dele e faz com que os jobs em execução falhem. Quando um cluster é interrompido, não é possível atualizá-lo, enviar jobs para ele nem acessar componentes opcionais usando o gateway de componentes do Dataproc. Depois de interromper um cluster, é possível reiniciar o cluster e retomar o trabalho.

A parada programada de cluster está disponível para clusters criados com as versões 2.2.42+, 2.1.76+ e 2.0.57+ e versões de imagem mais recentes.

Recursos

  • É possível interromper clusters após um período de inatividade especificado, em um horário futuro especificado ou após um período especificado desde a solicitação de criação do cluster.

  • A parada programada do cluster é compatível com clusters com workers secundários e clusters de escalonamento zero.

  • É possível atualizar ou cancelar a configuração de parada programada do cluster.

Limitações e considerações

  • A parada programada de clusters não é compatível com clusters que têm SSDs locais.
  • Não é possível definir valores de parada programada do cluster usando o console Google Cloud .
  • Embora seja possível atualizar a configuração de parada programada de um cluster, uma operação de parada iniciada vai continuar. Para verificar se a operação de interrupção foi iniciada, examine os registros do cluster no Cloud Logging.
  • Atualizar uma programação de interrupção em um cluster que já passou do horário de interrupção programada remove a configuração de interrupção programada. Para reativar a parada programada, inclua um horário futuro na solicitação de atualização.

Ações que desativam a parada programada do cluster

Enquanto um cluster estiver em execução, as seguintes ações vão desativar a parada programada do cluster até que a ação de desativação seja revertida:

Cálculo do tempo de inatividade do cluster

Para que um cluster seja considerado inativo, as seguintes condições precisam ser atendidas:

  • a criação do cluster é concluída. O tempo gasto no provisionamento e na inicialização do cluster é excluído do cálculo do tempo ocioso.
  • nenhum job está sendo executado no cluster
  • O cluster não está no estado STOPPED

Enviar um job para o cluster ou interromper um cluster redefine o cálculo do tempo ocioso.

A propriedade do cluster dataproc:dataproc.cluster-ttl.consider-yarn-activity afeta o cálculo do tempo ocioso do cluster da seguinte maneira:

  • Essa propriedade é ativada (definida como true) por padrão.
  • Quando essa propriedade está ativada, a atividade do YARN e da API Dataproc Jobs precisa estar inativa para iniciar e continuar incrementando o cálculo do tempo de inatividade do cluster.
    • A atividade do YARN inclui aplicativos YARN pendentes e em execução.
    • A atividade da API Jobs do Dataproc inclui jobs pendentes e em execução enviados a essa API.
  • Quando essa propriedade é definida como false, o cálculo do tempo de inatividade do cluster começa e continua apenas quando a atividade da API Jobs do Dataproc está inativa.

Usar a parada programada de cluster

CLI da gcloud

É possível definir valores de parada programada ao criar um cluster usando a Google Cloud CLI ou a API Dataproc. Depois de criar o cluster, é possível atualizá-lo para mudar ou excluir valores de scheduledstop definidos anteriormente.

Sinalização Descrição Melhor granularidade Valor mín. Valor máx.
--stop-max-idle1 Aplicável aos comandos de criação e atualização de clusters. A duração entre o momento em que o cluster entra no estado inativo (após a criação ou inicialização) e o momento em que ele começa a ser interrompido. Forneça a duração no formato IntegerUnit, em que a unidade pode ser "s, m, h, d" (segundos, minutos, horas, dias, respectivamente). Exemplos: "30m" ou "1d" (30 minutos ou 1 dia a partir do momento em que o cluster fica inativo). 1 segundo 5 minutos 14 dias
--no-stop-max-idle Aplicável apenas ao comando de atualização do cluster. Cancela a interrupção programada do cluster pela flag --stop-max-idle definida anteriormente. Não relevante Não aplicável Não relevante
--stop-expiration-time2 Aplicável aos comandos de criação e atualização de clusters. O horário para começar a interromper o cluster no formato de data e hora ISO 8601. É possível gerar data e hora no formato correto usando o gerador de carimbo de data/hora. Por exemplo, "2017-08-22T13:31:48-08:00" especifica o tempo de expiração 13h21m48s no fuso horário UTC -8:00.1 segundo10 minutos a partir do horário atual 14 dias a partir do horário atual
--stop-max-age2 Aplicável aos comandos de criação e atualização de clusters. Duração entre o momento do envio da solicitação de criação do cluster e o momento em que ele começa a ser interrompido. Forneça a duração no formato IntegerUnit, em que a unidade pode ser "s, m, h, d" (segundos, minutos, horas, dias). Exemplos: "30m": 30 minutos a partir de agora; "1d": 1 dia a partir de agora. 1 segundo 10 minutos 14 dias
Observações:
  1. É possível transmitir a flag stop-max-idle com a flag stop-expiration-time ou stop-max-age na solicitação de criação ou atualização do cluster. A primeira a se tornar verdadeira entra em vigor para parar o cluster.
  2. É possível transmitir a flag stop-expiration-time ou a flag stop-max-age para o comando de criação ou atualização do cluster, mas não ambas.

Exemplo de criação de cluster:

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --stop-max-idle=DURATION \
    --stop-expiration-time=TIME \
    ... other flags ...

Exemplo de atualização do cluster:

Exemplo:

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --stop-max-idle=DURATION \
    --no-stop-max-age \
    ... other flags

API REST

É possível criar ou atualizar valores de parada programada em um cluster definindo os campos e valores da API Dataproc ClusterLifecycleConfig listados na tabela a seguir como parte de uma solicitação da API Dataproc cluster.create ou cluster.patch.

Sinalização Descrição Melhor granularidade Valor mín. Valor máx.
idleStopTtl1 Aplicável aos comandos de criação e atualização de clusters. A duração entre o momento em que o cluster entra no estado inativo após a criação ou atualização e o momento em que ele começa a ser interrompido. Forneça uma duração em segundos com até nove dígitos fracionários, terminando com "s". Exemplo: "3.5s". Envie uma solicitação cluster.patch com uma duração vazia para cancelar um valor de idleDeleteTtl definido anteriormente. 1 segundo 5 minutos
14 dias
autoStopTime2 Aplicável aos comandos de criação e atualização de clusters. O momento de iniciar a interrupção do cluster. Forneça um carimbo de data/hora no formato UTC "Zulu" RFC 3339, precisamente medido em nanossegundos. Exemplo: "2014-10-02T15:01:23.045123456Z". 1 segundo 10 minutos a partir do horário atual 14 dias a partir do horário atual
autoStopTtl2 A duração entre o momento do envio da solicitação de criação ou atualização do cluster e o momento em que ele começa a ser interrompido. Forneça uma duração em segundos com até nove dígitos fracionários, terminando com 's'. Exemplo: "3.5s". 1 segundo 10 minutos.
Envie uma solicitação cluster.patch com uma duração vazia para cancelar um valor autoStopTtl definido anteriormente.
14 dias
Observações:
  1. É possível transmitir a flag stop-max-idle com a flag stop-expiration-time ou stop-max-age na solicitação de criação ou atualização do cluster. A primeira a se tornar verdadeira entra em vigor para parar o cluster.
  2. É possível transmitir a flag stop-expiration-time ou a flag stop-max-age para o comando de criação ou atualização do cluster, mas não ambas.

Como usar a interrupção programada com a exclusão programada

Se você usar a parada programada do cluster com a exclusão programada do cluster ao criar ou atualizar um cluster, observe as seguintes restrições:

  • O período de stop-max-idle precisa ser menor ou igual ao período de delete-max-idle ou ao período resultante de delete-max-age ou delete-expiration-time.

  • Os stop-max-age e stop-expiration-time precisam ser posteriores a delete-max-age e delete-expiration-time, respectivamente.

Ver as configurações do cluster para parada programada

CLI da gcloud

Use o comando gcloud dataproc clusters list para confirmar se um cluster tem a interrupção programada ativada.

 gcloud dataproc clusters list \
     --region=REGION

Exemplo de resposta:

...
NAME         WORKER_COUNT ... SCHEDULED_STOP
CLUSTER_ID   NUMBER       ... enabled
...

Use o comando gcloud dataproc clusters describe para verificar as configurações de parada programada LifecycleConfig de um cluster.

gcloud dataproc clusters describe CLUSTER_NAME \
    --region=REGION

Exemplo de resposta:

...
lifecycleConfig:
  autoStopTime: '2018-11-28T19:33:48.146Z'
  idleStopTtl: 1800s
  idleStartTime: '2018-11-28T18:33:48.146Z'
...

Os valores autoStopTime e idleStopTtl são definidos pelo usuário. O Dataproc gera o valor idleStartTime, que é o horário de início mais recente do cluster.

Embora o Dataproc calcule idleStartTime com base na cessação da atividade do job, o mecanismo de parada programada do cluster considera tanto o idleStartTime quanto a última hora de início do cluster. Especificamente, se um cluster for interrompido por um usuário ou pelo Dataproc, o cálculo de inatividade para o recurso de parada programada será redefinido. Isso significa que a contagem regressiva para uma parada programada será reiniciada na próxima inicialização do cluster. No entanto, o idleStartTime não é redefinido quando um cluster interrompido é reiniciado. Ele continua refletindo a última ocorrência de inatividade do job antes da interrupção.

Portanto, duas condições precisam ser atendidas para que o Dataproc interrompa um cluster com base no idleStopTtl:

  1. O cluster precisa estar inativo pelo período especificado por idleStopTtl desde a última vez que foi iniciado.
  2. O cluster precisa estar inativo durante o período especificado por idleStopTtl desde a última redefinição de idleStartTime.

API REST

Você pode fazer uma solicitação clusters.list para confirmar se um cluster tem a interrupção programada ativada.