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 eliminandoli e 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 ruotati"), inviare job e poi ruotare i cluster in base alle esigenze.

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

Configura 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 associa 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 le etichette cluster-pool e cluster-state=active 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'etichetta cluster-pool associata 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 grafo grafo diretto aciclico (DAG) di Apache Airflow inviano un job Apache Pig a un cluster. Le etichette del cluster vengono utilizzate per inviare il job a un cluster attivo all'interno di un pool di cluster.

gcloud

Inviare 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
)

Ruota i cluster

  1. Aggiorna le etichette del cluster associate ai cluster che stai ritirando. Questo esempio utilizza l'etichetta cluster-state=pendingfordeletion per indicare che il cluster non riceve nuovi invii di job e viene ritirato, ma puoi utilizzare la tua etichetta a 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 Invio di job ai cluster).

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