Elaborazione ad alta intensità di dati - Data-intensive computing

L'elaborazione ad alta intensità di dati è una classe di applicazioni di elaborazione parallela che utilizza un approccio parallelo ai dati per elaborare grandi volumi di dati di dimensioni tipicamente terabyte o petabyte e generalmente denominati big data . Le applicazioni informatiche che dedicano la maggior parte del loro tempo di esecuzione ai requisiti computazionali sono considerate ad alta intensità di calcolo, mentre le applicazioni informatiche che richiedono grandi volumi di dati e dedicano la maggior parte del loro tempo di elaborazione all'I / O e alla manipolazione dei dati sono considerate ad alta intensità di dati.

introduzione

La rapida crescita di Internet e del World Wide Web ha portato a grandi quantità di informazioni disponibili online. Inoltre, le organizzazioni aziendali e governative creano grandi quantità di informazioni sia strutturate che non strutturate che devono essere elaborate, analizzate e collegate. Vinton Cerf ha descritto questo come una "valanga di informazioni" e ha affermato "dobbiamo sfruttare l'energia di Internet prima che le informazioni che ha scatenato ci seppelliscano". Un white paper IDC sponsorizzato da EMC Corporation ha stimato la quantità di informazioni attualmente archiviate in formato digitale nel 2007 a 281 exabyte e il tasso di crescita composto complessivo al 57% con le informazioni nelle organizzazioni che crescono a un ritmo ancora più veloce. In uno studio del 2003 sulla cosiddetta esplosione di informazioni è stato stimato che il 95% di tutte le informazioni attuali esiste in forma non strutturata con maggiori requisiti di elaborazione dei dati rispetto alle informazioni strutturate. L'archiviazione, la gestione, l'accesso e l'elaborazione di questa enorme mole di dati rappresenta un'esigenza fondamentale e un'immensa sfida per soddisfare le esigenze di ricerca, analisi, estrazione e visualizzazione di questi dati come informazioni. L'elaborazione ad alta intensità di dati ha lo scopo di soddisfare questa esigenza.

Elaborazione parallela approcci possono essere generalmente classificati come -elaborazione intensiva , o dati-intensivi . Compute-intensive viene utilizzato per descrivere i programmi applicativi che sono associati al calcolo. Tali applicazioni dedicano la maggior parte del tempo di esecuzione ai requisiti di calcolo anziché all'I / O e in genere richiedono piccoli volumi di dati. L'elaborazione parallela di applicazioni ad alta intensità di calcolo comporta in genere la parallelizzazione di algoritmi individuali all'interno di un processo applicativo e la scomposizione dell'intero processo applicativo in attività separate, che possono quindi essere eseguite in parallelo su una piattaforma di elaborazione appropriata per ottenere prestazioni complessivamente più elevate rispetto all'elaborazione seriale. Nelle applicazioni ad alta intensità di calcolo, vengono eseguite più operazioni contemporaneamente, ciascuna delle quali risolve una parte particolare del problema. Questo viene spesso definito parallelismo delle attività .

Data-intensive viene utilizzato per descrivere le applicazioni che sono associate a I / O o con la necessità di elaborare grandi volumi di dati. Tali applicazioni dedicano la maggior parte del tempo di elaborazione all'I / O e allo spostamento e alla manipolazione dei dati. L'elaborazione parallela di applicazioni ad alta intensità di dati comporta in genere il partizionamento o la suddivisione dei dati in più segmenti che possono essere elaborati in modo indipendente utilizzando lo stesso programma applicativo eseguibile in parallelo su una piattaforma di elaborazione appropriata, quindi riassemblando i risultati per produrre i dati di output completati. Maggiore è la distribuzione aggregata dei dati, maggiore è il vantaggio nell'elaborazione parallela dei dati. I requisiti di elaborazione ad alta intensità di dati normalmente scalano linearmente in base alla dimensione dei dati e sono molto suscettibili di parallelizzazione diretta. Le sfide fondamentali per l'elaborazione ad alta intensità di dati sono la gestione e l'elaborazione di volumi di dati in crescita esponenziale, la riduzione significativa dei cicli di analisi dei dati associati per supportare applicazioni pratiche e tempestive e lo sviluppo di nuovi algoritmi in grado di scalare per cercare ed elaborare enormi quantità di dati. I ricercatori hanno coniato il termine BORPS per "miliardi di record al secondo" per misurare la velocità di elaborazione dei record in un modo analogo a come il termine MIPS si applica per descrivere la velocità di elaborazione dei computer.

Parallelismo dei dati

Le architetture dei sistemi informatici in grado di supportare applicazioni parallele di dati sono state promosse all'inizio degli anni 2000 per i requisiti di elaborazione dati su larga scala di elaborazione ad alta intensità di dati. Il parallelismo dei dati ha applicato il calcolo in modo indipendente a ciascun elemento di dati di un set di dati, il che consente di scalare il grado di parallelismo con il volume dei dati. Il motivo più importante per lo sviluppo di applicazioni parallele ai dati è il potenziale per prestazioni scalabili e può comportare un miglioramento delle prestazioni di diversi ordini di grandezza. I problemi chiave con lo sviluppo di applicazioni che utilizzano il parallelismo dei dati sono la scelta dell'algoritmo, la strategia per la scomposizione dei dati, il bilanciamento del carico sui nodi di elaborazione, le comunicazioni di passaggio di messaggi tra i nodi e l'accuratezza complessiva dei risultati. Lo sviluppo di un'applicazione parallela di dati può comportare una notevole complessità di programmazione per definire il problema nel contesto degli strumenti di programmazione disponibili e per affrontare i limiti dell'architettura di destinazione. L'estrazione e l'indicizzazione delle informazioni dai documenti Web è tipica dell'elaborazione ad alta intensità di dati che può trarre vantaggi significativi in ​​termini di prestazioni dalle implementazioni parallele dei dati poiché il Web e altri tipi di raccolte di documenti possono quindi essere generalmente elaborati in parallelo.

La US National Science Foundation (NSF) ha finanziato un programma di ricerca dal 2009 al 2010. Le aree di intervento erano:

  • Approcci alla programmazione parallela per affrontare l' elaborazione parallela dei dati su sistemi ad alta intensità di dati
  • Astrazioni di programmazione inclusi modelli, linguaggi e algoritmi che consentono un'espressione naturale dell'elaborazione parallela dei dati
  • Progettazione di piattaforme di elaborazione ad alta intensità di dati per fornire livelli elevati di affidabilità, efficienza, disponibilità e scalabilità.
  • Identificazione delle applicazioni in grado di sfruttare questo paradigma di elaborazione e determinazione del modo in cui dovrebbe evolversi per supportare le applicazioni emergenti ad alta intensità di dati

Pacific Northwest National Labs ha definito l'elaborazione ad alta intensità di dati come "l'acquisizione, la gestione, l'analisi e la comprensione dei dati a volumi e velocità che spingono le frontiere delle tecnologie attuali".

Approccio

Le piattaforme di elaborazione ad alta intensità di dati utilizzano in genere un approccio di elaborazione parallela che combina più processori e dischi in cluster di grandi dimensioni di elaborazione delle merci collegati utilizzando switch e reti di comunicazione ad alta velocità che consente ai dati di essere partizionati tra le risorse di elaborazione disponibili ed elaborati in modo indipendente per ottenere prestazioni e scalabilità in base alla quantità di dati. Un cluster può essere definito come un tipo di sistema parallelo e distribuito , che consiste in una raccolta di computer autonomi interconnessi che lavorano insieme come un'unica risorsa informatica integrata. Questo approccio all'elaborazione parallela viene spesso definito un approccio del "nulla condiviso" poiché ogni nodo costituito da processore, memoria locale e risorse del disco non condivide nulla con gli altri nodi del cluster. In parallelo calcolare questo approccio è considerato adatto per i dati-intensivi elaborazione e problemi che sono “imbarazzante parallelo”, cioè dove è relativamente facile separare il problema in un certo numero di processi in parallelo e non v'è alcuna dipendenza o comunicazione richiesta tra i compiti altre rispetto alla gestione complessiva dei compiti. Questi tipi di problemi di elaborazione dei dati sono intrinsecamente adattabili a varie forme di elaborazione distribuita, inclusi cluster, griglie di dati e cloud computing .

Caratteristiche

Diverse caratteristiche comuni dei sistemi informatici ad alta intensità di dati li distinguono da altre forme di elaborazione:

  1. Il principio di raccolta dei dati e dei programmi o algoritmi viene utilizzato per eseguire il calcolo. Per ottenere prestazioni elevate nell'elaborazione ad alta intensità di dati, è importante ridurre al minimo il movimento dei dati. Questa caratteristica consente agli algoritmi di elaborazione di essere eseguiti sui nodi in cui risiedono i dati riducendo il sovraccarico del sistema e aumentando le prestazioni. Le nuove tecnologie come InfiniBand consentono di archiviare i dati in un repository separato e forniscono prestazioni paragonabili ai dati collocati.
  2. Il modello di programmazione utilizzato. I sistemi di elaborazione ad alta intensità di dati utilizzano un approccio indipendente dalla macchina in cui le applicazioni sono espresse in termini di operazioni di alto livello sui dati e il sistema di runtime controlla in modo trasparente la pianificazione, l'esecuzione, il bilanciamento del carico, le comunicazioni e lo spostamento di programmi e dati attraverso il cluster di elaborazione distribuita. L'astrazione di programmazione e gli strumenti del linguaggio consentono di esprimere l'elaborazione in termini di flussi di dati e trasformazioni che incorporano nuovi linguaggi di programmazione del flusso di dati e librerie condivise di algoritmi di manipolazione dei dati comuni come l'ordinamento.
  3. Un focus su affidabilità e disponibilità. I sistemi su larga scala con centinaia o migliaia di nodi di elaborazione sono intrinsecamente più suscettibili a guasti hardware, errori di comunicazione e bug del software. I sistemi informatici ad alta intensità di dati sono progettati per resistere ai guasti. Ciò include in genere copie ridondanti di tutti i file di dati su disco, archiviazione dei risultati di elaborazione intermedia su disco, rilevamento automatico di errori di nodo o di elaborazione e ricalcolo selettivo dei risultati.
  4. La scalabilità intrinseca dell'architettura hardware e software sottostante . I sistemi di elaborazione ad alta intensità di dati possono in genere essere scalati in modo lineare per ospitare praticamente qualsiasi quantità di dati o per soddisfare requisiti di prestazioni critici in termini di tempo semplicemente aggiungendo nodi di elaborazione aggiuntivi. Il numero di nodi e attività di elaborazione assegnati per un'applicazione specifica può essere variabile o fisso a seconda dell'hardware, del software, delle comunicazioni e dell'architettura del file system distribuito .

Architetture di sistema

Una varietà di architetture di sistema sono state implementate per il calcolo ad alta intensità di dati e applicazioni di analisi dei dati su larga scala, inclusi sistemi di gestione di database relazionali paralleli e distribuiti che sono stati disponibili per essere eseguiti su cluster di nodi di elaborazione non condivisi per più di due decenni. Tuttavia, la maggior parte della crescita dei dati avviene con i dati in forma non strutturata e sono stati necessari nuovi paradigmi di elaborazione con modelli di dati più flessibili. Sono emerse diverse soluzioni tra cui l' architettura MapReduce sperimentata da Google e ora disponibile in un'implementazione open source chiamata Hadoop utilizzata da Yahoo , Facebook e altri. LexisNexis Risk Solutions ha anche sviluppato e implementato una piattaforma scalabile per l'elaborazione ad alta intensità di dati utilizzata da LexisNexis .

Riduci mappa

L' architettura e il modello di programmazione MapReduce , introdotto da Google, è un esempio di un'architettura di sistemi moderna progettata per l'elaborazione ad alta intensità di dati. L'architettura MapReduce consente ai programmatori di utilizzare uno stile di programmazione funzionale per creare una funzione di mappa che elabora una coppia chiave-valore associata ai dati di input per generare un insieme di coppie chiave-valore intermedie e una funzione di riduzione che unisce tutti i valori intermedi associati a la stessa chiave intermedia. Poiché il sistema si occupa automaticamente di dettagli come il partizionamento dei dati di input, la pianificazione e l'esecuzione di attività in un cluster di elaborazione e la gestione delle comunicazioni tra i nodi, i programmatori senza esperienza nella programmazione parallela possono facilmente utilizzare un ampio ambiente di elaborazione distribuito.

Il modello di programmazione per l' architettura MapReduce è una semplice astrazione in cui il calcolo prende una serie di coppie chiave-valore di input associate ai dati di input e produce una serie di coppie chiave-valore di output. Nella fase di mappatura, i dati di input vengono partizionati in suddivisioni di input e assegnati alle attività di mappatura associate ai nodi di elaborazione nel cluster. L'attività Mappa viene in genere eseguita sullo stesso nodo contenente la partizione di dati assegnata nel cluster. Queste attività di mappa eseguono calcoli specificati dall'utente su ciascuna coppia chiave-valore di input dalla partizione dei dati di input assegnata all'attività e generano una serie di risultati intermedi per ciascuna chiave. La fase di mescolamento e ordinamento prende quindi i dati intermedi generati da ciascuna attività Mappa, ordina questi dati con dati intermedi da altri nodi, divide questi dati in regioni che devono essere elaborate dalle attività di riduzione e distribuisce questi dati secondo necessità ai nodi in cui Riduci le attività verranno eseguite. Le attività Riduci eseguono operazioni aggiuntive specificate dall'utente sui dati intermedi, eventualmente unendo i valori associati a una chiave a un insieme più piccolo di valori per produrre i dati di output. Per procedure di elaborazione dati più complesse, è possibile collegare più chiamate MapReduce in sequenza.

Hadoop

Apache Hadoop è un progetto software open source sponsorizzato da The Apache Software Foundation che implementa l'architettura MapReduce. Hadoop ora comprende più sottoprogetti oltre al core di base, MapReduce e al file system distribuito HDFS. Questi sottoprogetti aggiuntivi forniscono capacità di elaborazione delle applicazioni avanzate all'implementazione di base di Hadoop e attualmente includono Avro, Pig , HBase , ZooKeeper , Hive e Chukwa. L'architettura Hadoop MapReduce è funzionalmente simile all'implementazione di Google tranne per il fatto che il linguaggio di programmazione di base per Hadoop è Java anziché C ++ . L'implementazione è intesa per essere eseguita su cluster di commodity processors.

Hadoop implementa un ambiente e un framework di esecuzione e pianificazione dell'elaborazione dei dati distribuiti per i lavori MapReduce. Hadoop include un file system distribuito chiamato HDFS che è analogo a GFS nell'implementazione di Google MapReduce. L'ambiente di esecuzione Hadoop supporta funzionalità di elaborazione dati distribuite aggiuntive progettate per essere eseguite utilizzando l'architettura Hadoop MapReduce. Questi includono HBase , un database distribuito orientato alle colonne che fornisce capacità di lettura / scrittura ad accesso casuale; Hive, un sistema di data warehouse basato su Hadoop che fornisce funzionalità di query simili a SQL per riepilogo dei dati, query ad hoc e analisi di set di dati di grandi dimensioni; e Pig: un linguaggio di programmazione per flussi di dati di alto livello e un framework di esecuzione per l'elaborazione ad alta intensità di dati.

Pig è stato sviluppato su Yahoo! fornire una notazione del linguaggio specifica per le applicazioni di analisi dei dati e migliorare la produttività del programmatore e ridurre i cicli di sviluppo quando si utilizza l'ambiente Hadoop MapReduce. I programmi Pig vengono tradotti automaticamente in sequenze di programmi MapReduce se necessario nell'ambiente di esecuzione. Pig fornisce funzionalità nella lingua per caricare, archiviare, filtrare, raggruppare, deduplicare, ordinare, ordinare, aggregare e unire i dati.

HPCC

HPCC (High-Performance Computing Cluster) è stato sviluppato e implementato da LexisNexis Risk Solutions. Lo sviluppo di questa piattaforma di elaborazione è iniziato nel 1999 e le applicazioni erano in produzione alla fine del 2000. L'approccio HPCC utilizza anche cluster di hardware che eseguono il sistema operativo Linux . Il software di sistema personalizzato e i componenti middleware sono stati sviluppati e stratificati sul sistema operativo Linux di base per fornire l'ambiente di esecuzione e il supporto del file system distribuito necessari per l'elaborazione ad alta intensità di dati. LexisNexis ha inoltre implementato un nuovo linguaggio di alto livello per l'elaborazione ad alta intensità di dati.

Il linguaggio di programmazione ECL è un linguaggio di alto livello, dichiarativo, incentrato sui dati e implicitamente parallelo che consente al programmatore di definire quale dovrebbe essere il risultato dell'elaborazione dei dati e i flussi di dati e le trasformazioni necessari per ottenere il risultato. Il linguaggio ECL include funzionalità estese per la definizione dei dati, il filtraggio, la gestione dei dati e la trasformazione dei dati e fornisce un ampio set di funzioni integrate per operare sui record nei set di dati che possono includere funzioni di trasformazione definite dall'utente. I programmi ECL vengono compilati in codice sorgente C ++ ottimizzato , che viene successivamente compilato in codice eseguibile e distribuito ai nodi di un cluster di elaborazione.

Per affrontare sia gli aspetti batch che quelli online, le applicazioni di elaborazione ad alta intensità di dati, HPCC include due distinti ambienti cluster, ciascuno dei quali può essere ottimizzato indipendentemente per il suo scopo di elaborazione dati parallela. La piattaforma Thor è un cluster il cui scopo è quello di essere una raffineria di dati per l'elaborazione di enormi volumi di dati grezzi per applicazioni come pulizia e igiene dei dati , estrazione, trasformazione, caricamento (ETL), collegamento di record e risoluzione di entità, annunci su larga scala analisi ad hoc dei dati e creazione di dati e indici con chiave per supportare query strutturate ad alte prestazioni e applicazioni di data warehouse. Un sistema Thor è simile nella sua configurazione hardware, funzione, ambiente di esecuzione, filesystem e capacità alla piattaforma Hadoop MapReduce, ma fornisce prestazioni più elevate in configurazioni equivalenti. La piattaforma Roxie fornisce un sistema di query e analisi strutturato ad alte prestazioni o un data warehouse online che fornisce i requisiti di elaborazione dell'accesso parallelo ai dati delle applicazioni online tramite interfacce di servizi Web che supportano migliaia di query simultanee e utenti con tempi di risposta inferiori al secondo. Un sistema Roxie è simile per funzionalità e capacità a Hadoop con l' aggiunta di funzionalità HBase e Hive , ma fornisce un ambiente di esecuzione e un file system ottimizzati per l'elaborazione online ad alte prestazioni. Entrambi i sistemi Thor e Roxie utilizzano lo stesso linguaggio di programmazione ECL per l'implementazione delle applicazioni, aumentando la produttività del programmatore.

Guarda anche

Riferimenti