Rotazione del cluster

.

I criteri di sicurezza dell'organizzazione, le regole di conformità alle normative e altri aspetti possono richiedere di "ruotare" i cluster Dataproc a intervalli regolari eliminandoli e poi ricreandoli 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 con rotazione"), inviare job e poi ruotare i cluster in base alle esigenze.

Rotazione del cluster di immagini 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 univoci con suffisso di timestamp per distinguere i cluster precedenti da quelli nuovi, quindi associa alle etichette dei cluster che indicano se un cluster fa parte di un pool di cluster ruotati e riceve attivamente nuovi job inviati. Questo esempio utilizza le etichette cluster-pool e cluster-state=active per queste finalità, ma puoi utilizzare i nomi delle tue 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'etichetta cluster-pool associata al cluster per identificarlo 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 grafo grafo diretto aciclico (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 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 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
)

Ruota i cluster

  1. Aggiorna le etichette dei cluster associate ai cluster che vuoi ritirare. Questo esempio utilizza l'etichetta cluster-state=pendingfordeletion per indicare che il cluster non riceve nuovi job inviati e verrà eliminato, ma puoi utilizzare la tua etichetta per questo scopo.

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

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

  2. Elimina i cluster che non utilizzi più al termine dell'esecuzione dei job.