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.

É 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:
- Use o SDK do Apache Beam para definir e criar o pipeline. Como alternativa, implante um pipeline pré-criado usando um modelo do Dataflow.
- 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.
- O Dataflow realiza otimizações no back-end para que o pipeline seja executado de maneira eficiente e aproveite o carregamento em paralelo.
- 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
Pipelinee usando-o como base para a criação dos conjuntos de dados do pipeline. Cada pipeline representa um único job repetível. - PCollection
- Uma
PCollectionrepresenta um conjunto de dados de vários elementos potencialmente distribuído que atua como dados do pipeline. As transformações do Apache Beam usam objetosPCollectioncomo entradas e saídas para cada etapa do pipeline. UmaPCollectionconté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 maisPCollections 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 daPCollectionde entrada.ParDocoleta o zero ou mais elementos de saída em uma saídaPCollection. A transformaçãoParDoprocessa elementos de maneira independente e, possivelmente, em paralelo. A função definida pelo usuário para umParDoé chamada deDoFn.- 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 paraCombine, 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
gzipebzip2. 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
- Para saber mais sobre os conceitos básicos de criação de canais usando os SDKs do Apache Beam, consulte o Guia de programação do Apache Beam na documentação do Apache Beam.
- Para mais detalhes sobre os recursos do Apache Beam compatíveis com o Dataflow, consulte a matriz de recursos do Apache Beam.