Modello di programmazione per Apache Beam

Dataflow si basa sul progetto open source Apache Beam. Questo documento descrive il modello di programmazione Apache Beam.

Panoramica

Apache Beam è un modello unificato open source per definire sia le pipeline in batch sia quelle in streaming. Il modello di programmazione Apache Beam semplifica la meccanica dell'elaborazione dei dati su larga scala. Utilizzando uno degli SDK Apache Beam, puoi creare 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 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 grafo 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 contenuto ha una dimensione nota e fissa e può essere elaborato utilizzando una pipeline batch. I dati illimitati PCollections devono utilizzare una pipeline in streaming, perché vengono elaborati man mano che arrivano.

Apache Beam fornisce connettori per leggere e scrivere in sistemi diversi, inclusi i servizi Google Cloud e le 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 una logica arbitraria. Gli SDK Apache Beam forniscono anche una libreria di PTransforms utili out-of-the-box, tra cui:

  • 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 di una raccolta
  • Conta gli elementi associati a ogni chiave in una raccolta chiave-valore.

Per eseguire una pipeline Apache Beam utilizzando Dataflow, svolgi i seguenti 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. Utilizza Dataflow per eseguire la pipeline. Dataflow allocates a pool of VMs to run the job, deploys the code to the VMs, and orchestrates running the job.
  3. Dataflow esegue ottimizzazioni sul backend per far funzionare la pipeline in modo efficiente e sfruttare la parallizzazione.
  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 Apache Beam

Questa sezione contiene riepiloghi dei concetti fondamentali.

Concetti di base

Pipeline
Una pipeline incapsula l'intera serie di calcoli necessari per leggere i dati di input, trasformarli e scrivere i dati di output. L'origine input e la destinazione output possono essere dello stesso tipo o di tipi diversi, il che ti consente di convertire i dati da un formato all'altro. I programmi Apache Beam iniziano con la costruzione 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
Un PCollection rappresenta un set di dati potenzialmente distribuito e composto da più elementi che funge da dati della pipeline. Apache Beam trasforma gli oggetti PCollection in input e output per ogni passaggio della pipeline. Un PCollection può contenere un set di dati di dimensioni fisse o un set di dati illimitato proveniente da un'origine dati in aggiornamento continuo.
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 ogni elemento della raccolta e produce uno o più PCollection come output. Una trasformazione può eseguire quasi qualsiasi tipo di operazione di elaborazione, ad esempio calcoli matematici sui dati, conversione dei dati da un formato all'altro, raggruppamento dei dati, lettura e scrittura dei dati, filtraggio dei dati per visualizzare solo gli elementi che ti interessano o combinazione di elementi di dati in singoli valori.
ParDo
ParDo è l'operazione di elaborazione parallela di base negli SDK Apache Beam, che richiama una funzione specificata dall'utente su ciascuno degli elementi dell'inputPCollection. 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 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 da un sink. Tutte le origini e gli sink di Apache Beam sono trasformazioni che consentono alla pipeline di lavorare con 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 in Apache Beam consentono di eseguire 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 e, per Combine, specifica come devono essere combinati i valori. Una pipeline potrebbe contenere funzioni UDF scritte in una lingua diversa da quella del tuo runner. Una pipeline potrebbe anche contenere funzioni UDF escritas in più lingue.
Corridore
I runner sono il software che accetta una pipeline ed esegue. La maggior parte dei runner è costituita da traduttori o adattatori per sistemi di elaborazione di big data su larga scala. Esistono altri runner per i test e il 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 può essere diverso dal tipo di destinazione, 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 la destinazione TextIO supportano i file compressi con gzip e bzip2. L'origine di input TextIO supporta JSON. Tuttavia, affinché il servizio Dataflow possa eseguire il parallellismo di input e output, i dati di origine devono essere delimitati da un a capo. 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ò apparire 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 di dati, determinata dal timestamp sull'elemento di dati stesso. Questo è in contrasto con il momento in cui l'elemento di dati effettivo viene elaborato in qualsiasi fase della pipeline.
Windowing
La suddivisione 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 finestramento indica al runner come assegnare gli elementi a una finestra iniziale e come unire le finestre di elementi raggruppati. Apache Beam ti consente di definire diversi tipi di finestre o di utilizzare le funzioni di definizione delle finestre predefinite.
Filigrane
Apache Beam monitora una filigrana, ovvero la percezione del sistema di quando è possibile che tutti i dati di una determinata finestra siano arrivati nella pipeline. Apache Beam monitora una marcatura temporale perché non è garantito che i dati arrivino in una pipeline in ordine cronologico o a intervalli prevedibili. Inoltre, non è garantito che gli eventi relativi ai dati vengano visualizzati nella pipeline nello stesso ordine in cui sono stati generati.
Trigger
Gli attivatori determinano quando emettere i risultati aggregati man mano che arrivano i dati. Per i dati delimitati, 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 fornisce diversi attivatori predefiniti e ti 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.