集群轮替

组织安全政策、法规遵从规则和其他注意事项可能会促使您定期“轮替”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. 在要轮替的集群运行完作业后,删除这些集群。