Integrazione moderna dei dati richiede calcoli batch e streaming affidabili per supportare i processi aziendali essenziali. Tradizionalmente, nello spazio del software aziendale, l'ETL (Extract Transform and Load) in batch e il CEP (Complex Event Processing) in streaming erano due prodotti completamente diversi con mezzi diversi per formulare i calcoli. Fino a poco tempo fa, nello spazio del software open source per i big data, il batch e lo streaming venivano affrontati separatamente, come MapReduce per il batch e Storm per gli stream. Ora si stanno diffondendo motori di elaborazione dati che cercano di fornire modelli sia per il batch che per lo streaming, come Apache Spark e Apache Flink. In una serie di post spiegherò la necessità di un modello di programmazione unificato e di un'architettura di elaborazione dei dati ibrida sottostante, in grado di gestire sia il batch che lo streaming. calcolo in streaming per l'integrazione dei dati. Tuttavia, per l'integrazione dei dati, questo modello deve essere a un livello che astragga da specifici motori di elaborazione dei dati.
In SnapLogic abbiamo sviluppato un modello di programmazione visuale ibrido e una piattaforma di esecuzione. Abbiamo implementato il nostro motore di esecuzione ibrido che può eseguire calcoli in batch e in streaming. Inoltre, possiamo trasformare le pipeline di dataflow di SnapLogic in calcoli MapReduce e Spark. Il nostro modello isola gli utenti dalla complessità dei motori di elaborazione dati sottostanti. Questo isolamento consente alle pipeline SnapLogic di essere eseguite sul target più appropriato. Inoltre, nasconde i cambiamenti nei target e consente una facile migrazione da un target all'altro. Questo approccio consente inoltre agli utenti di sfruttare i nuovi motori di elaborazione dati senza dover eseguire il porting delle pipeline.
Comprensione del calcolo batch
Un calcolo di integrazione batch di solito comporta l'accesso a un intero set di dati, come una tabella o un insieme, per trasformare i dati o eseguire una query analitica. In altre parole, i dati in ingresso alla computazione batch sono completamente disponibili in un database o in un'altra piattaforma di archiviazione, come HDFS. Le trasformazioni dei dati includono il filtraggio dei dati, l'esecuzione di operazioni di qualità dei dati o l'aumento e l'arricchimento dei dati con dati esterni aggiuntivi. È importante capire che alcuni calcoli batch possono essere eseguiti su ciascun elemento di dati (riga o documento) indipendentemente da tutti gli altri elementi di dati. Questo vale per il filtraggio e le trasformazioni semplici. Tuttavia, alcuni calcoli hanno dipendenze tra gli elementi dei dati. Questo vale per le query analitiche che prevedono l'aggregazione, l'ordinamento o l'unione di insiemi di dati. Infine, alcuni calcoli batch richiedono più iterazioni su un set di dati. È il caso degli algoritmi di apprendimento automatico e di alcuni tipi di calcolo dei grafi (ad esempio, l'algoritmo PageRank).
Un componente chiave dei moderni motori di elaborazione dei dati è la capacità di tollerare i guasti durante un calcolo potenzialmente lungo. Questo è particolarmente vero quando il calcolo viene eseguito su centinaia o migliaia di nodi di calcolo commodity. Google MapReduce è stato il primo motore di elaborazione dati su larga scala a fornire un modello di programmazione che consente al programmatore di concentrarsi sul calcolo e di nascondere le complessità della gestione della tolleranza ai guasti. Il motore run-time di MapReduce garantisce che un calcolo MapReduce venga completato anche in presenza di guasti alla rete e ai nodi. La tolleranza ai guasti di MapReduce si ottiene attraverso la riesecuzione dei task di Map o Reduce. L'implementazione di MapReduce lavora a stretto contatto con il file system distribuito affidabile sottostante, GFS nel caso di Google, per fornire input alla riesecuzione dei task. Hadoop MapReduce si basa su HDFS e funziona in modo simile a Google MapReduce. Gli strumenti rivolti all'utente, come Pig e Hive, eseguono i calcoli come lavori MapReduce.
Come MapReduce, Spark fornisce un modello di programmazione e un motore di esecuzione che garantiscono il corretto completamento dei calcoli di Spark in presenza di guasti al cluster. Il modello e l'implementazione di Spark, basati su insiemi di dati distribuiti resilienti (RDD), forniscono un modo diverso di formulare i calcoli distribuiti e possono portare a un'esecuzione molto più veloce in molti casi. Spark fornisce un'API di livello superiore rispetto a MapReduce e le singole operazioni sono tracciate. Questa capacità di tracciare il percorso delle operazioni consente di rieseguire e ricreare gli RDD in caso di guasto di un nodo. A differenza di MapReduce, il nucleo di Spark sfuma la linea di demarcazione tra query batch e interattive. Una volta che i dati sono stati caricati in uno o più RDD di Spark in un cluster, questi dati possono essere interrogati rapidamente per scoprire risultati diversi. In questo modo si evita di ricaricare gli stessi dati in memoria per query indipendenti. Detto questo, come MapReduce, Spark viene spesso utilizzato come motore di elaborazione dati batch più veloce. Come MapReduce, Spark si basa su un file system distribuito affidabile, come HDFS, o su un archivio dati distribuito affidabile come Cassandra.
I calcoli batch puri sono al centro del supporto delle principali linee di business, del reporting, delle previsioni e del calcolo scientifico. Per questo motivo, l'elaborazione distribuita orientata ai batch continuerà a essere un componente tecnologico critico nella maggior parte delle organizzazioni.
Il prossimo post di questa serie sarà incentrato su Capire il calcolo in streaming e concluderò con i vantaggi di una piattaforma di integrazione di dati batch e streaming.