Cluster rotation

.

Sicherheitsrichtlinien der Organisation, rechtliche Bestimmungen und andere Aspekte können dazu führen, dass Sie Ihre Dataproc-Cluster in regelmäßigen Abständen „rotieren“ müssen, indem Sie sie 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, während die Konfigurationseinstellungen der ersetzten Cluster beibehalten werden.

Auf dieser Seite erfahren Sie, wie Sie Cluster einrichten, die Sie rotieren möchten („rotierende Cluster“), Jobs an diese senden und die Cluster dann nach Bedarf rotieren.

Clusterrotation für benutzerdefinierte Images: Sie können vorherige oder neue Anpassungen auf ein vorheriges oder neues Dataproc-Basis-Image anwenden, wenn Sie den Cluster mit dem benutzerdefinierten Image neu erstellen.

Rotierende Cluster einrichten

Wenn Sie zyklische Cluster einrichten möchten, erstellen Sie eindeutige Clusternamen mit einem Zeitstempel als Suffix, um vorherige von neuen Clustern zu unterscheiden. Fügen Sie dann Labels zu Clustern hinzu, die angeben, ob ein Cluster Teil eines zyklischen Clusterpools ist und aktiv neue Jobeinreichungen erhält. In diesem Beispiel werden die Labels cluster-pool und cluster-state=active 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 cluster-pool-Label verwendet, das dem Cluster zugewiesen ist, um den Cluster als Teil des Pools zu identifizieren.
  2. 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 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 innerhalb eines Clusterpools zu senden.

gcloud

Einen Apache Pig-Job in Cloud Storage senden Wählen Sie den Cluster mithilfe 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 in Cloud Storage mit Airflow einreichen Wählen Sie den Cluster mithilfe 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

  1. Aktualisieren Sie die Clusterlabels, die den Clustern zugewiesen sind, die Sie austauschen. In diesem Beispiel wird das Label cluster-state=pendingfordeletion verwendet, um anzugeben, dass der Cluster keine neuen Jobeinreichungen erhält und ausrangiert 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, erhält der Cluster keine neuen Jobs mehr, da Jobs nur an Cluster innerhalb eines Clusterpools mit active-Labels gesendet werden (siehe Jobs an Cluster senden).

  2. Löschen Sie Cluster, die Sie austauschen, nachdem die Jobs ausgeführt wurden.