集群轮替

.

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