Rotasi cluster

.

Kebijakan keamanan organisasi, aturan kepatuhan terhadap peraturan, dan pertimbangan lainnya dapat mendorong Anda untuk "merotasi" cluster Managed Service untuk Apache Spark secara berkala dengan menghapus, lalu membuat ulang cluster sesuai jadwal. Sebagai bagian dari rotasi cluster, cluster baru dapat disediakan dengan versi image Managed Service untuk Apache Spark terbaru sambil mempertahankan setelan konfigurasi cluster yang diganti.

Halaman ini menunjukkan cara menyiapkan cluster yang Anda rencanakan untuk dirotasi ("cluster yang dirotasi"), mengirimkan tugas ke cluster tersebut, lalu merotasi cluster sesuai kebutuhan.

Rotasi clusterimage kustom: Anda dapat menerapkan penyesuaian sebelumnya atau baru ke image dasar Managed Service untuk Apache Spark sebelumnya atau baru saat membuat ulang cluster image kustom.

Menyiapkan cluster yang dirotasi

Untuk menyiapkan cluster yang dirotasi, buat nama cluster unik dengan akhiran stempel waktu untuk membedakan cluster sebelumnya dari cluster baru, lalu lampirkan label ke cluster yang menunjukkan apakah cluster tersebut merupakan bagian dari kumpulan cluster yang dirotasi dan secara aktif menerima pengiriman tugas baru. Contoh ini menggunakan label cluster-pool dan cluster-state=active untuk tujuan ini, tetapi Anda dapat menggunakan nama label Anda sendiri.

  1. Menetapkan variabel lingkungan:

    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
    

    Catatan:

    • cluster-pool-name: Nama kumpulan cluster yang terkait dengan satu atau beberapa cluster. Nama ini digunakan dalam nama cluster dan dengan label cluster-pool yang dilampirkan ke cluster untuk mengidentifikasi cluster sebagai bagian dari kumpulan.
  2. Buat cluster. Anda dapat menambahkan argumen dan menggunakan label yang berbeda.

    gcloud dataproc clusters create ${CLUSTER_NAME} \
      --project=${PROJECT_ID} \
      --region=${REGION} \
      --bucket=${BUCKET} \
      --labels="cluster-pool=${CLUSTER_POOL},cluster-state=active"
    

Mengirimkan tugas ke cluster

Contoh Google Cloud CLI dan directed acyclic graph (DAG) Apache Airflow berikut mengirimkan tugas Apache Pig ke cluster. Label cluster digunakan untuk mengirimkan tugas ke cluster aktif dalam kumpulan cluster.

gcloud

Kirim tugas Apache Pig yang berada di Cloud Storage. Pilih cluster menggunakan label.

gcloud dataproc jobs submit pig \
    --region=${REGION} \
    --file=gs://${BUCKET}/scripts/script.pig \
    --cluster-labels="cluster-pool=${CLUSTER_POOL},cluster-state=active"
  

Airflow

Kirim tugas Apache Pig yang berada di Cloud Storage menggunakan Airflow. Pilih cluster menggunakan label.

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
)

Merotasi cluster

  1. Perbarui label cluster yang dilampirkan ke cluster yang Anda rotasi. Contoh ini menggunakan label cluster-state=pendingfordeletion untuk menunjukkan bahwa cluster tidak menerima pengiriman tugas baru dan sedang dirotasi, tetapi Anda dapat menggunakan label Anda sendiri untuk tujuan ini.

    gcloud dataproc clusters update ${CLUSTER_NAME} \
        --region=${REGION} \
        --update-labels="cluster-state=pendingfordeletion"
    

    Setelah label cluster diperbarui, cluster tidak akan menerima tugas baru karena tugas hanya dikirimkan ke cluster dalam kumpulan cluster dengan active label saja (lihat Mengirimkan tugas ke cluster).

  2. Hapus cluster yang Anda rotasi setelah cluster selesai menjalankan tugas.