Rotazione del cluster

.

I criteri di sicurezza dell'organizzazione, le regole di conformità alle normative e altri considerazioni 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 dei nuovi cluster Versioni immagine 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 una Immagine di base di Dataproc durante la creazione del cluster di immagini personalizzato.

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 cluster-pool collegata 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 CLI Google Cloud e grafo diretto aciclico (DAG) di Apache Airflow inviano un job Apache Pig a un cluster. Le etichette del cluster sono utilizzato 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 situato 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 collegate ai cluster che stai ruotando. Questo esempio utilizza l'etichetta cluster-state=pendingfordeletion per indicare che il cluster non riceve nuovi job inviati e verrà ritirato, ma puoi utilizzare la tua etichetta per questo scopo.

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

    Una volta aggiornata l'etichetta del cluster, quest'ultimo non riceve nuovi job poiché i job vengono inviati ai cluster all'interno di un pool di cluster solo con active etichette (vedi Invia job ai cluster).

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