Rotação de clusters

.

As políticas de segurança da organização, as regras de conformidade regulatória e outras considerações podem solicitar que você "alterne" os clusters do Dataproc em intervalos regulares, excluindo e recriando os clusters em uma programação. Como parte da rotação de clusters, novos clusters podem ser provisionados com as versões mais recentes de imagem do Dataproc, mantendo as definições de configuração dos clusters substituídos.

Nesta página, mostramos como configurar clusters que você planeja girar ("clusters rotacionados"), enviar jobs para eles e fazer a rotação deles conforme necessário.

Rotação de cluster de imagem personalizada: é possível aplicar personalizações anteriores ou novas a uma imagem base anterior ou nova do Dataproc ao recriar o cluster de imagem personalizada.

Configurar clusters rotacionados

Para configurar clusters rotacionados, crie nomes de cluster únicos e sufixados por carimbo de data/hora para distinguir os clusters anteriores dos novos. Em seguida, anexe rótulos aos clusters que indicam se um cluster faz parte de um pool de clusters rotacionado e recebe ativamente novos envios de jobs. O exemplo usa rótulos cluster-pool e cluster-state=active para essas finalidades, mas é possível usar seus próprios nomes.

  1. Defina as variáveis de ambiente:

    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
    

    Observações:

    • cluster-pool-name: o nome do pool de clusters associado a um ou mais clusters. Ele é usado no nome do cluster e com o rótulo cluster-pool anexado a ele para identificá-lo como parte do pool.
  2. Crie o cluster. É possível adicionar argumentos e usar rótulos diferentes.

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

Enviar jobs para clusters

Os exemplos da Google Cloud CLI e do gráfico acíclico dirigido (DAG, na sigla em inglês) do Apache Airflow enviam um job do Apache Pig para um cluster. Eles são usados para enviar o job a um cluster ativo em um pool.

gcloud

Envie um job do Apache Pig localizado no Cloud Storage. Escolher o cluster usando rótulos.

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

Airflow

Envie um job do Apache Pig localizado no Cloud Storage usando o Airflow. Escolher o cluster usando rótulos.

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
)

Alternar clusters

  1. Atualize os rótulos dos clusters anexados aos clusters que estão sendo rotacionados. Esses exemplos usam o rótulo cluster-state=pendingfordeletion para indicar que o cluster não está recebendo novos envios de jobs e está sendo rotacionado, mas é possível usar seu próprio rótulo para essa finalidade.

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

    Depois que o rótulo do cluster é atualizado, ele não recebe novos jobs, já que eles são enviados aos clusters dentro de um pool com apenas rótulos active. Consulte Enviar jobs para clusters.

  2. Exclua os clusters que estão em rotação quando eles terminarem de executar jobs.