Rotación de clústeres

.

Las políticas de seguridad de la organización, las reglas de cumplimiento normativo y otras consideraciones pueden llevarte a "rotar" tus clústeres de Dataproc a intervalos regulares eliminando y, a continuación, recreando los clústeres según una programación. Como parte de la rotación de clústeres, se pueden aprovisionar clústeres nuevos con las versiones de imagen de Dataproc más recientes, al tiempo que se conservan los ajustes de configuración de los clústeres sustituidos.

En esta página se explica cómo configurar los clústeres que quieras rotar ("clústeres rotados"), enviarles trabajos y, a continuación, rotarlos según sea necesario.

Rotación de clústeres de imagen personalizada: puedes aplicar personalizaciones anteriores o nuevas a una imagen base de Dataproc anterior o nueva al volver a crear el clúster de imagen personalizada.

Configurar clústeres rotados

Para configurar clústeres rotados, crea nombres de clúster únicos con sufijo de marca de tiempo para distinguir los clústeres anteriores de los nuevos y, a continuación, asigna etiquetas a los clústeres que indiquen si un clúster forma parte de un grupo de clústeres rotados y si recibe activamente nuevas tareas. En este ejemplo, se usan las etiquetas cluster-pool y cluster-state=active para estos fines, pero puedes usar los nombres de etiqueta que quieras.

  1. Define las variables de entorno:

    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
    

    Notas:

    • cluster-pool-name: el nombre del grupo de clústeres asociado a uno o varios clústeres. Este nombre se usa en el nombre del clúster y con la etiqueta cluster-pool adjunta al clúster para identificarlo como parte del pool.
  2. Crea el clúster. Puedes añadir argumentos y usar diferentes etiquetas.

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

Enviar tareas a clústeres

En los siguientes ejemplos de Google Cloud CLI y grafo acíclico dirigido (DAG) de Apache Airflow se envía una tarea de Apache Pig a un clúster. Las etiquetas de clúster se usan para enviar el trabajo a un clúster activo de un grupo de clústeres.

gcloud

Envía una tarea de Apache Pig ubicada en Cloud Storage. Elige el clúster mediante etiquetas.

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

Airflow

Envía una tarea de Apache Pig ubicada en Cloud Storage mediante Airflow. Elige el clúster mediante etiquetas.

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
)

Rotar clústeres

  1. Actualiza las etiquetas de clústeres asociadas a los clústeres que vas a retirar. En este ejemplo se usa la etiqueta cluster-state=pendingfordeletion para indicar que el clúster no recibe nuevos envíos de trabajos y que se va a sustituir, pero puedes usar tu propia etiqueta para este fin.

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

    Una vez que se actualiza la etiqueta del clúster, este no recibe nuevas tareas, ya que las tareas se envían a clústeres de un pool de clústeres con etiquetas active únicamente (consulta Enviar tareas a clústeres).

  2. Elimina los clústeres que vayas a retirar una vez que hayan terminado de ejecutar las tareas.