叢集旋轉

機構安全性政策、法規遵循規則和其他考量因素,可能會促使您定期「輪替」Dataproc 叢集,也就是排定時間刪除叢集,然後重新建立叢集。在叢集輪替期間,系統會使用最新 Dataproc 映像檔版本佈建新叢集,同時保留已替換叢集的設定。

本頁說明如何設定您打算輪替的叢集 (「輪替叢集」)、將工作提交至這些叢集,然後視需要輪替叢集。

自訂映像檔叢集輪替: 重新建立自訂映像檔叢集時,您可以將先前或新的自訂項目套用至先前或新的 Dataproc 基礎映像檔。

設定輪替叢集

如要設定輪替叢集,請建立具有時間戳記後置字串的專屬叢集名稱,以區分新舊叢集,然後將標籤附加至叢集,指出叢集是否屬於輪替叢集集區,並主動接收新的工作提交內容。本例會使用 cluster-poolcluster-state=active 標籤達成這些目的,但您可以使用自己的標籤名稱。

  1. 設定環境變數:

    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
    

    注意:

    • cluster-pool-name:與一或多個叢集相關聯的叢集集區名稱。這個名稱會用於叢集名稱,並附加至叢集的 cluster-pool 標籤,用來將叢集識別為集區的一部分。
  2. 建立叢集。您可以新增引數並使用不同標籤。

    gcloud dataproc clusters create ${CLUSTER_NAME} \
      --project=${PROJECT_ID} \
      --region=${REGION} \
      --bucket=${BUCKET} \
      --labels="cluster-pool=${CLUSTER_POOL},cluster-state=active"
    

將工作提交至叢集

下列 Google Cloud CLI 和 Apache Airflow 有向非循環圖 (DAG) 範例會將 Apache Pig 工作提交至叢集。叢集標籤可用於將工作提交至叢集集區內的有效叢集。

gcloud

提交位於 Cloud Storage 中的 Apache Pig 工作。使用標籤挑選叢集。

gcloud dataproc jobs submit pig \
    --region=${REGION} \
    --file=gs://${BUCKET}/scripts/script.pig \
    --cluster-labels="cluster-pool=${CLUSTER_POOL},cluster-state=active"
  

Airflow

使用 Airflow 提交位於 Cloud Storage 中的 Apache Pig 工作。 使用標籤挑選叢集。

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
)

輪替叢集

  1. 更新要輪替叢集所附加的叢集標籤。這個範例使用 cluster-state=pendingfordeletion 標籤,表示叢集不會接收新的工作提交內容,且正在輪替,但您可以使用自己的標籤達到這個目的。

    gcloud dataproc clusters update ${CLUSTER_NAME} \
        --region=${REGION} \
        --update-labels="cluster-state=pendingfordeletion"
    

    更新叢集標籤後,叢集不會收到新工作,因為工作只會提交至具有 active 標籤的叢集集區內叢集 (請參閱「將工作提交至叢集」)。

  2. 執行完工作後,請刪除要輪替的叢集。