Rotação de cluster

.

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

Nesta página, mostramos como configurar clusters que você planeja girar ("clusters girados"), enviar jobs para eles e girar os clusters conforme necessário.

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

Configurar clusters rotacionados

Para configurar clusters rotacionados, crie nomes de cluster exclusivos com sufixo de carimbo de data/hora para distinguir clusters anteriores de novos e anexe rótulos aos clusters que indicam se um cluster faz parte de um pool de clusters rotacionados e se está recebendo envios de jobs novos. Este exemplo usa os rótulos cluster-pool e cluster-state=active para essas finalidades, mas você pode usar seus próprios nomes de rótulo.

  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. Esse nome é usado no nome do cluster e com o rótulo cluster-pool anexado ao cluster para identificar o cluster como parte do pool.
  2. Crie o cluster. Você pode 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 a seguir da CLI do Google Cloud e do gráfico acíclico direcionado (DAG) do Apache Airflow enviam um job do Apache Pig para um cluster. Os rótulos de cluster são usados para enviar o job a um cluster ativo em um pool de clusters.

gcloud

Envie um job do Apache Pig localizado no Cloud Storage. Escolha 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. Escolha 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
)

Fazer rotação de clusters

  1. Atualize os rótulos anexados aos clusters que você está removendo. Este exemplo usa o rótulo cluster-state=pendingfordeletion para indicar que o cluster não está recebendo novas solicitações de job e está sendo substituído, mas você pode 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 para clusters em um pool de clusters com apenas rótulos active. Consulte Enviar jobs para clusters.

  2. Exclua os clusters que você está substituindo depois que eles terminarem de executar os jobs.