Rotation des clusters

.

Les règles de sécurité de l'organisation, les règles de conformité réglementaires 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. Lors 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 pivoter ("clusters pivotés"), comment y envoyer des jobs, puis comment faire pivoter les clusters selon vos besoins.

Rotation des clusters d'image personnalisée : 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'image personnalisée.

Configurer des clusters pivotés

Pour configurer des clusters permutés, créez des noms de cluster uniques avec un suffixe d'horodatage afin de distinguer les anciens clusters des nouveaux. Ensuite, ajoutez des libellés aux clusters pour indiquer si un cluster fait partie d'un pool de clusters permutés et s'il reçoit activement de nouvelles demandes de job. Cet exemple utilise les libellés cluster-pool et cluster-state=active à 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 libellé cluster-pool 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 tâches aux clusters

Les exemples suivants du Google Cloud CLI et de graphe orienté acyclique (DAG) Apache Airflow envoient une tâche Apache Pig à un cluster. Les libellés de cluster permettent d'envoyer le job à un cluster actif dans un pool de clusters.

gcloud

Envoyez une tâche Apache Pig située dans Cloud Storage. Sélectionnez le cluster à l'aide des 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 des 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 pivoter des clusters

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

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

    Une fois l'étiquette du cluster mise à jour, le cluster ne reçoit plus de tâches, car elles ne sont envoyées qu'aux clusters d'un pool de clusters avec des étiquettes active (voir Envoyer des tâches à des clusters).

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