Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Basi Di Dati Sistemi per la gestione di Big Data Anno Accademico 2013/2014 Candidato: Arcangelo Di Palo matr. N46/000534 Indice Indice..................................................................................................................................................III Capitolo 1: Introduzione......................................................................................................................... 1.1 Definizione................................................................................................................................... 1.2 BigData Software......................................................................................................................... 1.2.1 Tecnologie............................................................................................................................. 1.2.1.1 Analytic RDBMS........................................................................................................... 1.2.1.2 noSQL Systems.............................................................................................................. 1.3 Usi dei BigData............................................................................................................................ 1.4 Situazione Italiana........................................................................................................................ Capitolo 2: SAP HANA 2.1 Architettura................................................................................................................................... 2.1.1 Scalabilità.............................................................................................................................. 2.2 Software........................................................................................................................................ 2.2.1 Oltre SQL.............................................................................................................................. 2.3 Come Lavora HANA.................................................................................................................... 2.4 Costi.............................................................................................................................................. Capitolo 3: MapReduce 3.1 Funzioni Map e Reduce................................................................................................................ 3.2 Implementazione.......................................................................................................................... 3.2.1 Gestione dei fallimenti.......................................................................................................... 3.2.2 Parallelizzazione dei Calcoli................................................................................................. 3.2.3 Distribuzione del Carico........................................................................................................ Capitolo 4: BigTable 4.1 Introduzione.................................................................................................................................. 4.2 Caratteristiche Principali.............................................................................................................. 4.2.1 DataModel............................................................................................................................. 4.2.2 Formato dei File.................................................................................................................... 4.2.3 Servizio Distribuito............................................................................................................... 4.3 Applicazioni Reali........................................................................................................................ 4.3.1 Google Analytics................................................................................................................... 4.3.2 Google Earth.......................................................................................................................... 4.3.3 Ricerca personalizzata........................................................................................................... Bibliografia............................................................................................................................................. Capitolo 1: Introduzione Big Data è un termine per definire una collezione di dati così ampia e complessa da essere difficilmente processabile con database o applicazioni tradizionali e dalla maggior parte dei RDBMS, richiedono invece calcoli paralleli di software che girano su decine, centinaia o migliaia di sever. Lo sviluppo della tecnologia ha portato un incremento delle risorse di gestione intensiva di dati: ci sono 4.6 miliardi di cellulari in tutto il mondo e circa 2 miliardi di persone che possono accedere ad internet. La capacità effettiva mondiale di scambiare informazioni attraverso le reti di telecomunicazione è quasi raddoppiata ogni 40 mesi dal 1989: • 281 PB nel 1986 • 471 PB nel 1993 • 2.2 EB nel 200 • 65 EB nel 2007 • 2,5 EB al giorno nel 2012 e si prevede un ulteriore aumento del traffico causato dal massiccio uso di internet che nel 2014 porterà alla cifra di 667 EB annui. E’ stimato che un terzo delle informazioni memorizzate globalmente è in forma di immagine o testi alfanumerici, che sono i formati più usati per molti dei Big Data application. D’altra parte questo dimostra il potenziale dei dati inutilizzati come video e audio. 1.1 Definizione La definizione di Big Data non è stata ancora sufficientemente articolata nonostante la notorietà di questi ultimi in quanto non si possono racchiudere in un tipo specifico di dato ma hanno forme e dimensioni diverse, vengono infatti denominati dati multi-strutturati. 4 Possiamo cominciare generalizzando dicendo che sono dati la cui dimensione è superiore all’abilità dei comuni software (in generale Basi di Dati Relazionali) di catturare, gestire e processare i dati in tollerabili tempi di attesa. La prima definizione data è però abbastanza variabile anche perchè i software diventano sempre più potenti e le moli di dati sempre più esigue per le generazini tecnologiche successive. Dal punto di vista delle dimensioni possiamo definire un Big Data come un set di dati di dimensioni variabili dalle poche dozzine di terabytes a molti petabytes. Una definizione più completa potrebbe essere: “i Big Data sono un grande volume non strutturato di dati che non possono essere gestiti da database come DBMS, RDBMS o ORDBMS”. La descrizione più diffusa di Big Data si riferisce ad un modello 3Vs, ovvero si descrivono i Big Data come insiemi di dati che necessitano di: Volume, Velocità, Varietà. - Volume: si riferisce alle dimensioni del set di dati da memorizzare e analizzare - Velocità: capacità di effettuare analisi dei dati in tempo reale o quasi, o comunque in tempi accettabili - Varietà: fa riferimento alle varie tipologie di dati provenienti da fonti diverse: strutturate e non (testi, conversazioni via mail o chat). Dispositivi di ogni tipo generano continuamente dati (pagine web, file di weblog, forum, social-media, audio, video, e-mail, documenti, siestemi di sensori) e la maggior parte di questi dati sono di tipo “semistrutturato” mentre le basi di dati classiche, ad esempio relazionali, lavorano con schemi ben definiti e formati. Quindi la varietà di dati da raccogliere rappresenta un cambiamento fondamentale per la memorizzazione e l’analisi. Alcune organizzazioni aggiungono una quarta V per Veridicità - Veridicità: qualità dei dati intesa come valore informativo che si riesce ad estrarre (se ho tanti dati e a final non si capisce che significano è inutile) tale parametro è quindi fondamentale affinchè i dati possano davvero alimentare nuove conoscenze. 5 1.2 Big Data Software I Big Data hanno aumentato la domanda di specialisti nella gestione delle informazioni e aziende come Oracle, IBM, Microsoft, SAP, HP e Dell spendono miliardi in software specializzati unicamente nella gestione e nell’analisi dei dati. Nel 2010 tale settore valeva più di 100 miliardi di dollari ed è cresciuto quasi del 10% annuo: circa il doppio di tutto il mercato software complessivo. Nonostante tale crescita, ad oggi sono poche le aziende che davvero hanno necessità di gestire tali moli di dati, così come ancora pochi sono i software, e più in generale i sistemi, che possono processarli. Di seguito vediamo i principali programmi: • SAP HANA • Apache Hadoop • Google MapReduce • Oracle Exalytics Ma non solo aziende rivolte all’informatica si occupano di tali ricerche, ad esempio un programma della DARPA, l’agenzia del dipartimento della difesa statunitense incaricato di ricerca avanzata, si occupa di Topological Data Analysis, una nuova area di studi orientata a creare applicazione in aree come Data Mining, ovvero estrarre il sapere da grandi quantità di dati e nel 2008 la tecnologia è divenuta pubblica con il lancio della compagnia chiamata Ayasdi. 1.2.1 Tecnologie I Big Data richiedono tecnologie d’eccezione per processare efficacemente grandi quantità di dati in tempi tollerabili. Le componenti generiche sono: • Analytic RDBMS: i normali database relazionali ottimizzati per compiti analitici • noSQL systems: ovvero sistemi non relazionali per l’elaborazione di dati multistrutturati 6 1.2.1.1 Analytic RDBMS Sono soluzioni integrate per gestire dati e generare analisi con un miglior rapporto prezzo/performance, gestione e amministratione rispetto a quanto offerto da RDBMS generalisti. L’ottimizzazione delle prestazioni è garantita dall’utilizzo massivo di elaborazione parallela, superiore qualità della struttura dei dati e tecniche di compressione. Abbiamo inoltre due suddivisioni: • Packaged hardware and softwre appliances: è un sistema integrato costruito da zero per fornire un buon rapporto prezzo/prestazioni per carichi di lavoro analitici. • Software Only: è un insieme di compotenti software per la gestione di carichi di lavoro analitici. Fanno spesso uso di sottostanti software open source e sono progettati per la distribuzione di hardware a basso costo. Il compromesso per la portabilità hardware è l’incapacità del prodotto di sfruttare al massimo un hardware specifico. Lo sviluppo di prodotti Adbms da parte di piccole aziende innovative ha fatto sì che le aziende tradizionali si impegnassero nel migliorare la capacità di elaborazione analitica delle loro offerte DBMS. Ciò ha portato a miglioramenti e nuove funzionalità nei prodotti Rdbms esistenti così come a una politica di acquisizioni. EMC, per esempio, ha acquisito Greenplum, HP Vertica, IBM Netezza, Microsoft Datallegro, Teradata Aster Data. 1.2.1.2 noSQL Systems Non esiste un singolo modello di database in grado di soddisfare tutte le esigenze. Ecco perché molti clienti hanno sviluppato proprie soluzioni non relazionali. Web company come Google e Yahoo sono esempi di organizzazioni che hanno costruito soluzioni personalizzate e alcune di queste sono state offerte in public domain in modo da poter essere disponibili in modalità open software. Vedremo nello specifico HANA della SAP nel capitolo 2 e MapReduce di Google nel capitolo 3. 7 1.3 Usi dei Big Data Ovviamente lo scopo principale non è memorizzare i dati ma analizzarli e ricavare informazioni utili.Vediamo alcuni dei campi in cui sono effettivamente usati i BD: • Scienza e Ricerca • Astronomia: il telescopio Sloan Digital Sky Survey (attivo dal 2000) ha immagazzinato più dati nella sua prima settimana di lavoro di tutta la collezione di dati nella storia dell’astronomia. Al giorno d’oggi ha ammassato 140 Terabytes di dati (200 GB a notte) e il suo successore (sarà attivo dal 2016) il Large Synoptic Survey Telescope acquisirà 140 TB ogni 5 giorni • Biologia: la decodifica del genoma umano originariamente impiegava 10 anni di elaborazione, ora può essere realizzata in meno di una settimana • Meteorologia: l’NCCS, il centro di controllo meteorologico della NASA, immagazzina 32 PB di osservazioni climatiche e simulazioni sul proprio cluster DIscover. • Fisica: il Large Hadron Collider ha 150 milioni di sensori che catturano dati 40 milioni di volte al secondo. Considerando che ogni secondo avvengono 600 milioni di collisioni e che solo lo 0,001% dei sensori vengono attivati lo stream di dati ammonta a 25 PB annui. Se tutti i sensori registrassero dei dati tale insieme sarebbe troppo elevato da processare, potrebbe eccedere i 150 milioni di PB annui. • Governo: • Il Governo Federale degli Stati Uniti ha sei dei dieci supercomputer più potenti del mondo • la United States National Security Agency sta costruendo lo Utah Data Center. Quando sarà finito la NSA sarà in grado di gestire un grande quantitativo di informazioni ricevute da internet. Le dimensioni effettive sono sconosciute ma recenti voci di corriodio parlano dell’ordine degli Exabytes. 8 • Settore privato • eBay.com: usa due data warehouses di 7,5 PT e 40 PT oltre ad un cluster Hadoop per la ricerca e i sistemi di raccomandazione al consumatore. • Amazon.com: processa milioni di operazioni ogni giorno oltre a mezzo milione di richieste provenienti da venditori di terze parti. Amazon possiede i tre più grandi Linux-based database del mondo (7.8, 18.5 e 24.7 TB) • Facebook: tratta 50 miliardi di foto dai suoi utenti, per non parlare dei dati individuali. • Windermere Real Estate: utilizza segnali GPS anonimi vicini da 100 milioni di giudatori per aiutare i nuovi acquirenti di case a determinare i tempi tipici di giuda per arrivare a lavoro durante le varie ore del giorno • UPS: tiene traccia di 16,3 milioni di pacchi al giorno per 8,8 milioni di clienti con una media di 39,5 milioni di richieste di tracciamento al giorno. Vanno anche considerati i sensori nei 46000 veicoli (velocità, direzione, soste) che rendono possibile realizzare una mappa on-line e eventualmente la riconfigurazione del percorso in tempo reale . La compagnia memorizza pià di 16 PB di dati. 1.4 Situazione Italiana In Italia è quasi impossibile trovare aziende che necessitano di immagazzinare dimensioni enormi di dati (la differenza tra Big Data e Data Mining è proprio dell’ordine di grandezza di gran lunga superiore dei BD) e anche nel mondo sono poche le aziende che necessitano di tali dimensioni. Vediamo alcuni esempi italiani: • Twitter: considerando i casi in cui è stato più usato erano attivi 3,5 milioni di italiani (campagna elettorale) e durante il Festival di Sanremo si sono vrificati 150 mila tweet durante la sola finale; un volume che può essere racchiuso in 77MB, senza compressioni, caricato su strumenti personali (Excel), e analizzato per correlazione senza ricorrere ai big data. 9 • Banche: in Italia ci sono 30 milioni di conti correnti bancari e 8 milioni di conti correnti postali. Considerando 20 operazioni al mese otteniamo 600 operazioni totali mensili. In un anno potremmo valutarne 7 miliardi. E’ un numero elevato ma gestibile tranquillamete dalle basi di dati comuni e server aziendali. Il volume complessivo è di alcuni TB D’altronde le società che impiegano stumenti che possono inquadrarsi come Big Data sono poche: Facebook,Twitter, Amazon, Microsoft, Google. In Italia, spesso, l’etichetta “Big Data” viene associata ad operazioni più tradizionali ma comunque altrettanto efficaci quali Business Intelligence e Data Mining. Nei fatti, molte delle tecniche di data mining sono oggi associate a volumi di dati sempre maggiori, magari ottenuti da struenti di big data, anche se a oggi le analisi sono effettuate in momenti e tecnologie differenti. 10 Capitolo 2: SAP HANA SAP (“Systeme, Anwendungen, Produkte in der datenverarbeitung” ovvero Sistemi, Applicazioni e Prodotti nell’elaborazione dati) è una multinazionale tedesca per la produzione di software fondata nel 1972. HANA è l’acronimo per “High-Performance ANalytic Appliance”, è uno strumento computazionale creato per supportare analisi real-time e pocessi transazionali, creato partendo da tecnologie sviluppate o acquisite (la maggior parte sono tecnologie inmemory). Nel 2008 un team della SAP, in collaborazione con Hasso Plattner Institute (Istituto universitario fondato da Hasso Plattner, co-fondatore di SAP) e la Stanford university, mostrò un’architettura per l’analisi e l’aggregazione di dati in real-time denominata “Hasso’s New Architecture”. Prima che fosse introdotto il termine HANA ci si riferiva a tale prodotto con il termine “Nuovo Datbase” Nel 2010 fu ufficialmente annunciato SAP HANA 1.0, un’applicazione in-memory per business application e business intelligence che permettesse risposte real-time. Aggiornamenti successivi hanno migliorato il supporto alle aziende con SAP NetWwaver Business Warehouse (2011) e promosso l’aspetto del cloud computing con HANA One distribuito sul sistema Amazon Web Services ad una tariffa oraria. Le imprese raccolgono grandi quantità di dati strutturati tramite vari sistemi. La maggior parte lotta per fare uso dei dati spendendo ingenti somme per archiviarli e proteggerli. Una possibilità di fare uso di questi dati è quella di estrarre, trasformare e caricare sottoinsiemi in un data warehouse aziendale tradizionale per l'analisi. Questo processo richiede tempo e richiede importanti investimenti in hardware proprietario correlato. Il risultato è spesso un costoso, gonfio External Data Warehouse che fornisce poco più che vedute retrospettive di dati aziendali. 11 SAP HANA offre alle aziende un nuovo approccio per sfruttare il valore di tutti i dati aziendali, dove per “tutti” si intende dati strutturati e non strutturati. Come accennato in precedenza, HANA gira su hardware commodity poco costoso da uno qualsiasi dei diversi partner SAP, Le sue capacità di replica dei dati e integrazione accelerano notevolmente il processo di caricamento dei dati nel database. Utilizzando, inoltre, l'archiviazione in memoria, le applicazioni HANA possono accedere ai dati in tempo quasi reale, cioè gli utenti finali possono ottenere una visione importante dei dati mentre c'è ancora tempo per agire. HANA può anche eseguire analisi predittiva per aiutare le organizzazioni a pianificare futuri sviluppi del mercato. Le imprese sono sempre più esigenti in quanto capacità di elaborazione transazionali e analisi in real-time dalle applicazioni. HANA mette SAP in una buona posizione per fornire tale funzionalità per il suo cliente-base delle imprese tradizionali. Ma il punto debole della politica SAP è che deve bilanciare l'innovazione con il supporto continuo per le sue legacy e altre applicazioni aziendali che formano la spina dorsale di molti ambienti IT enterprise. Quindi, se da un lato si cerca continuamente di migliorare le tecnologie per un’analisi sempre più veloce e precisa dei dati dall’altro l’evoluzione è frenata da vecchi sistemi vitali per un’azienda. 2.1 Architettura HANA è fondamentalmente un DBMS costruito su un hardware moderno (soprattutto grandi quantità di memoria principale, cpu multi-core, storage ssd) classificato come: inmemory, column-oriented, relational. E’ compatibile con le proprietà ACID e supporta standard come SQL, espressioni multidimensionali e strutture noSQL. Analizziamo nel dettaglio le caratteristiche di HANA: In-memory (IMDB): si intende un DBMS che gestisce i dati nella memoria centrale, in contrasto con i DBMS comuni che gestiscono i dati su memoria di massa (principalmente dischi rigidi). L’ovvie conseguenza della gestione in memoria centrale è che i processi sono di gran lunga più veloci ma possono gestire 12 moli di dati inferiori, il che porta a dover mantenere informazioni su un disco fisso in caso di perdita di dati (si usano file di Log e Checkpoint) Column-oriented: definiamo così un DBMS che memorizza i dati in tabelle sottoforma di colonne anzichè righe (la maggior parte dei DBMS sono orientati alle righe). Ciò porta vantaggi nelle data warehouse e altri sistemi ah hoc in cui gli aggregati sono calcolati su un grande numero di dati simili tra loro. Relational database management system: sono i RDBMS basati sul sistema relazionale. Il cuore di HANA è il SAP In-Memory Database 1.0, un MPP (Massive ParallelProcessing) data sotre che fonde tecniche di memorizzazione row-based, column-based e object-based. Monta il sistema operativo SUSE Linux Enterprise Server 11 SP1. Di seguito è riporata un’immagine dell’architettura di SAP HANA. Descriveremo i singoli componenti per una visione più dettagliata. 13 • Connection e Session Management: la componente Connection e Session Management crea e gestisce le sessioni e connesisoni per i clienti di database. Una volta che una sessione è stata stabilita, il cliente di database pososno utilizzare SQL, script SQL (o altri linquaggi specifici del dominio come FOX, linguaggio proprietario di SAP per applicazioni di pianificazione), per comunicare con il database HANA • Transaction Manager: per quanto riguarda le proprietà ACID il Transaction Manager coordina le transazioni di database, controlla l’isolamento transazionale, e tiene traccia di transaizoni in corso e concluse. Per il controllo della concorrenza, il database SAP HANA implementa il classico MVCC • Calculation Engine: script SQL e linguaggi specifici di dominio sono tradotti dai loro compilatori specifici in una rappresentazione interna ciamata “modello di calcolo”. L’esecuzione di questi modelli di calolo è effettuata da il Motore di Calcolo. L’uso di modelli di calcolo facilita la combinaizione di dati memorizzati in differenti In-Memory Storage Engines, nonchè la semplice implementazioni di specifiche applicazioni nel database engine. • Optimize and Plan Generator: Le richieste del cliente vengono analizzate e ottimizzate in tale livello. Sulla base del piano di esecuzione ottimizzato, il motore di esecuzione richiama i diversi Motori di Elaborazione In-Memory e i percorsi dei risultati intermedi tra fasi di esecuzioni consecutive. Una ottimizzazione, per esempio, potrebbe essere la traduzione di strutture non riconosciute (vedi la parte del Calculation Engine) in strutture note per i linguaggi usati da HANA. 14 • Authorization Manager: l’Authorization Manager viene richiamato da altri componenti del database HANA per verificare se un utente ha i privilegi necessari per eseguire le operazioni richieste. Un privilegio concede il diritto di eseguire un’operazione specifica (ad esempio, creare, aggiornare, selezionare, o eseguire). Il database supporta anche i privilegi di analisi che rappresentano filtri o limitaizoni per le query analitiche e controllare l’accesso ai valori con una certa combinazione di atributi dimensionali. Gli utenti sono o autenticati dal database stesso, o l’autenticazione è delegata a un providere di autenticazione esterno, come ad esempio una directory LDAP • Metadata Manager: i Metadati sono utilizzati nel database HANA come definizione di tabella, views, indici e le definizioni di funzioni script SQL. Tali metadati sono gestiti dal Metadata Manager. Possono essere di tipi diversi e sono memorizzati in un catalogo comune per tutti i motori di storage sottostanti. • In-Memory Storage Engine: il centro della figura 2 mostra i tre In-Memory Storage Engine di HANA, vale a dire, il Relational Engine, il Graph Engine, e il Text Engine. • Relational Engine: il Relational Engine supporta sia la rappresentazione fisica orientata alle righe che alle colonne. Un amministratore di sistema specifica a tempo di definizione se una nuova tabella deve essere memorizzata in un formato orientato alle righe o alle colonne. Le tabelle orientate alle righe e alle colonne possono essere facilmente combinate in un unico SQL, e, successivametne spostate da una rappresentazione all’altra. Come regola, l’utente e i dati delle applicazioni sono memorizzati in un formato orientato alle colonne per beneficiare dell’alto tasso di compressione e per l’accesso altamente ottimizzato per query di selezione e aggregazione. Metadati e dati con pochissimi accessi vengono memorizzati in formato orientato alle righe. • Graph Engine: il Graph Engine supporta la rappresentazione ed elaboraizone efficiente di grafi con un sistema flessibile. Una nuova 15 struttura di archiviazione dedicata e un insieme di operazioni di base ottimizzate vengono introdotte per consentire le operazioni con i grafi in modo efficiente tramite il dominio WIPE di interrogazione e manipolaizone. Il Motore dei Grafi è posizionato per supportare in maniera ottimale le applicazioni di pianificazione delle risorse, con un gran numero di singole funzioni e complesse mash-up interdipendenti. Il tipo flessibile di sistema supporta inoltre l’esecuzione efficiente di processi di trasformazione, come pulizia dei dati in scenari data-warehouse, regolare i tipi delle singole voci dei dati, e consente l’integrazione ad hoc di dati provenienti da fonti diverse. • Text Engine: il Text Engine offre l’indicizzazione di testo e funzionalità di ricerca, come la ricerca di esatte parole e frasi, ricerca fuzzy (che tollera errori di battitura), e la ricerca linguistica (che trova variazioni di parole basandosi sulle regole linguistiche). In aggiunta, i risultati della reicerca possono essere classificati e la capacità di ricerca può essere estesa attraverso più tabelle. Questa funzionalità è disponibile per le applicaizoni tramite estensioni SQL specifiche. Per l’analisi del testo, viene utilizzato un Preprocessor Server che sfrutta la SAP’s Text Analysis Library. • Persistence Layer: il Persistency Layer, illustrato nella parte inferiore della Figura 2, è responsabile della durabilità (durability) e atomicità delle transazioni. gestisce volummi di dati e di log sul disco e fornisce interfacce per la scrittura e la lettura dei dati che sono influenzati da tutti i mototi di storage. Il Persistency Layer assicura che il database venga ripristinato al più recente stato affidabile dopo un riavvio e che le operazioni siano eseguite completamente o completamente annullate. Per raggiungere questo obiettivo in modo efficiente, utilizza una combinazione di write-ahead logs, shadow paging e punti di salvataggio. 2.1.1 Scalabilità 16 Per consentire la scalabilità in termini di volumi di dati e numero di richieste di applicazioni, il SAP HANA database supporta scale-up e scale-out. Scale-up: tutti gli algoritmi e le strutture dati sono progettati per lavorare su grandi architetture multi-core. Scale-out: il database è progettato per funzionare su un cluster di macchine singole che consentono la distribuione dei dati e di elaborazione di query su più nodi. 2.2 Software SAP ha sviluppato varie applicazioni analitiche specificamente per sfruttare le funzionalità in tempo reale offerta da HANA, tra cui SAP Smart Meter Analytics e SAP CO-PA Accelerator. Sono in fase di sviluppo altri software concentrati su analisi relative alla vendita al dettaglio, applicazioni finanziarie, delle telecomunicazioni e altri settori quali la gestione del capitale umano. HANA comprende anche una componente di programmazione che consente al reparto IT di un'azienda di creare ed eseguire programmi applicativi personalizzati nei livelli superiori di HANA. Poichè HANA può essere eseguito in parallelo ad una applicazione SAP ERP (sono sistemi gestionali della SAP), gli analisti possono accedere ai dati operativi e transazionali in tempo reale e non dover aspettare per un rapporto giornaliero o settimanale per l'esecuzione. La piattaforma fornisce librerie avanzate per predittività, pianificazione, elaborazione testi, spaziale e business analytics. Il tutto è integrato sulla stessa architettura in modo da semplificare ulteriormente lo sviluppo di applicazioni e di elaborazione tra fonti Big Data e strutturate. Le analisi possibili sono molteplici, ad esempio è possibile sottoporre una query e HANA analizzerà contemporaneamente dati strutturati e non strutturati, transazionali e analitici 17 proveniente dalle più svariate fonti per offrire un responso in real time. Oltre ad analisi passate, che sorvolando sulle dimenisoni sono possibili attraverso un qualunque classico database, è possibile ricevere analisi predittive, spaziali e testuali grazie ad una suite di Librerie appositametne studiate dall’azienda. Consideriamole in dettaglio: L'analisi predittiva offre nuove tendenze e nuovi modelli di cui non si era a conoscenza. L'analisi spaziale consente di ricavare informazioni territoriali per facilitare processi decisionali (es. rilevazioni gps). L'analisi testuale consente di sfruttare i dati non strutturati memorizzati sottoforma di linguaggio naturale (es. mail ufficiali) ed estrarre entità utili all'elaboraizone. 2.2.1 Oltre SQL La grande differenza di HANA rispetto agli storage classici è la capacità di sfruttare le conoscenze di oggetti di business complessi e di effettuare specifiche logiche di business, tipiche della SAP, nel cuore del sistema, quindi andare oltre lo standard di descrizione del linguaggio SQL. Più in particolare, le caratteristiche “Beyond SQL” della SAP HANA si manifestano in diversi modi: Su piccola scala: estensioni specifiche di SQL consentono l’esposizione delle capcacità dei motori di elaborazione delle query specifiche. Per esempio, un’etensione nalla proposizione WHERE consente l’espressione di query di recerca sfocata con il Text Engine. Un concetto esplicito supporta la programmazione di processi e analisi “What if?”. Inoltre, SQL Sript fornisce un linguggio di programmazione flessibile in cui coesistono espressioni imperative e funzionali. La parte imperativa consente di descrivere facilmente i dati e la logica di controllo del flusso (tramite DDL, DML, e SQL). Le espressioni funzionali, d’altra parte, sono usate per esprimere logiche dichiarative per l’esecuzione efficace dei calcoli dataintensive. Inoltre è possibile eseguire tali espressioni in operazioni parallele. 18 Su grande scala: linguaggi specifici di dominio possono essere supportati da specifici compilatori. Ad esempio MDX saranno nativamente tradotte in strutture di query interne risolvendo il più possibile complesse espressioni dimensionali durante lo step di compilazione consultando le strutture di oggetti business memorizzati nel catalogo metadati. A differenza di una classica BI non è necessario un OLAP supplementare per generare istruzioni SQL complesse. inoltre il database SAP HANA può sfruttare direttametne la conoscenza dei modelli OLAP che possiedono molta più semantica rispetto a strutture relazionali piane. Oltre agli operatori sutudiati appositamente, HANA incorpora anche una Business Function Library (BFL) che offre applicazioni specifiche per il codice SAP. Tutti i moduli delle logiche di business sono integrati nel kernel del database con il massimo grado di parallelismo. Per riassumere, SAP HANA fornisce un interfaccia SQL classica includendo tutte le proprietà transazionali richieste da un classico DBMS. In aggiunta si posiziona come un sistema “Beyond SQL” fornendo un ecosistema di linguaggi specifici, con particolare sostegno interno a livello di singoli operatori. Inoltre, il concetto di BFL, ovvero fornire una serie di complesse funzioni per il business all’interno del Kernel (quindi standardizzate e ottimizzate) crea chiari benrefici per SAP e applicazioni specifiche dei clienti. 2.3 Come lavora HANA SAP HANA è stato progettato per replicare e ingerire rapidamente dati strutturati provenienti da database relazionali SAP e non-SAP, applicazioni e altri sistemi. Uno di tre stili di replica dei dati (trigger-based, ETL-based o log-based) è usato a seconda del sistema origine e caso d’uso desiderato. I dati replicati vengono quindi memorizzati nella RAM anzichè caricati sul disco che è la forma tradizionale di memorizzazione dei dati. Poichè i dati vengono archiviati in memoria è possibile accedervi in tempo quasi reale 19 dalle applicazioni analitiche e transazionali che si trovano nella parte superiore diHANA. 2.4 Costi SAP non ha rilasciato pubblicamente informazioni sui prezzi specifici riguardanti HANA, ma le prime stime indicano che i clienti possono inizialmente avere HANA installato e funzionante per meno di $ 300.000, inclusi hardware, software e servizi. A seconda della scala, livelli di prezzo possono raggiungere fino a $ 2 milioni o più. HANA non è in grado di immagazzinare petabyte di dati. Tuttavia, grazie alle sue capacità di compressione avanzate, le distribuzioni HANA sono in grado di memorizzare decine di terabyte di dati o più, che è considerato un gran volume di dati nella maggior parte degli ambienti dei clienti SAP in corso. 20 Capitolo 3: MapReduce/BigTable Google è la nota azienda statunitense di servizi online, nata sulle solide basi del motore di ricerca omonimo. Nel tempo ha creato diversi servizi come Gmail, Google Maps e tanti altri, negli ultimi anni è attiva nel campo dei Sistemi Operativi grazie ad Android, orientato principalmente ai cellulari. Negli ultimi cinque anni, gli autori e tanti altri di Google hanno implementato centinaia di elaborazioni special-purpose che elaborano grandi quantità di dati grezzi, quali documenti scansionati, richieste di web log ecc. capaci di ricavare dati derivati, come, varie rappresentazioni della struttura grafica dei documenti web, l’insieme delle query più frequenti in un dato giorno ecc. La maggior parte di questi calcoli sono concettualmente semplici. Tuttavia, i dati in ingresso sono di solito di grandi dimensioni e i calcoli devono essere distribuiti su centinaia o migliaia di macchine in modo da finire in un ragionevole lasso di tempo. I problemi di parallelizzazione dei calcoli, della distribuzione dei dati e della gestione dei fallimenti rischiano di oscurare il semplice compito originale a causa delle grandi quantità di codice complesso da utilizzare per affrontare questi problemi. Come reazione a questa complessità abbiamo progettato una nuova astrazione che ci permette di esprimere i semplici calcoli che cercavamo di eseguire nascondendo i dettagli della parallelizzazione, gestione dei fallimenti, distribuzione dei dati e bilanciamento del carico in una libreria. La nostra astrazione si ispira alle primitive Map e Reduce presenti in Lisp e molti altri linguaggi funzionali. Ci siamo accorti che la maggior parte dei nostri calcoli coinvolgeva un’operazione Map per ogni “record” logico in ingresso, al fine di calcolare un set di coppie chiave/valore intermedio, e quindi l’applicazione di una Reduce su tutti i valori che condividevano la stessa chiave, in modo da combinare i dati derivati in manieara appropriata 21 MapReduce è un modello di programmazione e attuazzione associato all’elaborazione e alla generazione di grandi insiemi di dati. Gli utenti specificano due funzioni: Map() che elabora una coppia chiave/valore per generare un insieme intermedio di coppie chiave/valore Reduce() che unisce tutti i valori intermedi associati alla stessa chiave. Molti compiti reali sono esprimibili con tale modello, come di seguito sarà dimostrato. I programmi scritti con stile funzionale sono automaticamente parallelizzati ed eseguiti su un Large Cluster di macchine commodity. Il sistema in fase di run-time si prende cura dei dettagli del partizionamento dei dati di input, della pianificazione dell’esecuzione del programma attraverso una serie di macchine, e la gestione necessaria della comunicazione tra le macchine. Tale approccio consente ai programmatori senza alcuna esperienza con i sistemi paralleli e distribuiti di utilizzare facilmente le risorse di un Large Distributed System. MapReduce, girando su tante macchine commodity, è altamente scalabile: una tipica computazione di MapReduce elabora molti terabyte di dati su migliaia di macchine. I Programmatori trovano il sistema di semplice utilizzo: centinaia di programmi MapReduce sono stati implementati e più di un migliaio di job MapReduce vengono eseguiti sui cluster Google ogni giorno. 3.1 Funzioni Map e Reduce Il processo prende in ingresso una coppia chiave/valore e produce un insieme di coppie chiave/valore in uscita. L’utente della libreria MapReduce esprime il calcolo con due funzioni: Map e Reduce. • Map: scritta dall’utente, prende una coppia di ingressi e produce un insieme di M coppie intermedie chiave/valore • Reduce: scritta dall’utente, il processo MapReduce considera tutti gli M valori intermedi associati alla stessa chiave intermedia e li invia alla funzione Reduce. Tale funzione accetta una chiave intermedia e un set di valori per tale chiave, fonde 22 insieme questi valori per formarne il più piccolo insieme possibile. A esempio Si consideri il problema di contare il numero di occorrenze di ogni parola in una grande collezione di documenti. L’utente dovrebbe scrivere un codice simile al seguente pseudo-codice per le funzioni Map e Reduce: • La funzione Map riceve in ingresso una coppia (chiave, contenuto) con cui intendiamo per “chiave” il nome univoco di un documento e per “contenuto” il testo stesso del documento. La funzione, per ogni parola del documento, genera in uscita una coppia (parola, 1) (vista come un insieme chiave/valore intermedio) ovvero indica che ha trovato una occorrenza di quella parola. map(String chiave, String contenuto) for ogni parola i in contenuto CreaIntermedio(i, “1”); esempio pratico: se avessi un contenuto del genere: Antoio è il cugino di Antonio, la map genererebbe tale schema, ovvero gli M valori intermedi (parola, 1): • Antonio 1 è 1 il 1 cugino 1 di 1 Antonio 1 La Reduce riceve in ingresso i precedenti valori intermedi, quindi la coppia (parola, 1), raggruppa tutte le coppie che presentano la stessa parola (usata quindi come chiave) e somma i valori di tutte le coppie, generando una sola coppia in uscita, contenente la parola e la somma di tutte le occorrenze. Quindi somma tutti i conteggi emessi per una data parola. Nel codice sottostante “chiave” identifica la parola della precedente funzione e “valore” è il 23 precedente contatore delle occorrenze della parola: reduce(String chiave, Iterator valore) for ogni j in valore risultato+=AnalizzaInt(j); Crea(ComeStringa(result); Considerando i valori pratici dell’esempio precedente avremo come risultato tale lista: Antonio 2 cugino 1 di 1 è1 il 1 Considerando uno schema input -> output: map (k1, v1) -> list (k2, v2) reduce (k2, list(v2)) -> list (v2) Il codice sopra sottolinea che le chiavi e i valori di input sono tratti in un diverso dominio rispetto alle chiavi e ai valori di output. Inoltre chiavi e valori intermedi sono dello stesso dominio, come le chiavi e i valori di uscita. 3.2 Implementazione Sono possibili molte diverse implementazioni dell’interfaccia di MapReduce. La scelta giusta dipende dall’ambiente in cui dovrà operare. Per esempio un’implementazione può essere adatta per una piccola macchina a memoria condivisa, un’altra per un grande multiprocessore NUMA (architettura di memoria per i sistemi multiprocessore) e un’altra ancora per collezioni ancora più grandi di macchine collegate in rete. 24 Questa sezione descrive l’implementazione mirata all’ambiente di calcolo in largo uso a Google: grandi cluster di pc commodity collegati insieme tramite switch Ethernet. In tale ambiente le macchine sono tipicamente processori dual-processor x86 con Linux, con 2 o 4 GB di memoria per macchina. L’hardware di rete Commodity viene usato, in genere, a 100 Mb/s o 1 Gb/s a livello macchina ma in media ha una larghezza di banda complessiva molto inferiore. Un Cluster consiste di centinaia o migliaia di macchine e quindi i guasti alle macchine sono comuni. Lo memoria di massa è fornita da dischi IDE economici collegati direttamente alle singole macchine. Un file system distribuito sviluppato in-house viene utilizzato per gestire i dati memorizzati su questi dischi. Il file system utilizza la replicazione per fornire disponibilità e affidabilità a valle di un hardware inaffidabile. Gli utenti inviano i lavori ad un sistema di scheduling. Ogni job consiste di un insieme di task e viene mappato dallo scheduler su una serie di macchine disponibili all’interno di un cluster. Consideriamo uno degli aspetti principali di tale framework: la tolleranza ai guasti. 3.2.1 Gestione dei fallimenti Dal momento che la libreria MapReduce è progettata per aiutare processi con grandi quantità di dati usando centianaia o migliaia di macchine, la libreria deve tollerare guasti macchina in maniera soft. Fallimento del Worker Il Maestro “pinga” tutti Worker periodicamente. Se non riceve risposta da un worker in un certo lasso di tempo designa il fallimento del worker. I task si possono dividere in “completati” e “in corso”. I task map completati dal worker sono ripristinati al loro stato di inattività iniziale (idle) e quindi diventano idonei per lo scheduling su altri worker. Allo stesso modo, qualunque task map o reduce ancora in attività su un worker fallito sono resettati al minimo e diventano idonei per la riprogrammazione (rescheduling). Task map completati vengono nuovamente eseguiti su un worker fallito perchè la loro 25 produzione è memorizzata sul disco locale della macchina fallita e quindi è inaccessibile. I Task reduce completi non necessitano di essere eseguiti nuovamente in quanto il loro output è memorizzato nel file system globale. Quando una map viene eseguita prima da un worker A e poi eseguita da un worker B (perchè A fallisce), tutti i lavoratori che eseguono la reduce vengono informati della riesecuzione. Qualsiasi task reduce che non ha già letto i dati del worker A leggerà i dati dal worker B. Map Reduce è resistente ai guasti di worker su larga scala. Ad esempio, durante una operazione MapReduce, una manutenzione di rete eseguita su un cluster ha causato la caduta di gruppi di 80 macchine alla volta per diventare irraggiungibile per alcuni minuti. Fallimento del Master Il Master mantiene diverse strutture dati. Per ogni task map e reduce memorizza lo stato (idle, in corso o completato) e l’identità della macchina worker. Il Master è il condotto attraverso il quale i file intermedi sono propagati dai task map ai reduce. Pertanto, per ogni task map completo il master memorizza le posizioni e le dimensioni delle regioni di file intermedi R prodotte dal task mappa. Aggiornamenti di questa posizione e informazioni sulle dimensioni vengono ricevute a task map completato. L’informazione è inviata ai worker che hanno in corso attività reduce. E’ facile far salvare al Master dei checkpoint periodici delle strutture dati sopra descritte. Sei il task master muore una nuova copia può essere avviata dall’ultimo stato checkpoint. Tuttavia, dato che c’è un solo master, il suo falilmento è improbabile, quindi l’implementazione attuale prevede la terminazione immediata dell’operazione di MapReduce. I clienti possono verificare questa condizione e ritentare l’operazione MapReduce se lo desiderano. 3.2.2 Parallelizzazione dei Calcoli Quando gli operatori map e reduce definiti dagli utenti sono funzioni deterministiche dei loro valori di input l’implementazione distribuita di Google produce lo stesso risultato che 26 sarebba stato prodotto da una esecuzione non divisa (quindi non parallela ma sequenziale) dell’intero programma. Per questa proprietà facciamo affidamento su commit atomici di map e task di output per le reduce. Ogni attività in corso scrive il suo output su file temporanei privati. Un task reduce produce un unico file di questo tipo, mentre un task map produce R file di questo tipo (ognuno sarà l’ingresso per un task reduce). Una volta completata il task map, il worker invia un messaggio al master e include i nomi dei file temporanei R nel messaggio. Se il master riceve un messaggio di completamento di un task map già completato ingora il messaggio. In caso contrario, registra i nomi dei file R in una struttura dati del master. Al termine di un task reduce, il worker reduce rinomina atomicamente il suo file di output temporaneo con il nome del file di output finale. Se la setessa operazione reduce viene eseguita su più macchine, più chiamate di ridenominazione saranno eseguite per lo stesso file di output finale. A tal proposito si evitano più ridenominazioni grazie all’operazione di ridenominazione atomica fornita dal file system sottostante in modo tale che lo stato finale del file system contenga solo i dati prodotti da una singola esecuzione del task reduce. La stragrande maggiornanza degli operatori map e reduce sono deterministici e il fatto che la semantica sia equivalente ad una esecuzione sequenziale rende molto semplice ai programmatori poter ragionare sul comportamento dei propri programmi. Quando la map e/o la reduce non sono deterministiche viene fornita una semantica più debole. Consideriamo il caso di operatori non deterministici: sappiamo che i dati sono replicati su più macchine, quindi è possibile avere più risultati di una map M1. Tali risultati, essendo figli di un’esecuzione deterministica saranno uguali, quindi una reduce R1 può lavorare indifferentemente su uno qualsiasi degli output: M1 worker 1 -> R1 -> A M1 worker 2 -> R2 -> A M1 worker x -> Rx -> A 27 Consideriamo ora il caso di operatori non deterministici: il risultato di una map M2 potrebbe essere diverso dal risultato della stessa map M2 eseguita su una macchina diversa. Ciò comprometterebbe il risultato delle funzioni R2 che andranno ad utilizzare dati differenti. M2 worker 1 -> R1 -> A M2 worker 2 -> R2 -> B M2 worker x -> R3 -> C 3.2.3 Distribuzione del carico Le invocazioni della Map sono distribuite su più macchine per il partizionamento automatico dei dati di input in un insieme di gruppi M. I frammenti in ingresso possono essere trattati in parallelo da macchine diverse. Le invocazioni della Reduce sono distribuite suddividendo lo spazio della chiave intermedia in R pezzi utilizzando una funzione di partizionamento. Il numero di partizioni R e la funzione di partizionamento sono specificati dall’utente. 28 La Figura 1 mostra il flusso generale di un’operazione MapReduce. Quando il programma utente chiama la funzione MapReduce si invoca il seguente algoritmo: La libreria MapReduce, nel programma utente, prima divide i file di input in M pezzi (in generale dai 16 MB ai 64 MB per pezzo controllabili dall’utente tramite un parametro opzionale, poi esegue molte copie del programma su un cluster di macchine. Una delle copie del programma è speciale, il Master. Il resto sono i Worker a cui vengono assegnati i lavori dal master. Ci sono da assegnare M task Map ed R task Reduce. Il Master sceglie i lavoratori inattivi e assegna a ciascuno un task Map e un task Reduce. Un worker a cui viene assegnata una Map legge il contenuto del corrispondente frammento di input, analizza le coppie chiave/valore sui dati di input e applica la Map dell’utente. Periodicamente, le coppie bufferizzate vengono scritte in locale sul disco e partizionate in R regioni dalla funzione di partizionamento. Le posizioni di queste coppie bufferizzate sul disco locale sono passate al master che è responsabile dell’inoltro di queste posizioni ai worker che eseguono la funzione reduce, Quando a un reduce worker viene a conoscenza, tramite il master, di queste posizioni, utilizza letture in remoto per leggere i dati memorizzati nel buffer dei dischi locali dei map worker. Quando un reduce worker ha letto tutti i dati intermedi, li ordina nelle chiavi intermedie in modo che tutte le occorrenze della stessa chiave siano raggruppate insieme. E’ necessaria la Sort (o in generale l’ordinamento) perchè in generale molte chiavi diverse mappano lo stesso task reduce. Se la quantità di dati intermedi è troppo grande per entrare in memoria viene usato un ordinamento esterno. L’output della funzione Reduce viene aggiunto ad un file di output finale. Quando tutte le attività di Map e Reduce sono state completate il Master sveglia il 29 programma utente. A questo punto la chiamata MapReduce nel programma utente ritorna al codice utente. Terminato con successo l’algoritmo MapReduce l’output dell’esecuzione MapReduce è disponibile sui file di uscita R. In generale gli utenti non hanno bisogno di combinare questi file di uscita R in un unico file, infatti spesso tali file sono passati come input per un’altra chiamata MapReduce o usati da un’altra applicazione distribuita che è in grado di gestire input diviso in più file o utilizza altri programmi per visualizzazioni diverse da quella testuale. 4 BigTable Abbiamo analizzato il framework MapReduce nella sezione precedente, ma sarebbe impossibile paragonarlo ad un vero e proprio database in quanto “semplicemente” estende le proprietà di un comune DMBS in modo tale da poter supportare caratteristiche necessarie per processare i BigData. Vediamo quindi di seguito uno dei sistemi più noti che sfruttano MapReduce proprio per “potenziarsi”. 4.1 Introduzione BigTable è un sistema di storage e database distribuito per la gestione di dati strutturati, ad altre prestazioni, che può adattarsi a insiemi di dati di enormi dimensioni. Progettato e costruito da Google per conseguire risultati ottimali mediante strumenti già esistenti come il Google File System, il framework MapReduce e altre tecnologie proprietarie. Molti progetti Google sono memorizzati in BigTable, tra cui l’indicizzazione web, Google Earth, Google Finance. Questa applicazioni pongono esigente molto diverse, sia in termini di dimenisoni dei dati (da url di pagine web a imamgini satellitari) e requisiti di latenza (dai servizi a memorizzazione persistente a servizi in tempo reale). Nonostate queste diverse esigenze BigTable ha fornito con successo una soluzione flessibile ed alte prestazioni per tutti questi prodotti Google. 30 4.2 Caratteristiche principali BigTable è un DBMS nel seso che condivide con tali tipologie di software molte strategie di implementazione: parallelizzazione del calcolo, in-memory, elevata scalabilità, alte prestazioni. Si differenzia da tali sistemi per la sua interfaccia: non supporta un modello full-relational ma fornisce un modello di dati semplice, che dimostra un approccio dinamico al formato e consente di ragionare sulla loro località nella memoria sottostante; condivide con le moderne generazioni di DBMS la possibilità di immettere dati non interpretati sottoforma di stringhe, spesso infatti si utilizza tale tipologia di dati per introdurre dati semi-strutturati e strutturati. E’ inoltre possibile scegliere se lavorare inmemory o su disco. 4.2.1 Data Model BigTable basa le proprie operazioni sulla Map. Tale funzione è indicizzata da una chiave riga, una chiave colonna e un timestamp. Ogni valore nella Map è una matrice di byte: Figura 1 Consideriamo la Figura 1, è un esempio di una tabella che memorizza pagine web. Il nome della riga è un URL invertito. la prima column family “contents” memorizza il contenuto della pagina, le successive column family “anchor” contengono il testo dei link che fanno riferimento alla pagina. Ad esempio, l’home page della CNN fa riferimento sia allo Sport che alla home page MY-look, quindi la riga contiene colonne di ancoraggio: cnnsi.com e my.look.ca. Ogni cella di ancoraggio ha una versione. La colonna dei contenuti ha tre versioni, dipendenti dal timestamp, t3, t5, t6. 31 Quindi gli URL vengono utilizzati come riga chiave, i vari aspetti della pagina web sono memorizzati come colonne e il contenuto della pagina web è memorizzato nella colonna “contents”. 4.2.2 Formato dei File Il formato del file di Google SSTable viene utilizzato internamente per memorizzare i dati BigTable. Un SSTable offre un persistente, rdered mappa immutabile da chiavi di valori, in cui entrambe le chiavi ed i valori sono stringhe di byte arbitrarie. Le operazioni sono previste per cercare il valore associato a una chiave specificata, e per scorrere tutte le coppie chiave / valore in un intervallo chiave specificata. Internamente, ogni SSTable contiene una sequenza di blocchi (tipicamente ogni blocco è 64 KB, ma questo è configurabile). Un indice di blocco (memorizzati alla fine del SSTable) viene utilizzata per individuare blocchi; l'indice viene caricato in memoria quando il SSTable è aperto. Una ricerca può essere eseguita con un singolo disco cerchiamo: dobbiamo prima trovare il blocco appropriato eseguendo una ricerca binaria nell'indice in memoria, e quindi la lettura del blocco appropriato dal disco. Facoltativamente, un SSTable può essere completamente mappato in memoria, che ci permette di effettuare ricerche e scansioni senza toccare disco 4.2.3 Servizio Distribuito Un cluster Bigtable opera tipicamente in un pool condiviso di macchine che eseguono una varietà di altre applicazioni distribuite, e i processi Bigtable spesso condividono le stesse macchine con processi di altre applicazioni. Bigtable pende su un sistema cluster di gestione per i processi di pianificazione, gestione delle risorse su macchine condivise, fallimenti hardware, e il monitoraggio dello stato della macchina. Bigtable si basa su un servizio di blocco distribuito altamente disponibile e persistente chiamato Chubby. Un servizio Chubby si compone di cinque repliche attive, uno delle quali viene eletto ad essere il Master e servire attivamente le requests. Il servizio è 32 efficiente quando la maggioranza delle repliche sono in esecuzione e in grado di comunicare tra loro. Bigtable utilizza Chubby per una varietà di compiti: per garantire che vi sia al massimo un master attivo in qualsiasi momento; per memorizzare il percorso bootstrap dei dati BigTable; per scoprire i server e finalizzare le morti dei server; per memorizzare le informazioni sullo schema Bigtable (le informazioni famiglia di colonne per ogni tabella); e per memorizzare elenchi di controllo di accesso. Se Chubby diventa non disponibile per un periodo di tempo prolungato, Bigtable non è più disponibile. 4.3 Applicazioni Reali Ad agosto 2006, ci sono 388 non-test cluster BigTable in esecuzione in vari cluster di macchine di Google, con un totale di circa 24.500 server tablet. Molti di questi gruppi sono utilizzati per scopi di sviluppo e quindi sono in idle per periodi significativi. Un gruppo di 14 cluster occupati con 8.069 server ha visto un volume complessivo di oltre 1,2 milioni di richieste al secondo. Alcune Tabelle sono assegnate ai clienti del database ma la maggior parte sono utilizzate internamente all’azienda, vediamo alcuni prodotti che utilizzano BigTable 4.3.1 Google Analytics Google Analytics (analytics.google.com) è un servizio che aiuta i webmaster ad analizzare i modelli di traffico sui loro siti web. Esso fornisce statistiche aggregate, come ad esempio il numero di visitatori al giorno e quali sono state viste in quel giorno, nonché le relazioni del sito di monitoraggio, come ad esempio la percentuale di utenti che ha fatto un acquisto, dopo che in precedenza hanno visto una pagina specifica. Per attivare il servizio, i webmaster incorporano un piccolo programma JavaScript nelle loro pagine web. Questo programma viene richiamato ogni volta che si visita una pagina e registra varie informazioni relative alla richiesta di Google Analytics, come ad esempio un identificativo 33 utente e le informazioni sulla pagina per essere recuperata. Google Analytics riassume i dati e li rende disponibili per i webmaster. Vediamo brevemente due delle tabelle utilizzate da Google Analytics. La tabella “click grezzo” (200 TB) mantiene una riga per ogni sessione dell’utente finale. Il nome della riga è una tupla contenente il nome del sito e l'ora in cui la sessione è stata creata. Questo schema garantisce che le sessioni che visitano lo stesso sito web siano contigue, e che siano ordinate cronologicamente. La compressione di tale tabella è il 14% del suo spazio originale. La tabella riassuntiva (20 TB) contiene vari riassunti per ogni sito web. Questa tabella è generata dalla tabella click grezzo e richiede periodici lavori tramite MapReduce. Ogni lavoro MapReduce estrae i dati di sessione recenti dalla tabella click grezzo. Il rendimento del sistema complessivo è limitato dalla velocità delle interconnessioni. Questa tabella comprime al 29% la sua dimensione originale. 4.3.2 Google Earth Google gestisce un insieme di servizi che forniscono agli utenti l'accesso alle immagini ad alta risoluzione satellitare della superficie del mondo, sia attraverso l'interfaccia webbased di Google Maps (maps.google.com) e tramite Google Earth (earth.google.com) client personalizzato software. Questo sistema utilizza una tabella di dati pre-elaborati, e un diverso insieme di tabelle per servire i client. La pipeline di pre-elaborazione utilizza una tabella per memorizzare le immagini in righe. Durante la pre-elaborazione, l'immaginario è pulito e consolidato in dati finali. Questa tabella contiene circa 70 terabyte di dati e, pertanto, viene servita dal disco. Tali immaggini sono già compresse in modo efficiente quindi è disattivata la compressione BigTable. Ogni riga della tabella delle immagini corrisponde ad un singolo segmento geografico. Le righe sono chiamate a garantire che i segmenti geografici adiacenti siano conservati vicino a vicenda. La tabella contiene una famiglia colonna per tenere traccia delle fonti di dati per ogni segmento. Questa famiglia colonna ha un gran numero di colonne: essenzialmente una per ogni immagine. Dal momento che ogni segmento viene costruito solo da poche immagini, 34 questa famiglia Colonna è molto piccola. La pipeline di pre-elaborazione si basa pesantemente su MapReduce per trasformare i dati. I processi di sistema complessivo sono di oltre 1 MB / sec di dati al server durante alcuni di questi posti di lavoro MapReduce. Il sistema usa una tabella di dati indicizzati e memorizzati nel Google File System. Questa tabella è relativamente piccola (500 GB), ma deve servire decine di migliaia di query al secondo per datacenter con bassa latenza. Come risultato, questa tabella è presente su centinaia di server tablet e contiene famiglie di colonna In-Memory. 4.3.3 Ricerca Personalizzata Ricerca personalizzata (www.google.com / psearch) è un servizio che registra le query degli utenti e click attraverso una varietà di proprietà di Google come la ricerca web, immagini e notizie. Gli utenti possono navigare le loro cronologie e rivedere le loro vecchie query e click, e possono chiedere dei risultati di ricerca personalizzati in base ai loro modelli di utilizzo di Google. Ricerca personalizzata memorizza i dati di ciascun utente in BigTable. Ogni utente dispone di un UserId unico e tale UserId viene assegnao ad una riga. Tutte le azioni dell'utente vengono memorizzati in una tabella. Una famiglia colonna separata è riservata per ciascun tipo di azione (per esempio, vi è una famiglia di colonne che memorizza tutte le query web). Ogni elemento di dati utilizza come timestamp l'ora in cui si è verificata la corrispondente azione dell'utente. Ricerca personalizzata genera i profili utente utilizzando un MapReduce su Bigtable. Questi profili utente vengono utilizzati per personalizzare i risultati di ricerca in tempo reale. I dati Ricerca personalizzata sono replicati attraverso diversi cluster BigTable per aumentare la disponibilità e per ridurre la latenza a causa della distanza da parte dei clienti. La progettazione del sistema di ricerca di storage personalizzata consente ad altri programmi di aggiungere nuove informazioni per ogni utente nelle proprie colonne, e il sistema viene ora utilizzato da molte altre proprietà di Google che hanno bisogno di memorizzare per ogni utente le opzioni e le impostazioni di configurazione. 35 Bibliografia [1] Marco Russo, “Che cosa pensereste se vi dicessero che in Italia i BigData non esistono?”, Maggio 2013 [2] Colin White, “What is BigData and why do we need it?”, Gennaio 2012 [3] Jeff Kelly, “Primer on SAP HANA”, Luglio 2013 [4] saphana.com, http://www.saphana.com/community/about-hana, Giugno 2014 [5] Franz Farber, Sang Kyun Cha, Jurgen Primsch, Christof Bornhovd, Stefan Sigg, Wolfgang Lehner, “Paper - SAP HANA Database – Data Management for Modern Business Applications”, Dicembre 2011 [6] Jeffrey Dean and Sanjay Ghemawat, “Paper – MapReduce: Simplified Data Processing on Large Clusters”, 2004 [7] Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber, “Paper – BigTable: A Distributed Storage System for Structured Data”, 2006 36