Scala i cluster Dataproc

Dopo aver creato un cluster Dataproc, puoi regolare ("scalare") il cluster aumentando o diminuendo il numero di nodi worker primari o secondari (scalabilità orizzontale) nel cluster. Puoi scalare un cluster Dataproc in qualsiasi momento, anche quando i job sono in esecuzione sul cluster. Non puoi modificare il tipo di macchina di un cluster esistente (scalabilità verticale). Per scalare verticalmente, crea un cluster utilizzando un tipo di macchina supportato, quindi esegui la migrazione dei job nel nuovo cluster.

Perché scalare un cluster Dataproc?

  1. per aumentare il numero di worker e velocizzare l'esecuzione di un job
  2. per ridurre il numero di worker al fine di risparmiare denaro (vedi Ritiro gestito automaticamente come opzione da utilizzare per il ridimensionamento di un cluster per evitare di perdere il lavoro in corso).
  3. per aumentare il numero di nodi per espandere lo spazio di archiviazione disponibile di Hadoop Distributed Filesystem (HDFS)

Poiché i cluster possono essere scalati più di una volta, potresti voler aumentare/diminuire le dimensioni del cluster in una sola volta e poi diminuire/aumentare le dimensioni in un secondo momento.

Utilizzo della scalabilità

Esistono tre modi per scalare il cluster Dataproc:

  1. Utilizza lo strumento a riga di comando gcloud nell'interfaccia a riga di comando gcloud CLI.
  2. Modifica la configurazione del cluster nella console Google Cloud.
  3. Utilizzare l'API REST.

I nuovi worker aggiunti a un cluster utilizzeranno lo stesso tipo di macchina dei worker esistenti. Ad esempio, se viene creato un cluster con worker che utilizzano il tipo di macchina n1-standard-8, anche i nuovi worker utilizzeranno il tipo di macchina n1-standard-8.

Puoi scalare il numero di worker principali, il numero di worker secondari (prerilasciabili) o entrambi. Ad esempio, se scali solo il numero di worker prerilasciabili, il numero di worker principali rimane invariato.

gcloud

Per scalare un cluster con gcloud dataproc clusters update, esegui questo comando.
gcloud dataproc clusters update cluster-name \
    --region=region \
    [--num-workers and/or --num-secondary-workers]=new-number-of-workers
dove cluster-name è il nome del cluster da aggiornare e new-number-of-workers è il numero aggiornato di nodi worker principali e/o secondari. Ad esempio, per scalare un cluster denominato "dataproc-1" in modo da utilizzare cinque nodi worker principali, esegui questo comando.
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

Vedi clusters.patch.

Esempio

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

Dopo aver creato un cluster, puoi scalare un cluster aprendo la pagina Dettagli cluster per il cluster dalla pagina Cluster della console Google Cloud, quindi facendo clic sul pulsante Modifica nella scheda Configurazione.
Inserisci un nuovo valore per il numero di nodi worker e/o nodi worker prerilasciabili (aggiornati rispettivamente a "5" e "2" nello screenshot seguente).
Fai clic su Salva per aggiornare il cluster.

In che modo Dataproc seleziona i nodi del cluster da rimuovere

Nei cluster creati con versioni immagine 1.5.83+, 2.0.57+ e 2.1.5+, durante lo scale down di un cluster, Dataproc tenta di ridurre al minimo l'impatto della rimozione dei nodi sull'esecuzione delle applicazioni YARN, rimuovendo prima i nodi inattivi, non integri e inattivi, quindi rimuovendo i nodi con il minor numero di master di applicazioni YARN in esecuzione ed eseguendo i container.

Ritiro gestito automaticamente

Quando esegui il downgrade di un cluster, il lavoro in corso potrebbe interrompersi prima del completamento. Se utilizzi Dataproc 1.2 o versioni successive, puoi usare il ritiro gestito automaticamente, che incorpora la dismissione gestita dei nodi YARN per completare il lavoro in corso su un worker prima che venga rimosso dal cluster Cloud Dataproc.

Ritiro gestito e worker secondari

Il gruppo di worker prerilasciabili (secondari) continua a eseguire il provisioning o l'eliminazione dei worker per raggiungere le dimensioni previste anche dopo che un'operazione di scalabilità del cluster è contrassegnata come completata. Se tenti di ritirare automaticamente un worker secondario e ricevi un messaggio di errore simile al seguente:

"Il gruppo di worker secondari non può essere modificato al di fuori di Dataproc. Se hai creato o aggiornato questo cluster di recente, attendi qualche minuto prima di eseguire il ritiro controllato per consentire a tutte le istanze secondarie di entrare nel cluster o uscirne. Dimensioni previste del gruppo di worker secondari: x, dimensioni effettive: y",

attendi qualche minuto, quindi ripeti la richiesta di ritiro gestita.

Nota anche:

  • Puoi dismettere forzatamente i worker prerilasciabili in qualsiasi momento.
  • Dismetti automaticamente i worker principali in qualsiasi momento

Utilizzo del ritiro gestito automaticamente

Il ritiro gestito automaticamente di Dataproc incorpora la scommissione controllata dei nodi YARN per completare il lavoro in corso su un worker prima che venga rimosso dal cluster Cloud Dataproc. Per impostazione predefinita, la rimozione controllata è disabilitato. Puoi abilitarlo impostando un valore di timeout quando aggiorni il cluster per rimuovere uno o più worker dal cluster.

gcloud

Quando aggiorni un cluster per rimuovere uno o più worker, utilizza il comando gcloud dataproc clusters update con il flag --graceful-decommission-timeout. I valori di timeout (stringa) possono essere un valore di "0s" (il valore predefinito; ritiro forzatamente non controllato) o una durata positiva relativa all'ora corrente (ad esempio "3s"). La durata massima è di 1 giorno.
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

Vedi clusters.patch.gracefulDecommissionTimeout. I valori di timeout (stringa) possono essere un valore di "0" (il valore predefinito; ritiro forzato senza tolleranza forzata) o una durata in secondi (ad esempio, "3s"). La durata massima è di 1 giorno.

Console

Dopo la creazione di un cluster, puoi selezionare la rimozione controllata di un cluster aprendo la pagina Dettagli cluster per il cluster dalla pagina Cluster della console Google Cloud, quindi facendo clic sul pulsante Modifica nella scheda Configurazione.
Nella sezione Ritiro gestito automaticamente, seleziona la casella "Utilizza la rimozione controllata", quindi seleziona un valore di timeout.
Fai clic su Salva per aggiornare il cluster.

Come annullare un'operazione di scale down della rimozione controllata

Sui cluster Dataproc creati con immagini 2.0.57+ o 2.1.5+, puoi eseguire il comando gcloud dataproc operations cancel o inviare una richiesta dell'API Dataproc operations.cancel per annullare un'operazione di scale down di smantellamento controllato.

Quando annulli un'operazione di scaledown di rimozione controllata:

  • i lavoratori in uno stato DECOMMISSIONING vengono rimessi in servizio e diventano ACTIVE al termine dell'annullamento dell'operazione.

  • Se l'operazione di scale down include aggiornamenti delle etichette, gli aggiornamenti potrebbero non essere applicati.

Per verificare lo stato della richiesta di annullamento, puoi eseguire il comando gcloud dataproc operations describe o inviare una richiesta operations.get dell'API Dataproc. Se l'operazione di annullamento ha esito positivo, lo stato dell'operazione interna viene contrassegnato come ANNULLATO.