Modelo de programação para o Apache Beam

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

Vista geral

O Apache Beam é um modelo unificado de código aberto para definir pipelines de processamento em lote e de streaming. O modelo de programação Apache Beam simplifica a mecânica do processamento de dados em grande escala. Usando um dos SDKs do Apache Beam, cria um programa que define o pipeline. Em seguida, executa o pipeline numa plataforma específica, como o Dataflow. Este modelo permite-lhe concentrar-se na composição lógica da sua tarefa de processamento de dados, em vez de gerir a orquestração do processamento paralelo.

O Apache Beam isola-o dos detalhes de baixo nível do processamento distribuído, como a coordenação de trabalhadores individuais, a divisão de conjuntos de dados e outras tarefas semelhantes. O Dataflow gere totalmente estes detalhes de baixo nível.

Um pipeline é um gráfico de transformações que são aplicadas a coleções de dados. No Apache Beam, uma coleção é denominada PCollection, e uma transformação é denominada PTransform. Um PCollection pode ser delimitado ou não delimitado. Um elemento delimitado PCollection tem um tamanho conhecido e fixo, e pode ser processado através de um pipeline de lotes. Os PCollections não delimitados têm de usar um pipeline de streaming porque os dados são processados à medida que chegam.

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

O diagrama seguinte mostra um pipeline do Apache Beam.

Diagrama de um pipeline do Apache Beam

Pode escrever PTransforms que executam lógica arbitrária. Os SDKs do Apache Beam também oferecem uma biblioteca de PTransforms úteis de imediato, incluindo o seguinte:

  • Filtre todos os elementos que não satisfazem um predicado.
  • Aplicar uma função de mapeamento de 1 para 1 a cada elemento.
  • Agrupe elementos por chave.
  • Contar os elementos numa coleção
  • Contar os elementos associados a cada chave numa coleção de chave-valor.

Para executar um pipeline do Apache Beam através do Dataflow, siga os passos seguintes:

  1. Use o SDK Apache Beam para definir e criar o pipeline. Em alternativa, pode implementar um pipeline pré-criado através de um modelo do Dataflow.
  2. Use o Dataflow para executar o pipeline. O Dataflow atribui um conjunto de VMs para executar a tarefa, implementa o código nas VMs e organiza a execução da tarefa.
  3. O Dataflow faz otimizações no back-end para que o seu pipeline seja executado de forma eficiente e tire partido da paralelização.
  4. Enquanto uma tarefa está em execução e após a conclusão, use as capacidades de gestão do Dataflow para monitorizar o progresso e resolver problemas.

Conceitos do Apache Beam

Esta secção contém resumos de conceitos fundamentais.

Conceitos básicos

Pipelines
Um pipeline encapsula toda a série de cálculos envolvidos na leitura de dados de entrada, na transformação desses dados e na gravação de dados de saída. A origem de entrada e o destino de saída podem ser do mesmo tipo ou de tipos diferentes, o que lhe permite converter dados de um formato para outro. Os programas Apache Beam começam por construir um objeto Pipeline e, em seguida, usar esse objeto como base para criar os conjuntos de dados do pipeline. Cada pipeline representa uma única tarefa repetível.
PCollection
Um PCollection representa um conjunto de dados de vários elementos potencialmente distribuído que funciona como os dados do pipeline. As transformações do Apache Beam usam objetos PCollection como entradas e saídas para cada passo no seu pipeline. Um PCollection pode conter um conjunto de dados de tamanho fixo ou um conjunto de dados ilimitado de uma origem de dados em atualização contínua.
Transformações
Uma transformação representa uma operação de processamento que transforma dados. Uma transformação usa um ou mais PCollections como entrada, executa uma operação que especifica em cada elemento nessa coleção e produz um ou mais PCollections como saída. Uma transformação pode executar quase qualquer tipo de operação de processamento, incluindo a execução de cálculos matemáticos em dados, a conversão de dados de um formato para outro, o agrupamento de dados, a leitura e a escrita de dados, a filtragem de dados para gerar apenas os elementos pretendidos ou a combinação de elementos de dados em valores únicos.
ParDo
ParDo é a operação de processamento paralelo principal nos SDKs do Apache Beam, que invoca uma função especificada pelo utilizador em cada um dos elementos da entrada PCollection. ParDo recolhe os zero ou mais elementos de saída numa saída PCollection. A transformação ParDoprocessa elementos de forma independente e, possivelmente, em paralelo. A função definida pelo utilizador para um ParDo chama-se DoFn.
I/O de pipelines
Os conetores de E/S do Apache Beam permitem-lhe ler dados para o seu pipeline e escrever dados de saída do seu pipeline. Um conector de E/S consiste numa origem e num destino. Todas as origens e os destinos do Apache Beam são transformações que permitem que o seu pipeline funcione com dados de vários formatos de armazenamento de dados diferentes. Também pode escrever um conetor de E/S personalizado.
Agregação
A agregação é o processo de calcular algum valor a partir de vários elementos de entrada. O padrão computacional principal para a agregação no Apache Beam é agrupar todos os elementos com uma chave e uma janela comuns. Em seguida, combina cada grupo de elementos através de uma operação associativa e comutativa.
Funções definidas pelo utilizador (FDUs)
Algumas operações no Apache Beam permitem a execução de código definido pelo utilizador como forma de configurar a transformação. Para ParDo, o código definido pelo utilizador especifica a operação a aplicar a cada elemento e, para Combine, especifica como os valores devem ser combinados. Um pipeline pode conter UDFs escritas num idioma diferente do idioma do seu executor. Um pipeline também pode conter UDFs escritas em vários idiomas.
Corredor
Os executores são o software que aceita um pipeline e o executa. A maioria dos executores são tradutores ou adaptadores para sistemas de processamento de big data massivamente paralelos. Existem outros executores para testes e depuração locais.
Origem
Uma transformação que lê a partir de um sistema de armazenamento externo. Normalmente, um pipeline lê dados de entrada de uma origem. A origem tem um tipo, que pode ser diferente do tipo de destino, para que possa alterar o formato dos dados à medida que se movem através do pipeline.
Lava-louça
Uma transformação que escreve num sistema de armazenamento de dados externo, como um ficheiro ou uma base de dados.
TextIO
Uma PTransform para ler e escrever ficheiros de texto. A origem e o destino TextIO suportam ficheiros comprimidos com gzip e bzip2. A origem de entrada TextIO suporta JSON. No entanto, para que o serviço Dataflow possa paralelizar a entrada e a saída, os dados de origem têm de ser delimitados com uma alimentação de linha. Pode usar uma expressão regular para segmentar ficheiros específicos com a origem TextIO. O Dataflow suporta padrões de carateres universais gerais. A sua expressão glob pode aparecer em qualquer parte do caminho. No entanto, o Dataflow não suporta carateres universais recursivos (**).

Conceitos avançados

Tempo do evento
A hora em que ocorre um evento de dados, determinada pela data/hora no próprio elemento de dados. Isto contrasta com o tempo em que o elemento de dados real é processado em qualquer fase do pipeline.
Visualização baseada na janela atual
A criação de janelas permite operações de agrupamento em coleções ilimitadas dividindo a coleção em janelas de coleções finitas de acordo com as datas/horas dos elementos individuais. Uma função de janelas indica ao executor como atribuir elementos a uma janela inicial e como unir janelas de elementos agrupados. O Apache Beam permite-lhe definir diferentes tipos de janelas ou usar as funções de janelas predefinidas.
Marcas de água
O Apache Beam acompanha uma marca de água, que é a noção do sistema de quando se pode esperar que todos os dados numa determinada janela tenham chegado ao pipeline. O Apache Beam acompanha uma marca de água porque não é garantido que os dados cheguem a um pipeline por ordem cronológica ou a intervalos previsíveis. Além disso, não é garantido que os eventos de dados apareçam no pipeline pela mesma ordem em que foram gerados.
Acionador
Os acionadores determinam quando emitir resultados agregados à medida que os dados chegam. Para dados delimitados, os resultados são emitidos depois de todo o input ter sido processado. Para dados ilimitados, os resultados são emitidos quando a marca d'água passa o fim da janela, o que indica que o sistema considera que todos os dados de entrada dessa janela foram processados. O Apache Beam oferece vários acionadores predefinidos e permite combiná-los.

O que se segue?

Apache Beam® é uma marca comercial registada da The Apache Software Foundation ou das respetivas afiliadas nos Estados Unidos e/ou noutros países.