Modelo de programação para o Apache Beam

O Dataflow é baseado no projeto de código aberto do Apache Beam. Este documento descreve o modelo de programação do Apache Beam.

Informações gerais

O Apache Beam é um modelo unificado e de código aberto para a definição de pipelines em lote e de streaming. Esse modelo de programação simplifica a mecânica do processamento de dados em grande escala. Usando um dos SDKs do Apache Beam, é possível criar um programa que define o pipeline. Em seguida, você executa o pipeline em uma plataforma específica, como o Dataflow. Esse modelo permite manter o foco na composição lógica do job de processamento de dados, e não na orquestração do processamento paralelo.

O Apache Beam isola você dos detalhes de baixo nível do processamento distribuído, como coordenar workers individuais, fragmentar conjuntos de dados e outras tarefas. O Dataflow gerencia esses detalhes de baixo nível por completo.

Um pipeline é um gráfico de transformações que são aplicadas a coleções de dados. No Apache Beam, uma coleção é chamada de PCollection, e uma transformação é chamada de PTransform. Um PCollection pode ser limitado ou ilimitado. Um PCollection limitado tem um tamanho conhecido e fixo e pode ser processado usando um pipeline em lote. PCollections ilimitados precisam usar um pipeline de streaming, porque os dados são processados quando chegam.

O Apache Beam fornece conectores para ler e gravar em diferentes sistemas, incluindo serviços do Google Cloud e tecnologias de terceiros, como o Apache Kafka.

O diagrama a seguir mostra um pipeline do Apache Beam.

Diagrama de um pipeline do Apache Beam

É possível escrever PTransforms que executam lógica arbitrária. Os SDKs do Apache Beam também oferecem uma biblioteca de PTransforms úteis prontos para uso, incluindo os seguintes:

  • Filtre todos os elementos que não satisfaçam um predicado.
  • Aplique uma função de mapeamento de um para um em cada elemento.
  • Agrupe elementos por chave.
  • Contar os elementos de uma coleção
  • Contar os elementos associados a cada chave em uma coleção de valores-chave.

Para executar um pipeline do Apache Beam usando o Dataflow, execute as seguintes etapas:

  1. Use o SDK do Apache Beam para definir e criar o pipeline. Como alternativa, implante um pipeline pré-criado usando um modelo do Dataflow.
  2. Use o Dataflow para executar o pipeline. O Dataflow aloca um pool de VMs para executar o job, implanta o código nas VMs e orquestra a execução do job.
  3. O Dataflow realiza otimizações no back-end para que o pipeline seja executado de maneira eficiente e aproveite o carregamento em paralelo.
  4. Enquanto um job estiver em execução e após a conclusão, use os recursos de gerenciamento do Dataflow para monitorar o progresso e resolver problemas.

Conceitos do Apache Beam

Nesta seção, você verá resumos de conceitos fundamentais.

Conceitos básicos

Pipelines
Um pipeline encapsula uma série inteira de cálculos envolvidos na leitura e transformação de dados de entrada, além da gravação de dados de saída. A origem de entrada e o coletor de saída podem ser do mesmo tipo ou de tipos diferentes, permitindo converter dados de um formato para outro. Os programas do Apache Beam começam construindo um objeto Pipeline e usando-o como base para a criação dos conjuntos de dados do pipeline. Cada pipeline representa um único job repetível.
PCollection
Uma PCollection representa um conjunto de dados de vários elementos potencialmente distribuído que atua como dados do pipeline. As transformações do Apache Beam usam objetos PCollection como entradas e saídas para cada etapa do pipeline. Uma PCollection contém um conjunto de dados de tamanho fixo ou ilimitado a partir de uma fonte de dados de atualização contínua.
Transformações
Uma transformação representa uma operação de processamento que transforma dados. Uma transformação usa uma ou mais PCollections como entrada, realiza uma operação que você especifica em cada elemento nesse conjunto e produz uma ou mais PCollections como saída. Uma transformação pode realizar praticamente qualquer tipo de operação de processamento de dados, inclusive cálculos matemáticos, conversão de um formato para outro, agrupamento, leitura e gravação, filtragem para apresentar como resultado apenas os itens desejados ou combinação de elementos em um único valor.
ParDo
ParDo é a principal operação de processamento paralelo nos SDKs do Apache Beam, invocando uma função especificada pelo usuário em cada um dos elementos da PCollection de entrada. ParDo coleta o zero ou mais elementos de saída em uma saída PCollection. A transformação ParDo processa elementos de maneira independente e, possivelmente, em paralelo.
E/S de pipeline
Os conectores de E/S do Apache Beam permitem ler dados no pipeline, assim como gravar dados de saída dele. Um conector de E/S consiste em uma fonte e um coletor. Todas as origens e coletores do Apache Beam são transformações que permitem o pipeline trabalhar com dados de vários formatos de armazenamento. Também é possível escrever um conector de E/S personalizado.
Agregação
Agregação é o processo de calcular um valor de vários elementos de entrada. O padrão computacional primário para agregação no Apache Beam é agrupar todos os elementos com uma chave e uma janela comuns. Em seguida, combina cada grupo de elementos usando uma operação associativa e comutativa.
Funções definidas pelo usuário (UDFs, na sigla em inglês)
Algumas operações dentro do Apache Beam permitem a execução de código definido pelo usuário como forma de configurar a transformação. Para ParDo, o código definido pelo usuário especifica a operação a ser aplicada a todos os elementos, e para Combine, especifica como os valores precisam ser combinados. Um pipeline pode conter UDFs gravadas em uma linguagem diferente do seu executor. Um pipeline também pode conter UDFs gravadas em várias linguagens.
Executor
Os executores são os softwares que aceitam um pipeline e o executam. A maioria dos executores são tradutores ou adaptadores para sistemas de processamento de grandes volumes de dados altamente paralelos. Outros executores existem para testes locais e depuração.
Origem
Uma transformação que lê a partir de um sistema de armazenamento externo. Um pipeline normalmente lê dados de entrada a partir de uma origem. A origem tem um tipo, que pode ser diferente do tipo do coletor, para que você possa alterar o formato dos dados à medida que eles se movem pelo pipeline.
Coletor
Uma transformação que grava em um sistema de armazenamento de dados externo, como um arquivo ou banco de dados.
TextIO
Uma PTransform para ler e gravar arquivos de texto. A origem e o coletor de TextIO são compatíveis com arquivos compactados com gzip e bzip2. A fonte de entrada TextIO é compatível com JSON. No entanto, para que o serviço Dataflow possa carregar em paralelo a entrada e a saída, os dados de origem precisam ser delimitados com um avanço de linha. É possível usar uma expressão regular para segmentar arquivos específicos com a origem TextIO. O Dataflow é compatível com padrões gerais de caractere curinga. Sua expressão glob pode aparecer em qualquer lugar no caminho. Entretanto, o Dataflow não é compatível com caracteres curinga recursivos (**).

Conceitos avançados

Hora do evento
A hora em que um evento de dados ocorre, determinada pelo carimbo de data/hora no próprio elemento de dados, ao contrário da hora em que o elemento real é processado em qualquer estágio no pipeline.
Gestão de janelas
Com a gestão de janelas, é possível agrupar operações em coleções ilimitadas dividindo-as em janelas de coleções finitas de acordo com os carimbos de data/hora dos elementos individuais. Com essa função, o executor sabe como atribuir elementos a uma janela inicial, assim como mesclar janelas de elementos agrupados. O Apache Beam permite definir diferentes tipos de janelas ou usar as funções de gestão de janelas predefinidas.
Marcas-d'água:
O Apache Beam rastreia uma marca-d'água, que é a noção do sistema quanto ao limite de tempo para todos os dados de uma determinada janela chegarem ao pipeline. O Apache Beam rastreia a marca-d'água porque não é garantido que os dados cheguem ao pipeline em ordem temporal ou em intervalos previsíveis. Além disso, não é garantido que os eventos de dados apareçam no pipeline na mesma ordem em que foram gerados.
Gatilho
Os gatilhos determinam quando emitir resultados agregados conforme os dados chegam. Para dados limitados, os resultados são emitidos após toda a entrada ter sido processada. Para dados ilimitados, os resultados são emitidos quando a marca-d'água transmite o final da janela, indicando que o sistema acredita que todos os dados de entrada da janela foram processados. O Apache Beam fornece vários acionadores predefinidos, além de permitir combiná-los.

A seguir

Apache Beam® é uma marca registrada da The Apache Software Foundation ou afiliadas nos Estados Unidos e/ou em outros países.