Como usar a programação de recursos flexível do Cloud Dataflow

Veja nesta página como ativar a Programação de recursos flexível (FlexRS) para pipelines de lote de escalonamento automático no Dataflow.

FlexRS

A FlexRS reduz os custos de processamento em lote usando técnicas avançadas de programação, o serviço Dataflow Shuffle e, no momento, uma combinação de instâncias de máquina virtual (VM) preemptivas e VMs comuns. Ao executar VMs preemptivas e VMs comuns em paralelo, o Dataflow melhora a experiência do usuário se o Compute Engine parar as instâncias de VM preemptivas durante um evento do sistema. A FlexRS ajuda a garantir que o pipeline continue a progredir e que você não perca o trabalho anterior quando o Compute Engine forçar a interrupção das VMs preemptivas.

Jobs com a FlexRS usam o Dataflow Shuffle baseado em serviço para mesclar e agrupar. Assim, jobs da FlexRS não usam recursos do Persistent Disk para armazenar resultados de cálculos temporários. O uso do Dataflow Shuffle permite que a FlexRS manipule melhor a preempção de uma VM de worker, porque o serviço do Dataflow não precisa redistribuir dados para os workers restantes. Cada worker do Dataflow ainda precisa de 25 GB de volume de disco permanente para armazenar a imagem da máquina e os registros temporários.

Os jobs da FlexRS têm um atraso no agendamento. Portanto, o FlexRS é mais adequado para cargas de trabalho com o prazo mais longo, como jobs diários ou semanais que podem ser concluídos em um determinado período.

Programação atrasada

Ao enviar um job da FlexRS, o serviço do Dataflow colocará o job em uma fila e o enviará para a execução dentro de 6 horas após a criação do job. O Dataflow encontra o melhor horário para iniciar o job dentro desse intervalo de tempo, com base na capacidade disponível e em outros fatores.

Ao enviar um job da FlexRS, o serviço Dataflow executará as seguintes etapas:

  1. Retorna o ID do job imediatamente após o envio do job.
  2. Executa uma validação antecipada.
  3. Usa o resultado da validação inicial para determinar o próximo passo:

    1. Em caso de sucesso, os job são enfileirados para aguardar o lançamento atrasado.
    2. Em todos os outros casos, o job falha e o serviço do Dataflow informa os erros.

Portanto, depois de enviar um job da FlexRS, o job exibirá o ID e o status Na fila na interface de monitoramento do Dataflow em caso de sucesso. Caso contrário, exibirá o status Com falha.

Validação antecipada

Os jobs da FlexRS não são iniciados imediatamente após o envio. Durante a validação antecipada, o serviço Dataflow verifica os parâmetros de execução e as configurações do ambiente do Google Cloud, como papéis do IAM e configurações de rede. O Dataflow valida o job o máximo possível no momento do envio e informa possíveis erros. Você não é cobrado por este processo de validação antecipada.

A etapa de validação antecipada não executa o código do usuário. Verifique seu código para procurar problemas usando o Apache Beam Direct Runner (em inglês) ou jobs que não são da FlexRS. Se houver alterações no ambiente do Google Cloud entre a criação do job e a programação atrasada do job, o job poderá ter sucesso durante a validação inicial, mas ainda falhará no momento do lançamento.

Como ativar a FlexRS

Quando você cria um job FlexRS, a cota de outro job é consumida, mesmo que ele esteja no status Na fila. O processo de validação antecipada não verifica nem reserva outras cotas. Portanto, antes de ativar a FlexRS, verifique se você tem cotas do recurso do projeto do Google Cloud suficientes para iniciar o job. Isso inclui mais cotas para CPUs preemptivas, CPUs comuns e endereços IP, a menos que você desative o Parâmetro IP público.

Se você não tiver cota suficiente, talvez sua conta não tenha recursos suficientes quando o job da FlexRS for implementado. O Dataflow seleciona VMs preemptivas para 90% dos workers na pool de workers por padrão. Ao planejar a cota de CPU, verifique se você tem cota de VM preemptiva suficiente. Por padrão, você não tem uma cota de VM preemptiva separada. É preciso solicitar a cota de VM preemptiva explicitamente. Caso contrário, seu job da FlexRS não terá os recursos para ser executado em tempo hábil.

Preço

Os jobs do FlexRS são cobrados pelos seguintes recursos:

  • CPUs comuns e preemptivas
  • Recursos de memória
  • Recursos do Dataflow Shuffle
  • 25 GB por worker de recursos do Persistent Disk

Embora o Dataflow use tanto os workers preemptivos quanto os normais para executar o job da FlexRS, você recebe uma taxa de desconto uniforme em comparação com os preços normais do Dataflow, independentemente do tipo de worker. Os recursos do Dataflow Shuffle e do Persistent Disk não são descontados.

Para obter mais informações, leia a página Detalhes de preços do Dataflow.

Requisitos da FlexRS

A FlexRS requer os seguintes recursos:

  • SDK do Apache Beam para Java 2.12.0 ou mais recente ou o SDK do Apache Beam para Python 2.12.0 mais recente.
  • Dataflow Shuffle Ativar a FlexRS também ativa automaticamente o Dataflow Shuffle.

Opções de pipeline

Java

Para ativar um job da FlexRS, use a seguinte opção do pipeline: --flexRSGoal=COST_OPTIMIZED, em que a meta de custo otimizado significa que o serviço Dataflow escolhe os recursos com desconto disponíveis ou --flexRSGoal=SPEED_OPTIMIZED, em que otimiza para reduzir o tempo de execução.

Os jobs da FlexRS afetam os seguintes parâmetros de execução:

  • numWorkers define apenas o número inicial de workers. No entanto, é possível definir maxNumWorkers por motivos de controle de custos.
  • Não é possível definir autoscalingAlgorithm=NONE.
  • Não é possível especificar a sinalização zone para jobs da FlexRS. O serviço do Dataflow seleciona a zona para todos os jobs da FlexRS na região que você especificou com o parâmetro region.
  • Selecione um endpoint regional do Dataflow como sua region.
  • Use o n1-standard-2 padrão ou selecione n1-highmem-16 para sua workerMachineType.

O exemplo a seguir mostra como adicionar parâmetros aos seus parâmetros de pipeline comuns para usar a FlexRS:

--flexRSGoal=COST_OPTIMIZED \
--region=europe-west1 \
--maxNumWorkers=10 \
--workerMachineType=n1-highmem-16

Se omitir region, maxNumWorkers e workerMachineType, o serviço do Dataflow determinará o valor padrão.

Python

Para ativar um job da FlexRS, use a seguinte opção do pipeline: --flexrs_goal=COST_OPTIMIZED, em que a meta de custo otimizado significa que o serviço Dataflow escolhe os recursos com desconto disponíveis ou --flexrs_goal=SPEED_OPTIMIZED, em que otimiza para reduzir o tempo de execução.

Os jobs da FlexRS afetam os seguintes parâmetros de execução:

  • num_workers define apenas o número inicial de workers. No entanto, é possível definir max_num_workers por motivos de controle de custos.
  • Não é possível definir autoscaling_algorithm=NONE.
  • Não é possível especificar a sinalização zone para jobs da FlexRS. O serviço do Dataflow seleciona a zona para todos os jobs da FlexRS na região que você especificou com o parâmetro region.
  • Selecione um endpoint regional do Dataflow como sua region.
  • Use o n1-standard-2 padrão ou selecione n1-highmem-16 para sua machine_type.

O exemplo a seguir mostra como adicionar parâmetros aos seus parâmetros de pipeline comuns para usar a FlexRS:

--flexrs_goal=COST_OPTIMIZED \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16

Se omitir region, max_num_workers e machine_type, o serviço do Dataflow determinará o valor padrão.

Como monitorar jobs da FlexRS

É possível monitorar o status do job da FlexRS no Console do Google Cloud em dois locais:

  1. A página Jobs que mostra todos os seus jobs.
  2. A página da Interface de monitoramento do job que você enviou.

Na página Jobs, os jobs que não foram iniciados mostram o status Na fila.

Um lista de jobs do
    Dataflow no Console do Cloud que contêm um job com status "Na fila".
Figura 1: uma lista de jobs do Dataflow no Console do Cloud que contêm um job com o status Na fila.

Na página Interface de monitoramento, os jobs que estão aguardando na fila exibem a mensagem "O gráfico aparecerá depois que um job é iniciado" na guia Gráfico do job.

Um job de pipeline individual na fila na interface de monitoramento do Cloud Dataflow.
Figura 2: um job de pipeline individual na fila exibido na interface de monitoramento do Cloud Dataflow.