Modelo de programação para o Apache Beam

O Apache Beam é um modelo unificado e de código aberto para a definição de pipelines de processamento paralelo de dados em lote e em 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, um dos back-ends de processamento distribuído compatíveis, como o Dataflow, executa o pipeline. Esse modelo permite manter o foco na composição lógica do job de processamento de dados, e não na orquestração física do processamento paralelo. Concentre-se no que o job precisa fazer, em vez de como ele será executado.

O modelo Apache Beam fornece abstrações úteis que isolam você de detalhes de baixo nível de processamento distribuído, como a coordenação de workers individuais, a fragmentação de conjuntos de dados e outras tarefas semelhantes. O Dataflow gerencia esses detalhes de baixo nível por completo.

Conceitos

Nesta seção, você verá resumos de conceitos fundamentais. O guia de programação do Apache Beam, disponível em inglês no site, orienta sobre os conceitos básicos da criação de pipelines usando os SDKs do Apache Beam.

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 iguais ou de tipos diferentes, possibilitando a conversão de 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.

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 há garantias de que os eventos de dados apareçam no pipeline na mesma ordem em que foram gerados.
Acionador
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

Para explicações detalhadas, consulte o Guia de programação do Apache Beam, disponível em inglês no site.

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