.
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.
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é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
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).Supprimez les clusters faisant l'objet d'une rotation après qu'ils ont terminé d'exécuter des jobs.