Modello di programmazione per Apache Beam

Dataflow è basato sul progetto Apache Beam open source. Questo documento descrive il modello di programmazione Apache Beam.

Panoramica

Apache Beam è un modello unificato open source per la definizione di pipeline in modalità flusso e batch. Il modello di programmazione Apache Beam semplifica il meccanismo dell'elaborazione dati su larga scala. Con 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 elaborazione dati, anziché gestire l'orchestrazione dell'elaborazione parallela.

Apache Beam ti isola dai dettagli di basso livello dell'elaborazione distribuita, come il coordinamento di 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 è denominata PCollection e una trasformazione è chiamata PTransform. Un PCollection può essere limitato o illimitato. Un PCollection limitato ha una dimensione fissa e nota e può essere elaborato utilizzando una pipeline batch. L'elemento PCollections illimitato deve utilizzare una pipeline in modalità flusso, poiché i dati vengono elaborati man mano che arrivano.

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

Il seguente diagramma mostra una pipeline Apache Beam.

Diagramma di una pipeline Apache Beam

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

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

Per eseguire una pipeline Apache Beam utilizzando Dataflow, segui questi passaggi:

  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. Utilizzare Dataflow per eseguire la pipeline. Dataflow alloca un pool di VM per eseguire il job, esegue il deployment del codice nelle VM e orchestra l'esecuzione del job.
  3. Dataflow esegue ottimizzazioni sul backend per garantire un'esecuzione efficiente della pipeline e sfruttare il parallelizzazione.
  4. Mentre un job è in esecuzione e dopo il suo completamento, utilizza le funzionalità di gestione di Dataflow per monitorare l'avanzamento e risolvere i problemi.

Concetti di Apache Beam

Questa sezione contiene riassunti dei concetti fondamentali.

Concetti di base

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 a un altro. I programmi Apache Beam iniziano creando un oggetto Pipeline, quindi utilizzando tale oggetto come base per la creazione dei set di dati della pipeline. Ogni pipeline rappresenta un singolo job ripetibile.
PCollection
Un PCollection rappresenta un set di dati a più elementi potenzialmente distribuito che funge da dati della pipeline. Le trasformazioni Apache Beam utilizzano gli oggetti PCollection come input e output per ogni passaggio della pipeline. Un elemento PCollection può contenere un set di dati di dimensioni fisse o un set di dati illimitato proveniente da un'origine dati in continuo aggiornamento.
Trasformazioni
Una trasformazione rappresenta un'operazione di elaborazione che trasforma i dati. Una trasformazione prende uno o più PCollection come input, esegue un'operazione specificata su ciascun elemento della raccolta e produce uno o più PCollection come output. Una trasformazione può eseguire quasi ogni tipo di operazione di elaborazione, tra cui calcoli matematici sui dati, la conversione dei dati da un formato a un altro, il raggruppamento dei dati, la lettura e la scrittura di dati, il filtraggio dei dati per produrre 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 ciascuno degli elementi dell'input PCollection. ParDo raccoglie zero o più elementi di output in un output PCollection. La trasformazione ParDo elabora gli elementi in modo indipendente e possibilmente in parallelo.
I/O della pipeline
I connettori I/O Apache Beam consentono di leggere i dati nella pipeline e scrivere dati di output dalla pipeline. Un connettore I/O è costituito da un'origine e un sink. Tutte le origini e i sink di Apache Beam sono trasformazioni che consentono alla pipeline di lavorare con dati di diversi formati di archiviazione 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 è quello di raggruppare tutti gli elementi con una chiave e una finestra comuni. Quindi, combina ciascun gruppo di elementi utilizzando un'operazione associativa e commutativa.
Funzioni definite dall'utente
Alcune operazioni all'interno di Apache Beam consentono l'esecuzione di codice definito dall'utente come metodo 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 può anche contenere funzioni definite dall'utente scritte in più lingue.
Corridore
I runtime sono il software che accetta una pipeline e la esegue. La maggior parte dei runner sono traduttori o adattatori a sistemi di elaborazione di big data molto paralleli. Esistono altri runner per i test e il 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 potrebbe essere diverso dal tipo di sink, quindi puoi modificare il formato dei dati mentre si spostano nella pipeline.
Lavandino
Una trasformazione che scrive in un sistema di archiviazione dati esterno, come un file o un database.
TextIO
Una 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. L'origine di input TextIO supporta JSON. Tuttavia, affinché il servizio Dataflow sia in grado di parallelizzare input e output, i dati di origine devono essere delimitati da un feed di riga. Puoi utilizzare un'espressione regolare per scegliere come target file specifici con l'origine TextIO. Dataflow supporta pattern di caratteri jolly generici. L'espressione glob può essere visualizzata in qualsiasi punto del percorso. Tuttavia, Dataflow non supporta i caratteri jolly ricorsivi (**).

Concetti avanzati

Ora evento
L'ora in cui si verifica un evento dati, determinata dal timestamp sull'elemento di dati stesso. Ciò contrasta con il momento in cui l'elemento dati effettivo viene elaborato in qualsiasi fase della pipeline.
Windowing
La creazione di finestre consente di eseguire operazioni di raggruppamento su raccolte illimitate dividendo la raccolta in finestre di raccolte limitate in base ai timestamp dei singoli elementi. Una funzione di windowing indica all'esecutore come assegnare 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, che indica al sistema quando si prevede che tutti i dati in una determinata finestra saranno disponibili nella pipeline. Apache Beam monitora 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
Gli attivatori determinano quando emettere risultati aggregati all'arrivo dei dati. Per i dati limitati, i risultati vengono emessi dopo l'elaborazione di tutto l'input. Per i dati illimitati, i risultati vengono emessi quando la filigrana supera la fine della finestra, a indicare che il sistema ritiene che tutti i dati di input per la finestra siano stati elaborati. Apache Beam offre diversi trigger predefiniti e consente di combinarli.

Passaggi successivi

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