。
组织安全政策、法规遵从规则和其他注意事项可能会促使您定期“轮替”Dataproc 集群,方法是按计划删除并重新创建集群。在集群轮替过程中,可以使用最新的 Dataproc 映像版本预配新的集群,同时保留被替换集群的配置设置。
本页介绍了如何设置您计划轮替的集群(“轮替集群”),向这些集群提交作业,然后根据需要轮替集群。
自定义映像集群轮替:重新创建自定义映像集群时,您可以将之前或新自定义应用于之前或新 Dataproc 基础映像。
设置旋转集群
如需设置轮替集群,请创建带有时间戳后缀的唯一集群名称,以区分旧集群和新集群,然后为集群附加标签,以指明集群是否属于轮替集群池,以及是否正在积极接收新的作业提交。此示例使用 cluster-pool
和 cluster-state=active
标签来实现这些目的,但您也可以使用自己的标签名称。
设置环境变量:
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
标签一起使用,以将集群标识为池的一部分。
- cluster-pool-name:与一个或多个集群关联的集群池的名称。此名称用于集群名称中,并与附加到集群的
创建集群。您可以添加参数并使用不同的标签。
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 )
轮替集群
更新要轮替的集群附加的集群标签。此示例使用
cluster-state=pendingfordeletion
标签表示集群未收到新的作业提交,并且正在轮替,但您也可以使用自己的标签来实现此目的。gcloud dataproc clusters update ${CLUSTER_NAME} \ --region=${REGION} \ --update-labels="cluster-state=pendingfordeletion"
更新集群标签后,集群不会收到新作业,因为作业仅提交到具有
active
标签的集群池中的集群(请参阅向集群提交作业)。在要轮替的集群运行完作业后,删除这些集群。