Workers secundários do Managed Service for Apache Spark

Além de usar as VMs padrão do Compute Engine como workers do Serviço Gerenciado para Apache Spark (chamados de workers "principais"), os clusters do Serviço Gerenciado para Apache Spark podem usar secondary workers.

As seguintes características se aplicam a todos os workers secundários em um cluster do Serviço Gerenciado para Apache Spark:

  • Somente processamento : workers secundários não armazenam dados. Elas só funcionam como nós de processamento. Portanto, você pode usar workers secundários para escalonar a computação sem escalonar o armazenamento.

  • Somente workers secundários : é possível criar um cluster de escala zero apenas com workers secundários. No entanto, se você criar um cluster padrão e especificar apenas workers secundários (sem especificar o número de workers principais), o Serviço Gerenciado para Apache Spark vai adicionar dois workers principais ao cluster.

  • Tipo de máquina : por padrão, os workers secundários usam o tipo de máquina dos workers principais do cluster. Por exemplo, se você criar um cluster com workers principais que usam tipos de máquina n1-standard-4, por padrão, todos os workers secundários adicionados ao cluster também usarão máquinas n1-standard-4.

    Em vez de usar o tipo de máquina do worker primário padrão para workers secundários, é possível especificar uma ou mais listas classificadas de tipos de máquina para workers secundários. Consulte VMs flexíveis do Serviço Gerenciado para Apache Spark para mais informações.

  • Tamanho do disco permanente: por padrão, os workers secundários são criados com o menor disco de 1.000 GB ou com o tamanho do disco de inicialização do worker primário. Esse espaço em disco é usado para armazenamento em cache local de dados e não está disponível por meio do HDFS. É possível substituir o tamanho do disco padrão com o gcloud dataproc clusters create --secondary-worker-boot-disk-size comando na criação do cluster. É possível especificar essa flag mesmo que o cluster não tenha workers secundários no momento da criação.

  • Criação assíncrona: quando você adiciona workers secundários criando ou escalonando um cluster, eles podem não ser provisionados no momento em que a operação de criação ou atualização é concluída. Isso ocorre porque o Serviço Gerenciado para Apache Spark gerencia workers secundários usando grupos de instâncias gerenciadas (MIGs, na sigla em inglês), que criam VMs de forma assíncrona assim que podem ser provisionadas (consulte Como verificar o status de instâncias gerenciadas).

Workers secundários preemptivos e não preemptivos

Há três tipos de workers secundários: VMs spot, VMs preemptivas padrão, e VMs não preemptivas. O tipo de worker secundário padrão do Serviço Gerenciado para Apache Spark é a VM preemptiva padrão. É possível especificar uma combinação de workers secundários spot e não preemptivos.

Exemplo: se você selecionar três workers secundários ao criar um cluster, você poderá especificar três VMs spot, três VMs preemptivas, três VMs não preemptivas ou uma combinação de workers spot e não preemptivos.

Workers preemptivos

  • A possível remoção de workers preemptivos pode afetar a estabilidade do job, mas você pode optar por usar instâncias preemptivas para reduzir os custos de computação por hora para processamento de dados não críticos ou criar clusters muito grandes com um menor custo total. Use a calculadora de preços do Google Cloud para fazer uma estimativa dos custos.

  • Para ter melhores resultados, o número de workers preemptivos no cluster precisa ser menor que 50% do número total de todos os workers (principais e todos os secundários) do cluster.

  • Ao usar workers preemptivos, os jobs provavelmente apresentarão um número maior de falhas transitórias de tarefas de workers únicos em comparação a jobs executados em workers não preemptivos. Para aumentar a tolerância do job a falhas de tarefas de nível inferior, defina valores de propriedade de cluster semelhantes aos valores de propriedade padrão usados com clusters de escalonamento automático para aumentar o número máximo de novas tentativas das tarefas e evitar falhas de jobs.

  • Consideração de economia de custos:o uso de VMs preemptivas nem sempre economiza custos, já que as preempções podem causar uma execução mais longa do job, resultando em custos mais altos. Embora o uso do modo de flexibilidade aprimorado (EFM) com VMs preemptivas possa ajudar a mitigar esse resultado, a economia geral de custos das VMs preemptivas vai variar de acordo com cada caso de uso. Geralmente, os jobs de curta duração são mais adequados para o uso de VM preemptiva, já que a probabilidade de preempções durante a execução do job será menor. Teste diferentes opções de job, como VMs não preemptivas e VMs preemptivas com EFM, para estimar os custos e chegar à melhor solução.

Workers não preemptivos

Selecionar workers secundários

É possível especificar o número e o tipo de workers secundários ao criar um cluster usando o Google Cloud console, CLI gcloud ou a API Dataproc.

  • É possível misturar workers secundários spot com não preemptivos.
  • É possível atualizar seu cluster depois que ele é criado para alterar o número, mas não o tipo, de workers secundários no cluster.
  • As atualizações de rótulos são propagadas para todos os workers secundários preemptivos em 24 horas. As atualizações de rótulos não são propagadas para workers secundários não preemptivos. As atualizações de rótulos são propagadas para todos os workers adicionados a um cluster após uma atualização de rótulo. Por exemplo, se você escalonar verticalmente o cluster, todos os novos workers principais e secundários terão os novos rótulos.

Console

É possível especificar o número de workers secundários ao criar um cluster do Serviço Gerenciado para Apache Spark no Google Cloud console. Após a criação de um cluster, você pode adicionar e remover workers secundários editando a configuração do cluster no Google Cloud console.

Criar um cluster com workers secundários

  1. Abra a página "Criar cluster".
  2. Clique em Configuração adicional para expandir essa seção.
  3. Edite Workers secundários.
  4. No painel aberto, especifique o número, o tipo e outras configurações de workers secundários.

Atualizar um cluster com instâncias secundárias

Para atualizar o número de workers secundários em um cluster, clique no nome do cluster na Clusters página do Google Cloud console. Na página Detalhes do cluster. Clique na guia Configuração e em Editar e atualize o número no campo "Nós de workers secundários".

Remover todas as instâncias secundárias de um cluster

Para remover todos os workers secundários de um cluster, atualize a configuração do cluster conforme explicado anteriormente, especificando 0 no campo "Nós de workers secundários".

Comando da CLI gcloud

Use the gcloud dataproc clusters create comando para adicionar workers secundários a um cluster quando ele for criado. Após a criação de um cluster, você pode adicionar ou remover workers secundários de ou para o cluster com o gcloud dataproc clusters update comando (o número, mas não o tipo de workers secundários, pode ser atualizado).

Criar um cluster com workers secundários

Para criar um cluster com workers secundários, use o gcloud dataproc clusters create comando com o --num-secondary-workers argumento. Os workers secundários são VMs preemptivas padrão por padrão. É possível especificar workers secundários não preemptivos ou spot ao criar um cluster definindo a flag --secondary-worker-type como `non-preemptible` ou `spot`. Os exemplos a seguir mostram como criar um cluster com cada tipo de worker secundário: `preemptible` (padrão), spot (preemptivo) e não preemptivo. É possível usar outras flags para misturar workers secundários spot com não preemptivos.

Exemplo 1

O comando a seguir cria "cluster1" com dois workers secundários preemptivos padrão (tipo padrão).

gcloud dataproc clusters create cluster1 \
    --num-secondary-workers=2 \
    --region=us-central1
Exemplo 2

O comando a seguir usa a flag secondary-worker-type para criar "cluster2" com dois workers secundários spot (preemptivos).

gcloud dataproc clusters create cluster2 \
    --num-secondary-workers=2 \
    --secondary-worker-type=spot \
    --region=us-central1

Exemplo 3

O comando a seguir usa a flag secondary-worker-type para criar "cluster3" com dois workers secundários não preemptivos.

gcloud dataproc clusters create cluster3 \
    --num-secondary-workers=2 \
    --secondary-worker-type=non-preemptible \
    --region=us-central1

Mude o tamanho do disco de inicialização do worker secundário. Por padrão, todos os workers secundários são criados com o menor disco de 1.000 GB ou com o tamanho do disco de inicialização do worker primário. Esse espaço em disco é usado para armazenamento em cache local de dados e não está disponível por meio do HDFS. É possível substituir o tamanho do disco padrão com o gcloud dataproc clusters create --secondary-worker-boot-disk-size comando na criação do cluster. Essa flag pode ser especificada mesmo que o cluster não tenha workers secundários no momento da criação.

Deixe o Google Cloud console construir sua solicitação de criação de cluster. Na parte de baixo da página "Criar cluster", clique em Linha de comando equivalente ou REST equivalente para que o Google Cloud console construa um comando da CLI gcloud ou uma solicitação de API REST equivalente.

Atualizar um cluster com workers secundários

Para atualizar um cluster e adicionar ou remover workers secundários, use o gcloud dataproc clusters update comando com a --num-secondary-workers flag.

Exemplo

O comando a seguir atualiza example-cluster para usar quatro workers secundários (do tipo padrão ou do tipo especificado ao criar o cluster).

gcloud dataproc clusters update example-cluster \
    --num-secondary-workers=4 \
    --region=us-central1

Remover todos os workers secundários de um cluster

Para remover todos os workers secundários de um cluster, use o gcloud dataproc clusters update comando com --num-secondary-workers definido como 0.

Exemplo

O comando a seguir remove todos os workers secundários de "example-cluster".

gcloud dataproc clusters update example-cluster \
    --num-secondary-workers=0 \
    --region=us-central1

API REST

Criar um cluster com workers secundários

Use a API clusters.create do Serviço Gerenciado para Apache Spark para adicionar workers secundários a um cluster quando ele for criado. Os exemplos a seguir mostram como criar um cluster com cada tipo de worker secundário: preemptible (padrão), spot (preemptivo) e non-preemptible. É possível usar outros campos para misturar workers secundários spot com não preemptivos.

Exemplo 1

A solicitação POST a seguir cria um "cluster1" com dois workers de VM preemptivos padrão (tipo padrão).


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster1",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}

Exemplo 2

A solicitação POST a seguir cria um "cluster2" com dois workers de VM spot (preemptivos).


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster2",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "SPOT"
    }
  }
}

Exemplo 3

A solicitação POST a seguir cria "cluster3" com dois não preemptivos workers secundários.


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster3",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "NON_PREEMPTIBLE"
    }
  }
}

Atualizar um cluster com workers secundários

Use a API clusters.patch do Serviço Gerenciado para Apache Spark clusters.patch para adicionar e remover workers secundários.

Exemplo

A seguinte solicitação PATCH atualiza um cluster para ter quatro workers secundários (do tipo padrão ou do tipo especificado ao criar o cluster).


PATCH /v1/projects/project-id/regions/region/clusters/cluster-name?updateMask=config.secondary_worker_config.num_instances
{
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 4
    }
  }
}

Deixe o Google Cloud console construir sua solicitação de criação de cluster. Na parte de baixo da página "Criar cluster", clique em Linha de comando equivalente ou REST equivalente para que o Google Cloud console construa um comando da CLI gcloud ou uma solicitação de API REST equivalente.

Resolver problemas de workers secundários

  • Problemas de permissão da conta de serviço: os workers secundários são criados por um grupo gerenciado de instâncias. Se houver um problema de permissão, os registros do Serviço Gerenciado para Apache Spark não vão informar a falha na criação de workers secundários, mas os workers com falha serão listados na guia Instâncias de VM da página Detalhes do cluster no Google Cloud console sem uma marca de seleção verde. Para conferir a listagem, abra a página Clusters do Serviço Gerenciado para Apache Spark, e clique no nome do cluster para abrir a página Detalhes do cluster.

  • Problemas de permissões do grupo gerenciado de instâncias:para verificar se há um problema com as permissões do grupo gerenciado de instâncias:

    1. Encontre o nome do grupo gerenciado de instâncias (instanceGroupManagerName).

      Google Cloud Console do

      1. Abra a página Clusters e clique no nome do cluster para abrir a página Detalhes do cluster do cluster.
      2. Clique em REST equivalente na parte de baixo da página e confira o valor config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName.

      CLI gcloud

      Execute o gcloud dataproc clusters describe comando com a --format flag para mostrar o instanceGroupManagerName.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION \
          --format='value(config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName)'
      

      API REST

      Envie uma solicitação clusters.get para retornar o valor de config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName.

    2. Visualize os registros em Análise de registros.
    • Selecione o tipo de recurso Google Compute Engine Instance Group e filtre o nome do grupo gerenciado de instâncias.

    • Como alternativa, é possível aplicar um filtro de registro para `resource.type="gce_instance_group" and resource.labels.instance_group_name=INSTANCE_GROUP_MANAGER_NAME.

Misturar workers secundários spot com não preemptivos

É possível especificar uma combinação de workers secundários spot e não preemptivos ao criar um cluster do Serviço Gerenciado para Apache Spark.

Configurações de workers secundários para misturar workers spot com não preemptivos

Use as seguintes configurações de workers secundários ao criar um cluster do Serviço Gerenciado para Apache Spark para ter um nível mínimo de capacidade de worker secundário com a capacidade de aumentar a capacidade quando as VMs spot estiverem disponíveis:

  • Número de workers secundários:o número total de workers secundários a serem provisionados.

  • Tipo de worker secundário:spot é o tipo de worker secundário ao misturar workers spot com não preemptivos.

  • standardCapacityBase:o número de workers secundários não preemptivos (padrão) a serem provisionados. Os workers secundários não preemptivos são provisionados antes de outros tipos de workers secundários.

  • standardCapacityPercentAboveBase:depois que o número standardCapacityBase de workers secundários for preenchido, o número restante de workers secundários necessários para atender ao número total de workers secundários solicitados será preenchido com uma combinação de VMs não preemptivas e spot, da seguinte maneira:

    • standardCapacityPercentAboveBase: a porcentagem dos workers secundários restantes a serem preenchidos com VMs não preemptivas.
    • O número restante necessário para atender ao número total de workers secundários solicitados é preenchido com VMs spot.

Exemplo:

  • Número de workers secundários: 15
  • standardCapacityBase: 5
  • standardCapacityPercentAboveBase 30%

Resultado:

  • Não preemptivo: 8 = 5 (standardCapacityBase) + 3 (30% dos 10 restantes)
  • Spot: 7 (70% dos 10 restantes)
  • Total = 15

Criar um cluster com uma combinação de workers secundários spot e não preemptivos

É possível usar a CLI gcloud ou a API Dataproc para misturar workers secundários spot com não preemptivos ao criar um cluster.

gcloud

Execute o comando a seguir localmente ou no Cloud Shell para criar um cluster com uma combinação de workers secundários spot e não preemptivos.

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --secondary-worker-type=spot \
    --num-secondary-workers=NUMBER_SECONDARY_WORKERS \
    --secondary-worker-standard-capacity-base=STANDARD_CAPACITY_BASE \
    --secondary-worker-standard-capacity-percent-above-base=STANDARD_CAPACITY_PERCENT_ABOVE_BASE \
    OTHER_FLAGS_AS_NEEDED

Observações:

API

Para misturar workers secundários spot com não preemptivos, defina os campos da API preemptibility, standardCapacityBase e standardCapacityPercentAboveBase do Serviço Gerenciado para Apache Spark como parte de uma solicitação cluster.create , conforme mostrado no exemplo de JSON a seguir:

{
  "clusterName": "CLUSTER_NAME",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 15,
      **"preemptibility": "spot"**,
      "instanceFlexibilityPolicy": {
        "provisioningModelMix": {
          **"standardCapacityBase": STANDARD_CAPACITY_BASE**
          **"standardCapacityPercentAboveBase": STANDARD_CAPACITY_PERCENT_ABOVE_BASE**
        }
      }
    }
  }
}

Observações:

Combinar a mistura de workers secundários com VMs flexíveis

É possível misturar workers secundários spot e não preemptivos e especificar formatos de VM flexíveis para workers secundários ao criar um cluster.

Exemplo da CLI gcloud:

gcloud dataproc clusters create cluster-name \
    --project=project-id \
    --region=us-central1 \
    --secondary-worker-type=spot \
    --num-secondary-workers=15 \
    --secondary-worker-standard-capacity-base=5 \
    --secondary-worker-standard-capacity-percent-above-base=30 \
    --secondary-worker-machine-types="type=n2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=e2-standard-8,type=t2d-standard-8,rank=1"
    ...other flags as needed

Características de mistura de workers secundários

Esta seção descreve alguns dos comportamentos e características associados à mistura de workers secundários spot e não preemptivos.

Preferência de worker secundário

O Serviço Gerenciado para Apache Spark não dá preferência a VMs spot ou não preemptivas ao programar aplicativos em workers secundários.

Escalonamento de workers secundários

Quando os workers secundários são escalonados por escalonamento automático ou manual, o Serviço Gerenciado para Apache Spark mantém a proporção spot para não preemptiva solicitada ao adicionar workers secundários.

Atualizar as configurações de mistura de workers secundários

Você especifica a mistura de workers secundários spot e não preemptivos ao criar um cluster do Serviço Gerenciado para Apache Spark. Não é possível mudar as configurações de mistura de workers secundários depois de criar o cluster.

Preempção de worker secundário spot

  • O Serviço Gerenciado para Apache Spark não controla o tempo de preempção da VM spot (consulte Preempção de VMs spot).
  • Quando a preempção spot ocorre, o grupo de workers secundários pode ser executado com capacidade reduzida temporariamente até que o Compute Engine reprovisione as VMs preemptivas.
  • O Serviço Gerenciado para Apache Spark não vai adicionar capacidade a um grupo de workers secundários além das configurações iniciais do grupo.