Cluster rotation

.

Sicherheitsrichtlinien der Organisation, Complianceregeln und andere Überlegungen können Sie auffordern, Ihre Dataproc-Cluster in regelmäßigen Abständen zu „rotieren“, indem Sie Cluster löschen und nach einem Zeitplan 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.

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

Rotierte Cluster einrichten

Erstellen Sie zum Einrichten von rotierten Clustern eindeutige Clusternamen mit angehängten Zeitstempeln, um vorherige von neuen Clustern zu unterscheiden. Fügen Sie dann Labels zu Clustern hinzu, die angeben, ob ein Cluster Teil eines rotierten Clusterpools ist und aktiv neue Jobeinreichungen erhält. In diesem Beispiel werden die Labels cluster-pool und cluster-state=active für diese Zwecke verwendet. Sie können jedoch Ihre eigenen 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 an den Cluster angehängten Label cluster-pool verwendet, um den Cluster als Teil des Pools zu identifizieren.
  2. Erstellen Sie den Cluster. Sie können Argumente hinzufügen und unterschiedliche 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

Mit den folgenden Beispielen für die Google Cloud CLI und 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

Mit Airflow einen Apache Pig-Job in Cloud Storage senden. 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 an die Cluster angehängt sind, die Sie rotieren möchten. In diesem Beispiel wird mit dem Label cluster-state=pendingfordeletion angegeben, dass der Cluster keine neuen Jobübermittlungen erhält und rotiert wird. Sie können zu diesem Zweck aber Ihr eigenes Label 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, da Jobs innerhalb eines Clusterpools nur mit active-Labels an Cluster gesendet werden (siehe Jobs an Cluster senden).

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