Rotação do cluster

.

Políticas de segurança da organização, regras de conformidade regulatória e outros considerações podem solicitar a "rotação" os clusters do Dataproc em intervalos regulares excluindo e recriando clusters de acordo com uma programação. Como parte da rotação de clusters, é possível provisionar novos clusters com a versão Versões de imagem do Dataproc, mantendo as configurações dos clusters substituídos.

Nesta página, mostramos como configurar clusters que você planeja girar ("rotacionados" clusters"), enviar jobs para eles e, em seguida, alternar os clusters 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 girados

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

  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 ao um ou mais clusters. Esse nome é usado no nome do cluster e com o cluster-pool rótulo anexado ao cluster 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 de CLI do Google Cloud e gráfico acíclico dirigido (DAG, na sigla em inglês) do Apache Airflow abaixo enviam um job do Apache Pig para um cluster. Os rótulos de cluster são usada 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
)

Rotacionar clusters

  1. Atualize os rótulos dos clusters que você está removendo. 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 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 a clusters em um pool de clusters com rótulos active. Consulte Enviar jobs para clusters.

  2. Excluir clusters que você está removendo depois que os jobs forem concluídos.