Rotation des clusters

.

Les règles de sécurité de l'organisation, les règles de conformité réglementaire et d'autres éléments à prendre en compte peuvent vous inviter à "alterner" vos clusters Dataproc à intervalles réguliers en les supprimant, puis en les recréant selon un calendrier. Dans le cadre de la rotation des clusters, les nouveaux clusters peuvent être provisionnés avec les dernières versions des images Dataproc tout en conservant les paramètres de configuration des clusters remplacés.

Cette page explique comment configurer les clusters que vous prévoyez d'alterner ("clusters avec rotation"), leur envoyer des tâches, puis procéder à la rotation si nécessaire.

Rotation du cluster 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 des clusters en rotation

Pour configurer des clusters en rotation, créez des noms de cluster uniques avec suffixe d'horodatage qui les distingueront des nouveaux clusters, puis associez des étiquettes aux clusters qui indiquent si un cluster fait partie d'un pool de clusters en rotation et reçoit activement de nouvelles tâches soumises. Cet exemple utilise les étiquettes cluster-pool et cluster-state=active à ces fins, mais vous pouvez utiliser vos propres noms d'étiquettes.

  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 celui-ci dans le pool.
  2. Créez le cluster. Vous pouvez ajouter des arguments et utiliser différentes étiquettes.

    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 à des clusters

Les exemples suivants de Google Cloud CLI et d'Apache Airflow graphe orienté acyclique (DAG) envoient une tâche Apache Pig à un cluster. Les étiquettes 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 étiquettes.

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

Airflow

Envoyez une tâche Apache Pig située dans Cloud Storage à l'aide d'Airflow. Sélectionnez le cluster à l'aide des étiquettes.

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
)

Effectuer une rotation des clusters

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

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

    Une fois l'étiquette de cluster mise à jour, le cluster ne reçoit plus de nouvelles tâches, car les tâches sont envoyées à des clusters au sein d'un pool de clusters avec uniquement des étiquettes active (consultez la section Envoyer des tâches à des clusters).

  2. Supprimez les clusters sur lesquels vous effectuez une rotation une fois l'exécution des tâches terminée.