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áquinasn1-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-sizena 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
- É possível criar um cluster com workers secundários não preemptivos para escalonar
a computação sem sacrificar a estabilidade do job. Para fazer isso, especifique
non-preemptiblecomo o tipo de worker secundário. É possível combinar workers secundários não preemptivos com workers secundários spot.
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
- Abra a página Criar cluster.
- Clique em Configuração adicional para abrir a seção.
- Edite os workers secundários.
- 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.
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
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.
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.
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.
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.
ExemploA 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:
- Encontre o nome do grupo gerenciado de instâncias (
instanceGroupManagerName).Console doGoogle Cloud
- Abra a página Clusters e clique no nome do cluster para abrir a página Detalhes do cluster.
- 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 describecom a flag--formatpara exibir oinstanceGroupManagerName.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION \ --format='value(config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName)'
API REST
Envie uma solicitação
clusters.getpara retornar o valor deconfig.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName. - Confira os registros na Análise de registros.
Selecione o tipo de recurso
Google Compute Engine Instance Groupe 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.
- Encontre o nome do grupo gerenciado de instâncias (
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
standardCapacityBasede 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: 5standardCapacityPercentAboveBase30%
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:
- CLUSTER_NAME: o nome do novo cluster.
- PROJECT_ID: o ID do projeto do Google Cloud . Os IDs do projeto estão listados na seção Informações do projeto no Painel do Google Cloud console.
- REGION: uma região disponível do Compute Engine para executar a carga de trabalho.
--secondary-worker-type: ao misturar workers secundários spot e não preemptivos, especifique o tipo de worker secundário comospot.- STANDARD_CAPACITY_BASE e STANDARD_CAPACITY_PERCENT_ABOVE_BASE: consulte Configurações de workers secundários para misturar workers secundários spot com não preemptivos.
- OTHER_FLAGS_AS_NEEDED: consulte gcloud dataproc clusters create.
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:
- CLUSTER_NAME: o nome do novo cluster.
preemptibility: ao misturar workers secundários spot e não preemptivos, especifiquespot.- STANDARD_CAPACITY_BASE e STANDARD_CAPACITY_PERCENT_ABOVE_BASE: consulte Configurações de workers secundários para combinar workers secundários spot com não preemptivos.
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.