Rotación del clúster

.

Las políticas de seguridad de la organización, las reglas de cumplimiento normativo y otras consideraciones pueden solicitarte que “rotas” tus clústeres de Dataproc en intervalos regulares. Para ello, borra los clústeres y, luego, vuelve a crearlos según un programa. Como parte de la rotación del clúster, los clústeres nuevos se pueden aprovisionar con la configuración Versiones de imágenes de Dataproc sin modificar los parámetros de configuración de los clústeres reemplazados.

En esta página, se muestra cómo configurar los clústeres que planeas rotar ("clústeres girados"), enviarles trabajos y, luego, rotar los clústeres según sea necesario.

Rotación del clúster de imagen personalizada: Puedes aplicar las personalizaciones nuevas o anteriores a una anterior o nueva Imagen base de Dataproc cuando se vuelve a crear el clúster de imágenes personalizadas.

Configura clústeres rotados

Para configurar clústeres rotados, crea nombres de clústeres únicos con sufijos de marca de tiempo para distinguir los clústeres anteriores de los nuevos y, luego, adjunta etiquetas a los clústeres que indiquen si un clúster forma parte de un grupo de clústeres rotados y recibe activamente envíos de trabajos nuevos. En este ejemplo, se usan las etiquetas cluster-pool y cluster-state=active para estos fines, pero puedes usar tus propios nombres de etiquetas.

  1. Establece 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: Es el nombre del grupo de clústeres asociado con uno o más clústeres. Este nombre se usa en el nombre del clúster y con la etiqueta cluster-pool que se adjunta al clúster para identificarlo como parte del grupo.
  2. Crea el clúster. Puedes agregar 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"
    

Envía trabajos a clústeres

Los siguientes servicios de Google Cloud CLI y Grafo acíclico dirigido (DAG) de Apache Airflow y ejemplos envían un trabajo de Apache Pig a un clúster. Las etiquetas de clúster se usan para enviar el trabajo a un clúster activo dentro de un grupo de clústeres.

gcloud

Envía un trabajo de Apache Pig ubicado en Cloud Storage. Elige el clúster con etiquetas.

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

Airflow

Enviar un trabajo de Apache Pig ubicado en Cloud Storage con Airflow Elige el clúster con 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 los clústeres adjuntos a los clústeres que quitarás. Esta de ejemplo usa la etiqueta cluster-state=pendingfordeletion para indicar que el clúster no recibe envíos de trabajos nuevos y se está rotando, pero puedes usar tu propia etiqueta para este propósito.

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

    Después de actualizar la etiqueta del clúster, este no recibe trabajos nuevos, ya que los trabajos se envían a clústeres dentro de un grupo de clústeres solo con etiquetas active (consulta Cómo enviar trabajos a clústeres).

  2. Borra los clústeres que estás rotando después de que terminen de ejecutar trabajos.