Workers secundários do Managed Service for Apache Spark

Além de usar 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 workers do secondary.

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 escalonamento 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 primários), o Serviço Gerenciado para Apache Spark vai adicionar dois workers primários ao cluster.

  • Tipo de máquina: por padrão, os workers secundários usam o tipo de máquina dos workers primários do cluster. Por exemplo, se você criar um cluster com workers primários 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 de 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 tamanho entre 1.000 GB ou 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 de disco padrão com o comando gcloud dataproc clusters create --secondary-worker-boot-disk-size na criação do cluster. É possível especificar essa flag mesmo que o cluster não tenha workers secundários quando for criado.

  • 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 gerenciados de instâncias (MIGs), que criam VMs de maneira 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, 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

  • Embora a possível remoção de workers preemptivos possa afetar a estabilidade do job, é possível 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 custo total menor. Use a calculadora de preços do Google Cloud para estimar os custos.

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

  • Ao usar workers preemptivos, é provável que seus jobs tenham um número maior de falhas temporárias de tarefas de worker único em comparação com jobs executados em workers não preemptivos. Para aumentar a tolerância do job a falhas de tarefas de baixo nível, defina valores de propriedade do 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 de tarefas e ajudar a evitar falhas de jobs.

  • Uma 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 de job mais longa, resultando em custos de job mais altos. Embora o uso do Modo de flexibilidade avançada (EFM, na sigla em inglês) com VMs preemptivas possa ajudar a mitigar esse resultado, a economia geral de custos das VMs preemptivas varia de acordo com cada caso de uso. Em geral, 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 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 console doGoogle Cloud , a 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ótulo se propagam para todos os workers adicionados a um cluster após uma atualização de rótulo. Por exemplo, se você escalonar 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 console do Google Cloud . Depois que um cluster for criado, será possível adicionar e remover workers secundários editando a configuração do cluster no console doGoogle Cloud .

Criar um cluster com workers secundários

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

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 página Clusters do console do Google Cloud . Na página Detalhes do cluster. Clique na guia Configuração, em Editar e atualize o número no campo "Nós de trabalho secundários".

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

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

Comando da CLI gcloud

Use o comando gcloud dataproc clusters create para adicionar workers secundários a um cluster quando ele for criado. Depois que um cluster é criado, é possível adicionar ou remover workers secundários dele com o comando gcloud dataproc clusters update (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 comando gcloud dataproc clusters create com o argumento --num-secondary-workers. Os workers secundários são VMs preemptivas 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 combinar 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 sinalização 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 o "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 tamanho entre 1.000 GB ou 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 de disco padrão pelo comando gcloud dataproc clusters create --secondary-worker-boot-disk-size na criação do cluster. Essa sinalização pode ser especificada mesmo que o cluster não tenha workers secundários no momento da criação.

Deixe o console do Google Cloud criar 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 console do Google Cloud crie um comando da CLI gcloud ou uma solicitação da API REST equivalente.

Atualizar um cluster com workers secundários

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

Exemplo

O comando a seguir atualiza example-cluster para usar quatro workers secundários (do tipo padrão ou do tipo especificado quando você criou 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 comando gcloud dataproc clusters update 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 combinar 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 (preemptiva).


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 workers secundários não preemptivos.


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 para adicionar e remover workers secundários.

Exemplo

A solicitação PATCH a seguir atualiza um cluster para ter quatro workers secundários (do tipo padrão ou do tipo especificado quando você criou 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 console do Google Cloud criar 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 console do Google Cloud crie um comando da CLI gcloud ou uma solicitação da 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 console doGoogle Cloud sem uma marca de seleção verde. Para ver 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).

      Console doGoogle Cloud

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

      CLI da gcloud

      Execute o comando gcloud dataproc clusters describe com a flag --format para exibir 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. Confira os registros na Análise de registros.
    • Selecione o tipo de recurso Google Compute Engine Instance Group e filtre pelo nome do grupo gerenciado de instâncias.

    • Como alternativa, é possível aplicar um filtro de geração de registros para `resource.type="gce_instance_group" e 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 secundários spot com não preemptivos

Use as seguintes configurações de worker secundário 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 secundários 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 é preenchido, o número restante de workers secundários necessários para atender ao número total de workers secundários solicitados é preenchido com uma combinação de VMs não preemptivas e VMs 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 preemptiva: 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 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 combinação 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 combinação de workers secundários

Nesta seção, descrevemos alguns dos comportamentos e características associados à combinação 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 escalonamento manual, o Serviço Gerenciado para Apache Spark mantém a proporção solicitada de instâncias spot para não preemptivas ao adicionar workers secundários.

Como atualizar as configurações de combinação de workers secundários

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

Preempção de worker secundário do Spot

  • O Serviço Gerenciado para Apache Spark não controla o momento da preempção de VMs spot (consulte Preempção de VMs spot).
  • Quando ocorre a preempção spot, o grupo de workers secundários pode ser executado temporariamente com capacidade reduzida 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ário além das configurações iniciais do grupo.