.
Sicherheitsrichtlinien für Organisationen, Regeln zur Einhaltung von Vorschriften und andere Überlegungen können Sie dazu veranlassen, Ihre Dataproc-Cluster in regelmäßigen Abständen zu „rotieren“, indem Sie Cluster nach einem Zeitplan löschen und dann neu erstellen. Im Rahmen der Clusterrotation können neue Cluster mit den neuesten Dataproc-Image-Versionen bereitgestellt werden, wobei die Konfigurationseinstellungen der ersetzten Cluster beibehalten werden.
Auf dieser Seite wird beschrieben, wie Sie Cluster einrichten, die Sie rotieren möchten („rotierte Cluster“), Jobs an sie senden und die Cluster dann nach Bedarf rotieren.
Benutzerdefiniertes Image-Clusterrotation: Sie können frühere oder neue Anpassungen auf ein früheres oder neues Dataproc-Basis-Image anwenden, wenn Sie den benutzerdefinierten Image-Cluster neu erstellen.
Rotierte Cluster einrichten
Um rotierte Cluster einzurichten, erstellen Sie eindeutige Clusternamen mit Zeitstempel, um vorherige von neuen Clustern zu unterscheiden. Fügen Sie dann Labels an Cluster an, die angeben, ob ein Cluster Teil eines rotierten Clusterpools ist und aktiv neue Job-Einreichungen empfängt. In diesem Beispiel werden die Labels cluster-pool
und cluster-state=active
verwendet, Sie können aber auch eigene Labelnamen verwenden.
Legen Sie Umgebungsvariablen fest:
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
Hinweise:
- cluster-pool-name: Der Name des Clusterpools, der einem oder mehreren Clustern zugeordnet ist. Dieser Name wird im Clusternamen und mit dem Label
cluster-pool
verwendet, das dem Cluster zugewiesen ist, um den Cluster als Teil des Pools zu identifizieren.
- cluster-pool-name: Der Name des Clusterpools, der einem oder mehreren Clustern zugeordnet ist. Dieser Name wird im Clusternamen und mit dem Label
Erstellen Sie den Cluster. Sie können Argumente hinzufügen und verschiedene Labels verwenden.
gcloud dataproc clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --region=${REGION} \ --bucket=${BUCKET} \ --labels="cluster-pool=${CLUSTER_POOL},cluster-state=active"
Jobs an Cluster senden
In den folgenden Beispielen für die Google Cloud CLI und den Apache Airflow-DAG wird ein Apache Pig-Job an einen Cluster gesendet. Cluster-Labels werden verwendet, um den Job an einen aktiven Cluster in einem Clusterpool zu senden.
gcloud
Einen Apache Pig-Job senden, der sich in Cloud Storage befindet. Wählen Sie den Cluster anhand von Labels aus.
gcloud dataproc jobs submit pig \ --region=${REGION} \ --file=gs://${BUCKET}/scripts/script.pig \ --cluster-labels="cluster-pool=${CLUSTER_POOL},cluster-state=active"
Airflow
Einen Apache Pig-Job, der sich in Cloud Storage befindet, mit Airflow senden. Wählen Sie den Cluster anhand von Labels aus.
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 )
Cluster rotieren
Aktualisieren Sie die Clusterlabels, die an die Cluster angehängt sind, die Sie entfernen. In diesem Beispiel wird das Label
cluster-state=pendingfordeletion
verwendet, um anzugeben, dass der Cluster keine neuen Jobanfragen empfängt und rotiert wird. Sie können aber auch ein eigenes Label verwenden.gcloud dataproc clusters update ${CLUSTER_NAME} \ --region=${REGION} \ --update-labels="cluster-state=pendingfordeletion"
Nachdem das Clusterlabel aktualisiert wurde, empfängt der Cluster keine neuen Jobs mehr, da Jobs nur an Cluster in einem Clusterpool mit
active
-Labels gesendet werden (siehe Jobs an Cluster senden).Löschen Sie Cluster, die Sie aus dem Rotationsverfahren entfernen, nachdem sie Jobs ausgeführt haben.