Cluster rotation

.

Sicherheitsrichtlinien der Organisation, Regeln zur Einhaltung von Vorschriften und andere Überlegungen können dazu führen, dass Sie Ihre Managed Service for Apache Spark-Cluster in regelmäßigen Abständen „rotieren“ müssen, indem Sie Cluster nach einem Zeitplan löschen und dann neu erstellen. Im Rahmen der Clusterrotation können neue Cluster mit den neuesten Managed Service for Apache Spark-Imageversionen bereitgestellt werden, während 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.

Clusterrotation mit benutzerdefinierten Images: Sie können vorherige oder neue Anpassungen auf ein vorheriges oder neues Managed Service for Apache Spark-Basisimage anwenden, wenn Sie den Cluster mit benutzerdefinierten Images neu erstellen.

Rotierte Cluster einrichten

Um rotierte Cluster einzurichten, erstellen Sie eindeutige Clusternamen mit Zeitstempel-Suffix, 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übermittlungen empfängt. In diesem Beispiel werden die Labels cluster-pool und cluster-state=active für diese Zwecke verwendet. Sie können aber auch eigene Labelnamen verwenden.

  1. 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 mit einem oder mehreren Clustern verknüpft ist. Dieser Name wird im Clusternamen und mit dem Label cluster-pool verwendet, das an den Cluster angehängt ist, um den Cluster als Teil des Pools zu identifizieren.
  2. Erstellen Sie den Cluster. Sie können Argumente hinzufügen und andere 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 gerichteten azyklischen Graphen (Directed Acyclic Graph, DAG) von Apache Airflow wird ein Apache Pig-Job an einen Cluster gesendet. Clusterlabels werden verwendet, um den Job an einen aktiven Cluster in einem Clusterpool zu senden.

gcloud

Senden Sie einen Apache Pig-Job, der sich in Cloud Storage befindet. Wählen Sie den Cluster mit 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

Senden Sie einen Apache Pig-Job, der sich in Cloud Storage befindet, mit Airflow. Wählen Sie den Cluster mit 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

  1. Aktualisieren Sie die Clusterlabels, die an die Cluster angehängt sind, die Sie rotieren. In diesem Beispiel wird das Label cluster-state=pendingfordeletion verwendet, um anzugeben, dass der Cluster keine neuen Jobübermittlungen empfängt und rotiert wird. Sie können aber auch ein eigenes Label für diesen Zweck 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).

  2. Löschen Sie Cluster, die Sie rotieren, nachdem sie die Ausführung von Jobs abgeschlossen haben.