.
组织安全政策、法规遵从规则和其他注意事项可以提示您定期“轮替” 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
标签的集群池内的集群,因此集群不会接收新作业(请参阅将作业提交到集群)。在要轮替的集群完成运行作业后删除这些集群。