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 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 definire pipeline sia batch che in streaming. Il modello di programmazione Apache Beam semplifica la meccanica dell'elaborazione di dati su vasta scala. Utilizzando uno degli SDK Apache Beam, crei un programma che definisce la pipeline. Poi, esegui la pipeline su una piattaforma specifica come Dataflow. Questo modello ti consente di concentrarti sulla composizione logica del job di trattamento dati, anziché gestire l'orchestrazione del trattamento parallelo.
Apache Beam ti isola dai dettagli di basso livello dell'elaborazione distribuita, come il coordinamento dei singoli worker, la suddivisione 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. Un PCollection può essere limitato o illimitato.
Un PCollection ha una dimensione fissa nota e può essere elaborato utilizzando una pipeline batch. PCollections illimitati 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.

Puoi scrivere PTransforms che eseguono una logica arbitraria. Gli SDK Apache Beam
forniscono anche una libreria di PTransforms utili predefinite, tra cui
le seguenti:
- Filtra tutti gli elementi che non soddisfano un predicato.
- Applica una funzione di mappatura 1:1 a ogni elemento.
- Raggruppa gli elementi per chiave.
- Contare 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, segui questi passaggi:
- Utilizza l'SDK Apache Beam per definire e creare la pipeline. In alternativa, puoi eseguire il deployment di una pipeline predefinita utilizzando un template Dataflow.
- 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.
- Dataflow esegue ottimizzazioni sul backend per consentire alla pipeline di essere eseguita in modo efficiente e sfruttare il parallelismo.
- 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 Apache Beam
Questa sezione contiene riepiloghi dei concetti fondamentali.
Concetti di base di elaborazione batch e di streaming
- Pipeline
- Una pipeline incapsula l'intera serie di calcoli coinvolti nella lettura dei dati di input, nella loro trasformazione 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 creare i set di dati della pipeline. Ogni pipeline rappresenta un singolo job ripetibile. - PCollection
- Un
PCollectionrappresenta un set di dati multielemento potenzialmente distribuito che funge da dati della pipeline. Le trasformazioni Apache Beam utilizzano oggettiPCollectioncome input e output per ogni passaggio della pipeline. UnPCollectionpuò contenere un set di dati di dimensioni fisse o un set di dati senza limiti da un'origine dati in continuo aggiornamento. - Trasformazioni
- Una trasformazione rappresenta un'operazione di elaborazione che trasforma i dati. Una
trasformazione accetta uno o più
PCollectioncome input, esegue un'operazione che specifichi su ogni elemento della raccolta e produce uno o piùPCollectioncome output. Una trasformazione può eseguire quasi qualsiasi tipo di operazione di elaborazione, inclusi calcoli matematici sui dati, conversione dei dati da un formato a un altro, raggruppamento dei dati, lettura e scrittura dei dati, filtraggio dei dati per restituire solo gli elementi che ti interessano o combinazione degli 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 ciascuno degli elementi dell'inputPCollection.ParDoraccoglie zero o più elementi di output in unPCollectiondi output. La trasformazioneParDoelabora gli elementi in modo indipendente e possibilmente in parallelo. La funzione definita dall'utente per unParDoè chiamataDoFn.- I/O della pipeline
- I connettori I/O di Apache Beam ti 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 un sink. Tutte le origini e i sink Apache Beam sono trasformazioni che consentono alla pipeline di utilizzare i dati di diversi formati di archiviazione. 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 consiste nel raggruppare tutti gli elementi con una chiave e una finestra comuni. Poi combina ogni gruppo di elementi utilizzando un'operazione associativa e commutativa.
- Funzioni definite dall'utente
- Alcune operazioni all'interno di Apache Beam ti consentono di eseguire codice definito dall'utente come
modo per configurare la trasformazione. Per
ParDo, il codice definito dall'utente specifica l'operazione da applicare a ogni elemento, mentre perCombinespecifica come devono essere combinati i valori. Una pipeline potrebbe contenere UDF scritte in una lingua diversa da quella del runner. Una pipeline può contenere anche UDF 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 massicciamente paralleli. Esistono altri runner per test e debug locali.
- Origine
- Una trasformazione che legge da un sistema di archiviazione esterno. Una pipeline in genere legge i dati di input da un'origine. L'origine ha un tipo, che potrebbe essere diverso dal tipo di destinazione, quindi puoi modificare il formato dei dati mentre 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
PTransformper leggere e scrivere file di testo. I file di supporto di origine e destinazioneTextIOcompressi congzipebzip2. L'origine di inputTextIOsupporta JSON. Tuttavia, affinché il servizio Dataflow possa parallelizzare l'input e l'output, i dati di origine devono essere delimitati con un avanzamento riga. Puoi utilizzare un'espressione regolare per scegliere come target file specifici con l'origineTextIO. Dataflow supporta i pattern jolly generali. L'espressione glob può essere visualizzata in qualsiasi punto del percorso. Tuttavia, Dataflow non supporta i caratteri jolly ricorsivi (**).
Concetti avanzati di elaborazione batch e di streaming
- Ora evento
- L'ora in cui si verifica un evento di dati, determinata dal timestamp dell'elemento di dati stesso. Ciò è in contrasto con il momento in cui l'elemento di dati effettivo viene elaborato in qualsiasi fase della pipeline.
- Windowing
- Il raggruppamento in finestre 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 degli elementi raggruppati. Apache Beam ti consente di definire diversi tipi di finestre o di utilizzare le funzioni di finestre predefinite.
- Filigrane
- Apache Beam tiene traccia di una filigrana, ovvero la nozione del sistema di quando tutti i dati in una determinata finestra possono essere previsti per essere arrivati nella pipeline. Apache Beam tiene traccia di un watermark perché non è garantito che i dati arrivino in una pipeline in ordine cronologico 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 all'arrivo dei dati. Per i dati delimitati, i risultati vengono emessi dopo l'elaborazione di tutti gli input. Per i dati senza limiti, 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
- Per saperne di più sui concetti di base della creazione di pipeline utilizzando gli SDK Apache Beam, consulta la guida alla programmazione di Apache Beam nella documentazione di Apache Beam.
- Per ulteriori dettagli sulle funzionalità di Apache Beam supportate da Dataflow, consulta la matrice delle funzionalità di Apache Beam.