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
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 objetosPCollection
como entradas e saídas para cada etapa do pipeline. UmaPCollection
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
PCollection
s como entrada, realiza uma operação que você especifica em cada elemento nesse conjunto e produz uma ou maisPCollection
s 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 daPCollection
de entrada.ParDo
coleta o zero ou mais elementos de saída em uma saídaPCollection
. A transformaçãoParDo
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 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
gzip
ebzip2
. 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.