.
組織のセキュリティ ポリシー、規制遵守ルール、その他の考慮事項により、スケジュールに従ってクラスタを削除してから再作成することで、Dataproc クラスタを定期的に「ローテーション」することが必要になる場合があります。クラスタのローテーションの一環として、置換されたクラスタの構成設定を保持しながら、最新の 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: 1 つ以上のクラスタに関連付けられているクラスタプールの名前。この名前は、クラスタ名で使用され、クラスタに付加された
cluster-poolラベルとともに、クラスタをプールの一部として識別するために使用されます。
- cluster-pool-name: 1 つ以上のクラスタに関連付けられているクラスタプールの名前。この名前は、クラスタ名で使用され、クラスタに付加された
クラスタを作成します。引数を追加したり、別のラベルを使用できます。
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ラベルのみを持つクラスタプールに送信されるためです。クラスタへのジョブの送信をご覧ください。ローテーションするクラスタは、ジョブの実行が完了したら削除します。