Modello di programmazione per Apache Beam

Dataflow si basa sul progetto open source Apache Beam. Questo documento descrive il modello di programmazione Apache Beam, fornendo una panoramica della sua architettura e fungendo da guida ai suoi concetti di base.

Panoramica dell'elaborazione dei dati di Apache Beam

Questa sezione fornisce una panoramica dell'architettura di Apache Beam, descrivendo in dettaglio il funzionamento dei suoi componenti per un'elaborazione efficiente dei dati. Apache Beam è un modello unificato open source per la definizione di pipeline batch e di streaming. Il modello di programmazione Apache Beam semplifica la meccanica dell'elaborazione dei dati su larga scala. Utilizzando uno degli SDK Apache Beam, crei un programma che definisce la pipeline. Quindi, esegui la pipeline su una piattaforma specifica come Dataflow. Questo modello ti consente di concentrarti sulla composizione logica del job di elaborazione dei dati, anziché gestire l'orchestrazione dell'elaborazione parallela.

Apache Beam ti isola dai dettagli di basso livello dell'elaborazione distribuita, come il coordinamento dei singoli worker, lo sharding dei set di dati e altre attività simili. Dataflow gestisce completamente questi dettagli di basso livello.

Una pipeline è un grafico di trasformazioni applicate a raccolte di dati. In Apache Beam, una raccolta è chiamata PCollection e una trasformazione è chiamata PTransform. Una PCollection può essere limitata o illimitata. Una PCollection limitata ha una dimensione nota e fissa e può essere elaborata utilizzando una pipeline batch. Le PCollections illimitate devono utilizzare una pipeline di streaming, perché i dati vengono elaborati man mano che arrivano.

Apache Beam fornisce connettori per leggere e scrivere in diversi sistemi, inclusi Google Cloud servizi e tecnologie di terze parti come Apache Kafka.

Il seguente diagramma mostra una pipeline Apache Beam.

Una pipeline Apache Beam.

Puoi scrivere PTransforms che eseguono una logica arbitraria. Gli SDK Apache Beam forniscono anche una libreria di PTransforms utili, tra cui:

  • Filtra tutti gli elementi che non soddisfano un predicato.
  • Applica una funzione di mapping 1:1 a ogni elemento.
  • Raggruppa gli elementi per chiave.
  • Conta gli elementi in una raccolta.
  • Conta gli elementi associati a ogni chiave in una raccolta chiave-valore.

Per eseguire una pipeline Apache Beam utilizzando Dataflow:

  1. Utilizza l'SDK Apache Beam per definire e creare la pipeline. In alternativa, puoi eseguire il deployment di una pipeline predefinita utilizzando un modello Dataflow.
  2. Utilizza Dataflow per eseguire la pipeline. Dataflow alloca un pool di VM per eseguire il job, esegue il deployment del codice sulle VM e orchestra l'esecuzione del job.
  3. Dataflow esegue ottimizzazioni sul backend per rendere efficiente l'esecuzione della pipeline e sfruttare la parallelizzazione.
  4. Durante l'esecuzione di un job e al termine, utilizza le funzionalità di gestione di Dataflow per monitorare l'avanzamento e risolvere i problemi.

Concetti di programmazione di Apache Beam

Questa sezione contiene riepiloghi dei concetti fondamentali.

Concetti di base dell'elaborazione batch e di streaming

Pipeline
Una pipeline incapsula l'intera serie di calcoli coinvolti nella lettura dei dati di input, nella trasformazione di questi dati e nella scrittura dei dati di output. L'origine di input e il sink di output possono essere dello stesso tipo o di tipi diversi, consentendoti di convertire i dati da un formato all'altro. I programmi Apache Beam iniziano con la creazione di un oggetto Pipeline, che viene poi utilizzato come base per la creazione dei set di dati della pipeline. Ogni pipeline rappresenta un singolo job ripetibile.
PCollection
Una PCollection rappresenta un set di dati potenzialmente distribuito e multi-elemento che funge da dati della pipeline. Le trasformazioni Apache Beam utilizzano gli oggetti PCollection come input e output per ogni passaggio della pipeline. Una PCollection può contenere un set di dati di dimensioni fisse o un set di dati illimitato da un'origine dati in continuo aggiornamento.
Trasformazioni
Una trasformazione rappresenta un'operazione di trattamento che trasforma i dati. Una trasformazione accetta una o più PCollection come input, esegue un'operazione specificata su ogni elemento della raccolta e produce una o più PCollection come output. Una trasformazione può eseguire quasi qualsiasi tipo di operazione di elaborazione, inclusi l'esecuzione di calcoli matematici sui dati, la conversione dei dati da un formato all'altro, il raggruppamento dei dati, la lettura e la scrittura dei dati, il filtraggio dei dati per generare come output solo gli elementi desiderati o la combinazione di elementi di dati in singoli valori.
ParDo
ParDo è l'operazione di elaborazione parallela principale negli SDK Apache Beam, che richiama una funzione specificata dall'utente su ogni elemento della PCollection di input. ParDo raccoglie gli zero o più elementi di output in una PCollection di output. La trasformazione ParDo elabora gli elementi in modo indipendente e possibilmente in parallelo. La funzione definita dall'utente per un ParDo è chiamata DoFn.
I/O della pipeline
I connettori I/O di Apache Beam consentono di leggere i dati nella pipeline e di scrivere i dati di output dalla pipeline. Un connettore I/O è costituito da un'origine e da un sink. Tutte le origini e i sink di Apache Beam sono trasformazioni che consentono alla pipeline di utilizzare i dati di diversi formati di archiviazione dei dati. Puoi anche scrivere un connettore I/O personalizzato.
Aggregazione
L'aggregazione è il processo di calcolo di un valore da più elementi di input. Il pattern di calcolo principale per l'aggregazione in Apache Beam è raggruppare tutti gli elementi con una chiave e una finestra comuni. Quindi, combina ogni gruppo di elementi utilizzando un'operazione associativa e commutativa.
Funzioni definite dall'utente
Alcune operazioni all'interno di Apache Beam consentono di eseguire codice definito dall'utente per configurare la trasformazione. Per ParDo, il codice definito dall'utente specifica l'operazione da applicare a ogni elemento, mentre per Combine specifica come combinare i valori. Una pipeline potrebbe contenere funzioni definite dall'utente scritte in una lingua diversa da quella del runner. Una pipeline potrebbe anche contenere funzioni definite dall'utente scritte in più lingue.
Runner
I runner sono i software che accettano una pipeline e la eseguono. La maggior parte dei runner sono traduttori o adattatori per sistemi di elaborazione di big data massivamente paralleli. Esistono altri runner per test e debug locali.
Origine
Una trasformazione che legge da un sistema di archiviazione esterno. In genere, una pipeline legge i dati di input da un'origine. L'origine ha un tipo, che può essere diverso dal tipo di sink, quindi puoi modificare il formato dei dati man mano che si spostano nella pipeline.
Sink
Una trasformazione che scrive in un sistema di archiviazione dati esterno, ad esempio un file o un database.
TextIO
Un PTransform per la lettura e la scrittura di file di testo. L'origine e il sink TextIO supportano i file compressi con gzip e bzip2. La sorgente di ingresso TextIO supporta JSON. Tuttavia, affinché il servizio Dataflow possa parallelizzare l'input e l'output, i dati di origine devono essere delimitati da un avanzamento riga. Puoi utilizzare un'espressione regolare per scegliere come target file specifici con l'origine TextIO. Dataflow supporta i pattern con caratteri jolly generali. L'espressione glob può essere visualizzata in qualsiasi punto del percorso. Tuttavia, Dataflow non supporta i caratteri jolly ricorsivi (**).

Concetti avanzati dell'elaborazione batch e di streaming

Ora evento
L'ora in cui si verifica un evento di dati, determinata dal timestamp sull'elemento dati stesso. Questo è in contrasto con l'ora in cui l'elemento dati effettivo viene elaborato in qualsiasi fase della pipeline.
Windowing
Il windowing consente di raggruppare le operazioni su raccolte illimitate dividendo la raccolta in finestre di raccolte finite in base ai timestamp dei singoli elementi. Una funzione di windowing indica al runner come assegnare gli elementi a una finestra iniziale e come unire le finestre di elementi raggruppati. Apache Beam consente di definire diversi tipi di finestre o di utilizzare le funzioni di windowing predefinite.
Filigrane
Apache Beam tiene traccia di una filigrana, ovvero la nozione del sistema di quando si prevede che tutti i dati in una determinata finestra siano arrivati nella pipeline. Apache Beam tiene traccia di una filigrana perché non è garantito che i dati arrivino in una pipeline in ordine di tempo o a intervalli prevedibili. Inoltre, non è garantito che gli eventi di dati vengano visualizzati nella pipeline nello stesso ordine in cui sono stati generati.
Trigger
I trigger determinano quando emettere i risultati aggregati man mano che arrivano i dati. Per i dati limitati, i risultati vengono emessi dopo l'elaborazione di tutti gli input. Per i dati illimitati, i risultati vengono emessi quando la filigrana supera la fine della finestra, il che indica che il sistema ritiene che tutti i dati di input per quella finestra siano stati elaborati. Apache Beam fornisce diversi trigger predefiniti e consente di combinarli.

Passaggi successivi

Apache Beam® è un marchio registrato di The Apache Software Foundation o delle sue affiliate negli Stati Uniti e/o in altri paesi.