Rotation des clusters

.

Règles de sécurité de l'organisation, règles de conformité réglementaire et autres ces considérations peuvent vous inciter à « rotation » vos clusters Dataproc à intervalles réguliers, en les supprimant, puis en les recréant selon un calendrier. Lors de la rotation des clusters, vous pouvez provisionner de nouveaux clusters avec les dernières versions d'images Dataproc tout en conservant les paramètres de configuration des clusters remplacés.

Cette page explique comment configurer des clusters que vous prévoyez de faire pivoter des clusters), leur envoyer des jobs, puis effectuer une rotation des clusters si nécessaire.

Rotation de cluster avec 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 avec image personnalisée.

Configurer des clusters pivotés

Pour configurer des clusters en rotation, créez des noms de cluster uniques avec un suffixe de code temporel pour distinguer les anciens des nouveaux clusters, puis joignez des libellés aux clusters pour indiquer s'ils font partie d'un pool de clusters en rotation et s'ils reçoivent activement de nouvelles soumissions de tâches. Cet exemple utilise les libellés 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 l'étiquette cluster-pool associée au cluster pour l'identifier comme faisant partie du 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 jobs aux clusters

Les exemples de Google Cloud CLI et de graphe orienté acyclique (DAG) Apache Airflow suivants envoient une tâche Apache Pig à un cluster. Les libellés de cluster sont utilisés pour envoyer la tâche à un cluster actif dans un pool de clusters.

gcloud

Envoyer une tâche Apache Pig située dans Cloud Storage. Choisissez le cluster à l'aide d'étiquettes.

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

Airflow

Envoyer une tâche Apache Pig située 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 pivoter des clusters

  1. Mettez à jour les libellés des clusters que vous retirez. Cet exemple utilise le libellé cluster-state=pendingfordeletion pour indiquer que le cluster ne reçoit pas de nouvelles soumissions de 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 l'étiquette de cluster mise à jour, le cluster ne reçoit plus de nouveaux jobs puisque les jobs sont envoyés à des clusters au sein d'un pool de clusters avec active libellés uniquement (voir Envoyer des jobs aux clusters).

  2. Supprimez les clusters faisant l'objet d'une rotation après qu'ils ont terminé d'exécuter des jobs.