.
組織のセキュリティ ポリシー、規制コンプライアンス ルール、その他の考慮事項により、クラスタをスケジュールに従って削除してから再作成することで、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
ラベルのみを持つクラスタプールに送信されるためです。クラスタへのジョブの送信をご覧ください。ジョブの実行が完了した後、ローテーションするクラスタを削除します。