Rotation des clusters

.

Les règles de conformité réglementaire, les politiques de sécurité de l'organisation et d'autres considérations peuvent vous inciter à "faire tourner" vos clusters Dataproc à intervalles réguliers en les supprimant, puis en les recréant selon une planification. Dans le cadre de la rotation des clusters, de nouveaux clusters peuvent être provisionnés avec les dernières versions d'image Dataproc tout en conservant les paramètres de configuration des clusters remplacés.

Cette page explique comment configurer les clusters que vous prévoyez de faire tourner ("clusters en rotation"), comment leur envoyer des jobs, puis comment faire tourner les clusters selon vos besoins.

Rotation des clusters d'images personnalisées : vous pouvez appliquer des personnalisations précédentes ou nouvelles à une image de base Dataproc précédente ou nouvelle lorsque vous recréez le cluster d'images personnalisées.

Configurer les clusters en rotation

Pour configurer les clusters en rotation, créez des noms de cluster uniques avec un suffixe d'horodatage afin de distinguer les clusters précédents des nouveaux, puis associez des libellés aux clusters pour indiquer si un cluster fait partie d'un pool de clusters en rotation et s'il reçoit activement de nouvelles tâches. Cet exemple utilise cluster-pool et cluster-state=active libellés à ces fins, mais vous pouvez utiliser vos propres noms de libellés.

  1. Définissez les variables d'environnement :

    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
    

    Remarques :

    • cluster-pool-name : nom du pool de clusters associé à un ou plusieurs clusters. Ce nom est utilisé dans le nom du cluster et avec le cluster-pool libellé associé au cluster pour identifier le cluster comme faisant partie du pool.
  2. Créez le cluster. Vous pouvez ajouter des arguments et utiliser différents libellés.

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

Envoyer des jobs aux clusters

Les exemples suivants de l'interface de ligne de commande Google Cloud et du graphe orienté acyclique (DAG, Directed Acyclic Graph) Apache Airflow envoient un job Apache Pig à un cluster. Les libellés de cluster sont utilisés pour envoyer le job à un cluster actif dans un pool de clusters.

gcloud

Envoyez un job Apache Pig situé dans Cloud Storage. Sélectionnez le cluster à l'aide de libellés.

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

Airflow

Envoyez un job Apache Pig situé dans Cloud Storage à l'aide d'Airflow. Sélectionnez le cluster à l'aide de libellés.

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
)

Faire tourner les clusters

  1. Mettez à jour les libellés de cluster associés aux clusters que vous faites tourner. Cet exemple utilise le cluster-state=pendingfordeletion libellé pour indiquer que le cluster ne reçoit pas de nouvelles tâches et qu'il est en cours de rotation, mais vous pouvez utiliser votre propre libellé à cette fin.

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

    Une fois le libellé de cluster mis à jour, le cluster ne reçoit pas de nouveaux jobs car les jobs ne sont envoyés qu'aux clusters d'un pool de clusters avec active libellés uniquement (voir Envoyer des jobs aux clusters).

  2. Supprimez les clusters que vous faites tourner une fois qu'ils ont terminé d'exécuter les jobs.