Rotazione del cluster

.

Le norme di sicurezza dell'organizzazione, le regole di conformità normativa e altre considerazioni possono richiedere di "ruotare" i cluster Dataproc a intervalli regolari eliminando e poi ricreando i cluster in base a una pianificazione. Nell'ambito della rotazione dei cluster, è possibile eseguire il provisioning di nuovi cluster con le versioni più recenti delle immagini Dataproc mantenendo le impostazioni di configurazione dei cluster sostituiti.

Questa pagina mostra come configurare i cluster che prevedi di ruotare ("cluster ruotati"), inviare job e poi ruotare i cluster in base alle esigenze.

Rotazione dei cluster diimmagini personalizzate: Puoi applicare personalizzazioni precedenti o nuove a un'immagine di base Dataproc precedente o nuova quando ricrei il cluster di immagini personalizzate.

Configurare i cluster ruotati

Per configurare i cluster ruotati, crea nomi di cluster univoci con suffisso timestamp per distinguere i cluster precedenti da quelli nuovi, quindi aggiungi etichette ai cluster che indicano se un cluster fa parte di un pool di cluster ruotati e riceve attivamente nuovi invii di job. Questo esempio utilizza cluster-pool e cluster-state=active etichette per questi scopi, ma puoi utilizzare i tuoi nomi di etichette.

  1. Imposta le variabili di ambiente:

    PROJECT=project ID \
      REGION=region \
      CLUSTER_POOL=cluster-pool-name \
      CLUSTER_NAME=$CLUSTER_POOL-$(date '+%Y%m%d%H%M') \
      BUCKET=Cloud Storage bucket-name
    

    Note:

    • cluster-pool-name: il nome del pool di cluster associato a uno o più cluster. Questo nome viene utilizzato nel nome del cluster e con l'cluster-pool etichetta collegata al cluster per identificare il cluster come parte del pool.
  2. Crea il cluster. Puoi aggiungere argomenti e utilizzare etichette diverse.

    gcloud dataproc clusters create ${CLUSTER_NAME} \
      --project=${PROJECT_ID} \
      --region=${REGION} \
      --bucket=${BUCKET} \
      --labels="cluster-pool=${CLUSTER_POOL},cluster-state=active"
    

Inviare job ai cluster

I seguenti esempi di Google Cloud CLI e di grafici aciclici diretti (DAG) di Apache Airflow inviano un job Apache Pig a un cluster. Le etichette dei cluster vengono utilizzate per inviare il job a un cluster attivo all'interno di un pool di cluster.

gcloud

Invia un job Apache Pig che si trova in Cloud Storage. Scegli il cluster utilizzando le etichette.

gcloud dataproc jobs submit pig \
    --region=${REGION} \
    --file=gs://${BUCKET}/scripts/script.pig \
    --cluster-labels="cluster-pool=${CLUSTER_POOL},cluster-state=active"
  

Airflow

Invia un job Apache Pig che si trova in Cloud Storage utilizzando Airflow. Scegli il cluster utilizzando le etichette.

from airflow import DAG
from airflow.providers.google.cloud.operators.dataproc import DataprocSubmitJobOperator
from datetime import datetime

# Declare variables
project_id=  # e.g: my-project
region="us-central1"
dag_id='pig_wordcount'
cluster_labels={"cluster-pool":${CLUSTER_POOL},
                "cluster-state":"active"}
wordcount_script="gs://bucket-name/scripts/wordcount.pig"

# Define DAG

dag = DAG(
    dag_id,
    schedule_interval=None,
    start_date=datetime(2023, 8, 16),
    catchup=False
)

PIG_JOB = {
    "reference": {"project_id": project_id},
    "placement": {"cluster_labels": cluster_labels},
    "pig_job": {"query_file_uri": wordcount_script},
}

wordcount_task = DataprocSubmitJobOperator(
    task_id='wordcount',
    region=region,
    project_id=project_id,
    job=PIG_JOB,
    dag=dag
)

Ruotare i cluster

  1. Aggiorna le etichette dei cluster collegate ai cluster che stai ruotando. Questo esempio utilizza l'eticolo cluster-state=pendingfordeletion per indicare che il cluster non riceve nuovi invii di job e che viene ruotato, ma puoi utilizzare la tua etichetta per questo scopo.

    gcloud dataproc clusters update ${CLUSTER_NAME} \
        --region=${REGION} \
        --update-labels="cluster-state=pendingfordeletion"
    

    Dopo aver aggiornato l'etichetta del cluster, il cluster non riceve nuovi job perché i job vengono inviati solo ai cluster all'interno di un pool di cluster con etichette active (vedi Inviare job ai cluster).

  2. Elimina i cluster che stai ruotando dopo che hanno terminato l'esecuzione dei job.