.
Les règles de sécurité de votre organisation, les règles de conformité réglementaire et d'autres considérations peuvent vous inviter à "faire tourner" 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 ("clusters pivotés"), leur envoyer des tâches, puis les faire pivoter si nécessaire.
Rotation de cluster 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 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.
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.
- 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
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 à des 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. 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 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
Mettez à jour les libellés des clusters que vous supprimez. 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 le libellé du cluster mis à jour, le cluster ne reçoit plus de nouvelles tâches, car les tâches sont envoyées aux clusters d'un pool de clusters avec des libellés
active
uniquement (voir Envoyer des tâches à des clusters).Supprimez les clusters que vous remplacez une fois qu'ils ont terminé d'exécuter des tâches.