Scuola Politecnica e delle Scienze di Base
Corso di Laurea in Ingegneria Informatica
Elaborato finale in Basi di Dati
Tecnologie NoSQL: HBase
Anno Accademico 2014/2015
Candidato:
Daniela Bianco
matr. N46001409
Ai miei genitori,
per esser stati un assiduo sostegno
durante questo percorso.
Alla mia dolce metà,
per aver camminato al mio fianco.
Indice
Indice…………………………………………………………………………………………….…III
Introduzione………………………………………………………………………………………….4
Capitolo 1: Sistemi NoSQL…………………………………………………………………….........6
1.1Vantaggi e svantaggi…….…………………………………………………...……….......7
1.2 Confronto con i RDBMS…………………………………………………………….…..7
1.3 Base – Teorema CAP……………………………………………………………….........9
1.4 Classificazione dei database NoSQL……………………………………………….…..11
Capitolo 2 : Big Data……………………………………………………………………………….14
2.1 Caratteristiche…………………………………………………………………….….....15
2.2 Gestione dei Big Data……………………………………………………….………….16
2.2.1 Limiti dei RDBMS e nuovi approcci per l’elaborazione dei Big Data…....…….....16
Capitolo 3: HBase………………………………………………………………………………......18
3.1 Modello dei dati………………………………………………………………………...19
3.2 Architettura………………….……………………………………………………….…20
3.3 Caratteristiche…………………………………………………………………….…….20
3.4 HBASE VS RDBMS……………………………………………………………..…….21
3.5 HBASE VS HDFS………………………………………………………………..…….21
3.6 Sperimentazione………………………………………………………………………..22
Conclusione…………………………………………………………………………………….…..29
Bibliografia………………………………………………………………………………..………..30
Ringraziamenti………………………………………….……..…………………………………....31
Introduzione
La tesi ha lo scopo di analizzare il mondo dei database non relazionali, che rappresentano
un quadro completamente diverso di database, infatti riescono a garantire alte prestazioni
ed elaborazioni agili di informazioni su scala massiccia. In altre parole, se in passato non
esisteva un modo conveniente per memorizzare e analizzare moli di dati, oggi con questa
infrastruttura di database NoSQL si riesce a gestire pesanti richieste di grandi dati. Di fatto
è stata la soluzione per gestire alcuni dei più grandi data warehause come Google,
Amazon, Facebook, Twitter e tanti altri.
Nel primo capitolo verranno discusse le principali caratteristiche dei database NoSQL, i
quali saranno poi messi a confronto con i database relazionali. Verrà esposto il teorema
CAP e infine verranno introdotte le categorie di database non relazionali.
Il secondo capitolo sarà dedicato al concetto di Big Data, descrivendone le caratteristiche e
la loro gestione. Infatti l’utilizzo di questi Big Data ha permesso di ottenere la
massimizzazione e la concretezza del valore delle informazioni, portando molte aziende a
sviluppare le loro architetture di gestione dei dati in un sistema di gestione dei Big Data.
Quest’ultimo si è adeguato a tutte le tipologie di dati provenienti da varie fonti come
Hadoop, dati relazionali e NoSQL, assicurando un buon livello di sicurezza e controllo per
le informazioni sensibili o regolamentate. In azienda, con i Big Data si assiste ad un
cambiamento dei modelli di produzione delle informazioni, ciò ha contribuito a nuove
forme di conoscenza aziendale più ampia e profonda degli oggetti (clienti, prodotti,
concorrenti, canali, ect.) e degli eventi (ordini, pagamenti, traporti, etc.) di business.
4
Infine nel terzo capitolo verrà preso come caso di studio il database NoSQL HBASE. E’
un database adatto a molti casi di utilizzo, alcuni tra quali sono: la gestione dei sistemi di
messaggistica, come Facebook; l’acquisizione di dati raccolti in modo incrementale da
varie origini; l’esecuzione di query in tempo reale; e l’uso di HBase come piattaforma per
le applicazioni. Di HBase si focalizzerà l’attenzione sul modello dei dati, sull’architettura,
sulle caratteristiche e come ultimo step verrà illustrato il linguaggio di interrogazione di
questo database sia attraverso un’interazione con la shell di HBase e sia con l’interfaccia
web.
5
Capitolo 1: Sistemi NoSQL
La rapida evoluzione tecnologica, unita all’ insoddisfazione del mondo web, dovuta alla
rigidità del modello relazionale e all’ esigenza di grande scalabilità orizzontale, hanno
fatto emergere nuove esigenze applicative. Infatti negli ultimi anni sono stati progettati
nuovi sistemi, che hanno cercato di aggirare il rigido modello relazionale, aumentando il
livello delle prestazioni nella gestione e interrogazione dei dati. Questi sistemi sono stati
inglobati sotto il termine NoSQL. Cosa si intende per NoSQL?
Il termine NoSQL fu adoperato per la prima volta nel 1998 per una base di dati
relazionale open source1 che non utilizzava un'interfaccia SQL. La parola NoSQL
potrebbe far pensare che è un movimento contrario all'utilizzo di database2 relazionali, ma
in realtà il suo acronimo è Not Only SQL che sta a rivelare la presenza di diversi casi
d'uso per i quali il modello relazionale rappresenta un’ esagerazione, ma per tanti altri tale
modello è ancora un ottima soluzione. Allora sorge una domanda: perché cercare altri
DBMS se esistono quelli relazionali che svolgono bene il loro lavoro?
I database NoSQL non solo sono open source, ma sono semplici da adoperare, infatti
1Open
source: la natura open source del database NoSQL significa che è possibile occuparsi di applicazioni di grandi
dimensioni con enormi quantità di dati a un prezzo più basso.
2
Database: i database o banche dati sono archivi di dati, in cui le informazione in essi sono ben strutturate in modo da
permettere una veloce ricerca al loro interno. Essi consentono la gestione dei dati in termini di inserimento,
aggiornamento, ricerca e cancellazione delle informazioni.
6
hanno un paradigma di programmazione ad oggetti, i dati sono riutilizzabili su sistemi
diversi e memorizzati nei database NoSQL senza alcun vincolo. Inoltre i database NoSQL
sono caratterizzati da scalabilità orizzontale e offrono un meccanismo trasparente all’
utilizzatore nell’ assegnazione e nell’ esecuzione di enormi quantità di dati. Oggi, i
database NoSQL sono considerati molto affidabili, questo ha permesso di ampliare il
proprio raggio d’azione, permettendo di poter conservare dati critici, di poter gestire sia
contenuti web, e sia dati relativi alla tracciabilità delle materie prime delle industrie di
produzione.
1.1 Vantaggi e svantaggi NoSQL
Dalle caratteristiche di questi database NoSQL si possono intravedere sia vantaggi che
svantaggi. Se da un lato la scalabilità orizzontale (cioè la capacità di distribuire il carico di
lavoro su più nodi, al fine di parallelizzare le operazioni e minimizzare le elaborazioni dei
dati sul singolo nodo) offre come vantaggi un costo più basso e una maggiore tolleranza ai
guasti, dall’altro porta a uno svantaggio in fase di progettazione, perché l’applicazione
deve supportare questo modello di scalabilità.
L’assenza di schema, tipica dei database non relazionali, permette sia di velocizzare la fase
iniziale di sviluppo di un’applicazione e sia di aggiungere nuovi dati a quest’ ultima
mantenendo inalterata l’integrità dei dati. Questo ha consentito di rendere i database
NoSQL estremamente flessibili, portando anche a un miglioramento della produttività di
programmazione.
Uno dei problemi principali presenti nei database NoSQL sono sia la mancanza di
strumenti per l'analisi e il test delle prestazioni di reporting che l’assenza di
standardizzazione, quest’ultima può causare problemi durante la migrazione dei database.
1.2 Confronto con i RDBMS
Fino a pochi anni fa, quando non esisteva ancora qualcosa di più performante, produttivo,
7
scalabile e flessibile di un database relazionale, ovvero i DB NoSQL, i DBMS relazionali
giocavano il ruolo di protagonisti. Ma cosa differenzia l’uno dall’ altro?
Uno dei primi aspetti che differenzia i database relazionali3 con quelli NoSQL è che i
primi aderiscono ad uno standard de facto, in cui il risultato di richieste realizzate tramite
opportune query possono essere visualizzati in ambienti standard. Invece i database
NoSQL sono caratterizzati da una interfaccia utente per ogni implementazione, quest’
ultimo è più adattabile a livello di scalabilità orizzontale. Un RDBMS ricorre ad una
scalabilità verticale per consentire di contenere sempre più informazioni, pertanto richiede
hardware sempre più performante e costoso. Viceversa i database NoSQL permettono di
usare dispositivi molto comuni e non troppo costosi. Se da una parte nasce la necessità nei
sistemi relazionali di utilizzare dei JOIN per ricostruire le informazioni da elaborare, dall’
altra nei sistemi NoSQL si desidera avere la massima libertà per poter modificare ed
alterare sia la struttura dei dati che le relazioni che esistono tra loro, così da permettere alle
applicazioni che li dovrà elaborare di organizzarli e memorizzarli in formati meno astratti.
Un’ altra differenza sostanziale tra i database relazionali e quelli non relazionali è che, i
primi possiedono uno schema rigido, ossia bloccare l’intero database, per permettere
l’aggiunta di un nuovo campo o di una nuova relazione, fino a che la modifica non viene
completata. I database NoSQL, al contrario, sono caratterizzati dall'assenza di uno schema
rigido consentendo di aggiungere nuovi dati, e nuove relazioni senza la necessità di
modificare la struttura del database e senza bloccarne l'accesso. Nei database non
relazionali, il processo di migrazione verso un altro database risulta molto più complesso
rispetto alle soluzioni relazionali.
3
Database relazionali: permettono di articolare i dati in modo da costruire modelli di raccolta dati complessi, essi si
basano su relazioni univoche fra i dati. Tutti i dati sono memorizzati in strutture fisse, dette tabelle, dove sono posti
l’uno dopo all’altro in modo da formare singoli record. Ciascun dato presente nella tabella si trasforma in
un’informazione vera e propria solo se associato al suo corrispondente attributo, che rappresenta l’intestazione della
colonna in cui il dato è memorizzato.
8
1.3 Base – Teorema CAP
I database NoSql non si preoccupano di soddisfare le proprietà acide (ACID4), tipiche dei
RDBMS, ma si concentrano sulle proprietà base (BASE).
Le proprietà BASE sono state diffuse da Eric Browers e definiscono i requisiti che un
sistema deve soddisfare sottostando al teorema di CAP:
• (B)asically(A)vailable: garantire accessibilità alle informazioni. Infatti si preferisce
affidare i dati su più sistemi di salvataggio con un alto grado di replicazione, piuttosto che
avere complessi sistemi. Questa distribuzione però non assicura la consistenza dei dati.
• (S)oft State: cambiamento nel tempo dello stato del sistema. Dato che i dati possono
variare nel tempo anche in assenza di modifiche, questo principio lascia allo sviluppatore
la scelta di assicurare o meno la consistenza dei dati.
• (E)ventual consistency: rendere consistente il sistema nel tempo, attraverso opportuni
sistemi di recupero della consistenza.
Si può notare che i sistemi BASE si focalizzano sulla disponibilità del servizio anziché
sulla consistenza, tipica dei RDBMS. Infatti i database non relazionali cercano di fornire
una base di dati sempre disponibile ed espandibile a piacere, anche se ciò non permette di
garantire dati sempre aggiornati.
4
ACID:
(A)tomicity: la transizione è unica nell’ esecuzione, o viene eseguita completa o nulla.
(C)onsistency: l’inizio e la fine di una transizione devono portare il sistema in uno stato coerente, in modo da garantire i
vincoli di integrità dei dati.
(I)solation: ogni transizione è autonoma dalle altre e un suo fallimento non può causare danni ad altre transazioni.
(D)urability: quando una transizione richiede un commit, i cambiamenti non dovranno essere persi.
9
Esaminiamo in dettaglio invece i principi del teorema CAP, introdotto anch’esso da Eric
Browers:
• (C)onsistency: un sistema coerente permette di salvare un nuovo stato nel sistema, per
poi utilizzarlo nelle seguenti operazioni fino alla successiva modifica dello stesso.
Pertanto, tutti i client vedono sempre gli stessi dati nello stesso istante.
• (A)vailability: un sistema è detto continuamente disponibile quando è in grado di fornire
una risposta a tutte le richieste ed erogare i propri servizi.
• (P)artition Tolerance: il sistema continua ad operare anche a fronte di perdita dei
messaggi sulla rete e di una comunicazione con il server poco sicura. La negazione della
comunicazione è causata soltanto dalla mancanza totale di connettività (total network
failure).
Tutti e tre i principi, secondo Seth Gilbert e Nancy Lynch, non sono possibili in un sistema
informatico distribuito, ma solo due delle tre proprietà possono essere soddisfatte
contemporaneamente.
Le possibili combinazioni sono:
 Consistency+Availability (CA) elevata coerenza/alta disponibilità: tutti i nodi sono
in contatto tra di loro e i dati devono essere coerenti tra tutti i nodi. Finché tutti i
nodi sono attivi, gli utenti possono leggere / scrivere da qualsiasi nodo. Il sistema
si blocca se si verifica una partizione della rete.
 Availability+Partition Tolerance (AP) elevata coerenza/tolleranza alle partizioni:
in tutti i nodi del cluster i dati sono conservati in maniera coerente. Assicurando
anche tolleranza alle partizione si evita che dati possano desincronizzarsi.
 Consistency+Partition Tolerance (CP) continua disponibilità/tolleranza alle
partizioni: i nodi restano on-line, anche se la loro comunicazione risulta assente; in
tutti i nodi non c’è nessuna certezza che i dati e i valori relativi alla partizione e
alla risoluzione, restino uguali.
10
1.4 Classificazione dei database NoSQL
Nel mondo open-source sono state realizzate molti DBMS NoSQL e a seconda della
struttura dati con cui si presentano i record di dato, possono essere raggruppati in quattro
categorie fondamentali:
1. Column (come Cassandra): suddividono i dati per colonne in contrasto con i
database row-oriented, che immagazzinano i dati per righe successive. Questi
database column-oriented grazie alla memorizzazione dei valori in colonna
consentono di conseguire tempi di risposta migliori, perché vengono letti soltanto i
dati di interesse, diminuendo il numero di accessi alle memorie di massa. Si posso
anche applicare tecniche di compressione dei dati, poiché ogni colonna è costituita
da un solo tipo di dati riducendo l’occupazione di spazio.
I database che appartengono a questa categoria definiscono il concetto di columnfamily. Una column-family è un’informazione che è presente nello schema e che
raggruppa una stessa tipologia di informazioni in un insieme di colonne.
I column family si dividono in:
 Standard column family: in cui la row key (la chiave più “esterna”) individua
l'aggregato, che a sua volta è costituito da una o più famiglie di colonne dove è
possibile trovare diversi valori associati ad una diversa column key.
11
 Super colunn family: è un’estensione dello Standard Column Family, infatti
inserisce un ulteriore livello di indicizzazione (chiamato super column) fra la
row key e l’insieme delle colonne. Questa chiave viene impiegata per
raggruppare attributi correlati fra di loro, riferiti allo stesso aggregato.
2. Key-Value (come Dynamo, Riak): permettono di eseguire query solo sulle chiavi in
modo da realizzare un sistema scalabile orizzontalmente, in cui le coppie
<chiave:valore> sono assegnate tramite opportuni algoritmi. Ogni chiave è
collegata ad un blob binario “oscuro” (questo nega l’esecuzione di query basate sul
contenuto del valore), che può includere una qualunque tipologia di dato (stringa di
testo, documento, immagine, video, ecc...). L’implementazione del modello
chiave-valore consentono tipi di valore più complessi come tabelle hash o liste,
mentre altri offrono mezzi per scorrere le chiavi.
Sebbene questi database offrono ottime prestazioni per certe applicazioni,
solitamente
non
supportano
operazioni
aggregazione
12
complicate
di
interrogazione
e
3. Document Oriented (MongoDB, SimpleDB): permettono di raggruppare gruppi di
chiavi in strutture chiamate appunto documenti. Questa tipologia di database
consente di compiere delle ricerche, sia sulle chiavi che sui valori, poiché i valori
sono costituiti da strutture in formati come xml o json che sono pesanti. A
differenza dei database basati su chiave-valore, questi sistemi forniscono
interrogazioni e memorizzazione di grandi quantità di informazione
4. Graph Oriented (come Neo4J, AllegroGraph, Pregel): memorizzano le
informazioni attraverso strutture a grafi, dove su di esse si effettuano ricerche per
accedere ad archi e nodi (i nodi del grafo sono dati che possiedono coppie
key/value, gli archi sono le relazioni). Questo tipo di database può essere
considerato come un caso particolare di un database orientato ai documenti, questi
ultimi rappresentano non solo i nodi, ma anche gli archi. La potenza di questo
database è di gestire il passaggio da un nodo all’altro sfruttando le relazioni tra
nodi.
13
Capitolo 2: Big Data
L’imponente crescita dei dati, creata da persone (tramite smartphone, card magnetiche o
con sensori, ect.), da cose (auto, beni in movimento, etc.) e da eventi (meteo, atterraggio
degli aerei, pagamento finanziario, malfunzionamento di un distributore, etc.), unita allo
sviluppo del web, hanno portato ad introdurre un nuovo concetto noto come i BigData.
Questo fenomeno ha manifestato un bisogno non solo di tecnologie di raccolta ed
elaborazione di questi dati, ma anche una maggiore capacità analitica e interpretativa. In
primis si è cercato di utilizzare tecnologie e metodologie esistenti (database relazionali,
architetture master/slave, etc.), parallelamente si è svolta un’attività di ricerca al fine di
proporre soluzioni alternative, come i database non relazionali.
Ma cosa si intende per Big Data e perché sono diventati così importanti?
Il termine Big Data è usato per descrivere un volume enorme di dati strutturati e non
strutturati, che è difficile da trattare con tecniche di database e software tradizionali,
poiché non riescono a gestire quantità di dati sempre crescenti. Inoltre i Big Data
permettono di ottenere grandi benefici sia in ambito economico, garantendo maggiore
accuratezza delle analisi del comportamento del mercato e delle informazioni sui clienti,
sia finanziario, migliorando la gestione dei rischi e delle frodi assicurative o finanziarie, e
sia in ambito scientifico.
14
2.1 Caratteristiche
Secondo l’analista Doug Laney, i Big Data hanno tre caratteristiche peculiari:
 Volume: rappresenta la dimensione del dataset. Grazie al valore di questo parametro
è possibile capire se un gruppo di dati è da considerarsi Big Data o meno.
Tipicamente le dimensioni sono nell’ ordine dei Petabytes fino all'ordine degli
Zettabytes.
 Velocità: si riferisce alla necessità di comprimere i tempi di gestione e di analisi dei
dati, quest’ ultimi saranno processati a ritmi sostenuti o in tempo reale.
 Varietà: intesa come molteplicità di fonti o come eterogeneità dei formati dei dati.
Infatti i dati possono essere generati da diverse fonti interne o esterne e possono
avere diversi formati (database, testo, immagini, video, audio, ect.) riconducibili a
tre categorie: dati strutturati1, semi-strutturati2 e non strutturati3.
Questo è stato definito come modello delle "3V". Col passare del tempo si è assistito ad un
aumento del Volume dei dati, della Velocità e della loro Varietà portando ad una
necessità di estendere tale modello con un'ulteriore "V":
1
Dati strutturati: sono quei dati che rispettano regole predefinite quali; tipo di contenuto, lunghezza, formato, etc.
Questa tipologia di dati è tipica dei DB relazionali.
2
Dati non strutturati: non seguono gli schemi di un tradizionale database e per questo motivo sono di più difficile
interpretazione e richiedono quindi sforzi maggiori per il loro trattamento.
3
Dati semi-strutturati non sono conformi al modello dati di un tipico database ma possono essere divisi in records più o
meno strutturati utilizzando dei separatori come i tag semantici.
15
 Veridicità: indica l’utilità di un dato, intesa come il valore informativo che risulta
rilevante ai fini dell’analisi decisionale.
Successivamente il modello è stato esteso aggiungendo altre caratteristiche:
 Variabilità: riguarda alla contestualizzazione di un dato. Ogni dato può avere un
significato diverso a seconda del contesto in cui esso viene analizzato.
 Complessità: più è grande la complessità e tanto più grande sarà lo sforzo per
estrarre informazioni utili dai dati.
2.2 Gestione dei Big Data
La gestione dei Big Data nella maggior parte degli scenari non si basa sulle “tradizionali”
logiche di RDBMS e di SQL, ma su nuove tecniche che cercano di soddisfare
efficacemente le esigenze in termini di volumi, velocità e varietà a seconda dei tipi di dati
trattati.
2.2.1 Limiti dei RDBMS e nuovi approcci per l’elaborazione dei Big Data
Dal momento che la dimensione dei dati richiesti da trattare è aumentata enormemente, un
RDBMS (Relational Database Management System) non è più considerato come la
soluzione appropriata per ogni esigenza del database. Infatti un database relazionale
RDBMS non è all'altezza delle esigenze dei Big Data, in quanto un primo limite dei
RDBMS è dato dalla difficoltà di gestire questi grandi volumi di dati. Per far fronte a
questo, i database relazionali hanno cercato di aggiungere più unità centrali di
elaborazione (o CPU) o più memoria al sistema per poter scalare verticalmente.
Un altro limite per i database relazionali è causato dall’ assenza di uno schema flessibile,
che ha negato la possibilità di categorizzare i dati non strutturati, i quali sono
maggiormente richiesti dai Big Data. Inoltre, essendo la velocità di crescita dei dati molto
elevata nei Big Data, un RDBMS non riesce a fronteggiare questi scenari di crescita
rapida, dato che è stato progettato per la gestione costante dei dati.
16
Quindi l’utilizzo dei database relazionali per la gestione e la memorizzazione dei Big Data
risulta da un lato troppo costoso e dall'altro addirittura inefficiente.
Per poter processare efficientemente grandi moli di dati in tempi tollerabili, sono state
utilizzate tre tecnologie più performanti: database NoSQL, database distribuiti (come
Hadoop, Hive) e sistemi MPP (Massive Parallel Processing). Le prime due permettono
l’uso di hardware a basso costo, una gestione dei fallimenti e l’ottimizzazione delle
performance via software. I sistemi MMP sono costituiti da un sistema di I/O per ogni
processore, e da operazioni suddivise in task paralleli e indipendenti.
17
Capitolo 3: HBase
Una categoria di database NoSQL, utile per la gestione di un volume e una varietà di dati, è
quella dei database colonnari (le cui caratteristiche sono già state descritte nel paragrafo
1.4). Uno dei database colonnari più diffusi è HBase. HBase è una base dati open source,
scalabile e distribuita, caratterizzata da una gestione strutturata di dati sotto forma di tabelle
di grandi dimensioni, in modo da garantire coerenza dei dati e tolleranza alle partizioni. Il
suo sviluppo si basa sul modello di Google BigTable, infatti sfrutta la memorizzazione di
dati distribuiti fornita da Google File System. HBase nasce come parte del progetto Hadoop
dell'Apache Software Foundation ed eseguito su HDFS (Hadoop Distributed File System),
esso può essere usato da MapReduce1 sia come sorgente e sia come destinazione per i suoi
calcoli. Nel corso degli anni, HBase è diventato una scelta di database sempre più popolare
per le applicazioni che necessitano di veloce accesso casuali a grandi quantità di dati.
1
MapReduce: è un sistema di elaborazione parallela dei dati.
18
3.1 Modello dei dati
Un sistema HBase comprende una serie di tabelle. Ogni tabella è formata da righe, che
sono identificate dalla Row Key e contengono un numero arbitrario di colonne. Ogni
colonna rappresenta un attributo di un oggetto, molti di questi attributi vengono
raggruppati in famiglie di colonna, in modo tale che gli elementi di una famiglia vengono
tutti memorizzati insieme. Quindi ogni famiglia è costituita da un numero qualsiasi di
colonne e ogni colonna è costituita da un numero qualsiasi di versioni. Il nome di una
colonna è dato da un prefisso della famiglia (parte fissa) e da un qualificatore (parte
variabile). HBase permette di aggiungere a runtime nuove colonne alle famiglie, in modo
da adattarsi alle esigenze applicative.
Per poter recuperare un singolo valore da una tabella HBase, bisogna specificare: una
RowKey, una ColumnFamily e un timestamp (versione del valore).
PICTURE TABLE
19
3.2 Architettura
Hbase ha un'architettura di tipo master-slave. Un cluster HBase ha un nodo master, detto
HMaster ha il compito di inizializzare il cluster e di assegnare region ai regionserver
registrati nel cluster; e uno o più slave, detti HRegionServer il loro compito è di gestire le
region e coordinare l'accesso ai dati. Tutte le modifiche per tutte le Regioni, portate da un
particolare regionserver sono inserite prima in HLog. C’è un HLog per regionserver. Nelle
Regioni vengono memorizzate un insieme di righe di una tabella, e quando una tabella
diventa troppo grande per essere contenuta in un server, essa può essere partizionata
orizzontalmente in più Regioni. All’ interno di ciascuna Region è presente uno Store per
ciascuna column family associata alla tabella. All’ interno di uno store sono presenti: un
MemStore, che si occupa di conservare in RAM le modifiche (che verranno
successivamente salvate sul disco) e da zero a più StoreFile che rappresentano dei file su
HDFS (ogni file è composto da uno a più blocchi).
Poiché più HMaster possono essere presenti contemporaneamente, HBase ha bisogno di
un coordinatore esterno (Zookeeperun), per garantire che un solo master sia in esecuzione.
3.3 Caratteristiche
HBase offre i seguenti benefici:
20
 modello dei dati flessibile;
 semplici API Java per la realizzazione e la collaborazione con altri sistemi;
 possibilità di avere un accesso continuo ai dati, grazie all’ esistenza di più nodi
master (fault tolerant);
 ricerche effettuate quasi in tempo reale (per esempio, la messaggistica);
 load balancing delle tabelle;
 replicazione dei dati;
 letture e scritture casuali;
3.4 HBASE VS RDBMS
La differenza principale tra un database colonna-oriented rispetto a un database filaoriented è su come i dati vengono memorizzati sul disco. La massima dimensione dei dati
gestita dai database relazionali è sui Terabytes, invece in HBase è di circa centinai di
Petabytes.
HBase non supporta un linguaggio di interrogazione strutturato come SQL (tipico dei
database relazionali), infatti le applicazioni HBase sono scritte in Java.
3.5 HBASE VS HDFS
HDFS è un file system distribuito che è adatto per la memorizzazione di file di grandi
dimensioni. HBase è costruito sulla base di HDFS, ma mettendoli a confronto presentano
alcune differenze: HDFS è più adatto per le operazioni di elaborazioni batch di alta
latenza, ciò nega la possibilità di letture e scritture casuali, al contrario HBase è progettato
per le operazioni di bassa latenza; l’accesso ai dati è consentito attraverso MapReduce (nel
HDFS), invece HBase prevede comandi di shell, API Java e Thrift.
21
3.6 Sperimentazione
Nei precedenti paragrafi è stata fornita una panoramica sul database HBase, in particolare
è stato illustrato il suo modello dei dati utile per poter comprendere l’esecuzione dei test
effettuati tramite la shell di HBase.
Per poter effettuare i test sul nostro database è necessario, dapprima configurare
opportunamente il sistema, e solo dopo è possibile avviare la shell HBase mediante il
seguente comando:
. /hbase shell
Di seguito sul terminale, se tutto è andato a buon fine, apparirà il prompt di shell HBase.
Per questa sperimentazione si presuppone di popolare il database con il dataset di
DBpidia2, e si è previsto di realizzare una tabella (chiamata PICTURE) per memorizzare i
quadri di differenti pittori. La creazione di questa tabella è ottenuta mediante la seguente
sintassi:
create ‘<table name>’ , ‘<column family>’.
In questo caso “Author” e “Opera” sono due column family.
Con il comando list è possibile elencare le tabelle HBase create:
2
DBpedia: è uno dei più importanti progetti legati al Web semantico, il progetto consiste nella trasposizione in dati
strutturati di tutto l’enorme patrimonio di conoscenze di Wikipedia, e nel rilascio di queste informazioni sul Web come
Linked Open in formato RDF (Resource Description Framework).
22
list ‘<table name>’.
La shell HBase permette di inserire un valore all’ interno di una tabella mediante il
comando put:
put ‘<table name>’,’<row>’, ‘<column family prefix: column qualifier suffix>’,
‘<value>’.
Si può osservare che ciascuna riga della tabella PICTURE è identificata da una row key, la
quale contiene le informazioni passate al database ed è costituita in questo caso da un
URL. Come qualificatore della column family si è scelto di dare informazioni sul “nome”,
“cognome”, “nazionalità” e “stile artistico” dell’autore, mentre invece per l’opera si è
deciso di specificare “nome”, “data”, “tecnica” e “ubicazione”. Il comando put ci permette
anche di aggiornare un valore già esistente, per farlo basta seguire la stessa sintassi e
indicare il nuovo valore:
Il conteggio del numero di righe di una tabella è effettuato tramite il comando count:
23
count ‘<table name>’.
Mediante il comando get è possibile prelevare i contenuti relativi ad una riga:
get ‘<table name>’, ‘<row>’.
Oppure specificando sia la column family che il qualificatore si può ottenere il seguente
risultato:
get ‘<table name>’, ‘<row>’, ‘<column family>’.
get ‘<table name>’, ‘<row>’, ‘<column family: column qualifier>’.
Per poter visualizzare i dati della tabella creata, basta digitare il comando scan seguito dal
nome della tabella:
24
scan ‘<table name>’.
Con il comando scan si possono estrarre valori da una determinata column family
specificando anche un qualificatore della column family. La sintassi è la seguente:
scan ‘<table name>’, {COLUMNS => ‘column family: column qualifier’}.
Utilizzando il comando deleteall è possibile eliminare una specifica riga dalla tabella. La
regola per la costruzione corretta di questo comando è la seguente:
25
deleteall ‘<table name>’, ‘<row>’.
Con delete si può rimuovere anche un determinato qualificatore della column family,
specificando nella sitassi sempre la riga:
delete ‘<table name>’, ‘<row>’,’< column family: column qualifier>’.
Una tabella per essere eliminata, bisogna prima disabilitarla tramite il comando disable e
solo dopo digitando drop, la tabella verrà definitivamente rimossa.
26
HBase permette anche di poter interagire attraverso l’interfaccia web, digitando il
seguente URL nel browser:
http: //localhost:60010
27
Attraverso questa interfaccia si possono visualizzare: i Region Server in esecuzione, i
master di backup, le tabelle HBase, lo stato del cluster, le statistiche, ect.
28
Ringraziamenti
Desidero innanzitutto ringraziare il Prof. Moscato per i preziosi insegnamenti impartiti
durante lo svolgimento delle sue lezioni e per l’attenzione dedicata al mio elaborato.
Inoltre, ringrazio tutti i docenti incontrati durante il mio percorso accademico, da ognuno
di essi ho avuto modo di imparare qualcosa, non solo a livello didattico ma anche a livello
umano.
Un pensiero va ai miei genitori per l’apporto morale e economico ai miei studi, oltre che
per il grande aiuto che mi hanno sempre dato.
Desidero ringraziare le mie sorelle per avermi aiutato in ogni momento e per non aver mai
smesso di motivarmi e di supportarmi.
Vorrei ringraziare anche Zia Elena, Zio Antonio, che nonostante la distanza hanno sempre
avuto un pensiero per me.
Un grazie va a Maria, una splendida persona conosciuta all’università che è diventata la
mia migliore amica.
Ringrazio Carmela e Roberta per i bei momenti passati insieme in questi anni di
università.
Inoltre, esprimo tutta la mia gratitudine ai colleghi d’università in modo particolare a
Federico, che hanno condiviso con me questo percorso.
Infine voglio ringraziare una persona molto importante nella mia vita, per la sua enorme
pazienza, per essermi stato sempre vicino, per avermi sempre sostenuta e per aver creduto
in me più di chiunque altro. Grazie Carmelo.
.
29
Conclusioni
Il lavoro di tesi ha fornito la possibilità di valutare la validità dei database NoSQL, i quali
negli ultimi anni hanno attirato un gran numero di imprese e aziende, poiché sono in grado
di garantire una velocità di esecuzione nell’ elaborazione di enormi quantità di dati, una
scalabilità orizzontale con l’aggiunta di nuovi server, e anche la possibilità di gestire
migliaia di dati non strutturati senza dipendere da uno schema fisso.
La crescita esponenziale del volume di dati generati da utenti, sistemi e sensori,
ulteriormente accelerato dalla concentrazione di gran parte di questo volume su sistemi
distribuiti, ha ricoperto una grande importanza nel mondo dei Big Data. Infatti questi ultimi
hanno assunto una grande rilevanza nella vita di tutti i giorni, permettendo di gestire ingenti
quantità di dati in maniera più efficiente e di soddisfare esigenze che prima non potevano
trovare un riscontro. Per poter memorizzare e analizzare questi moli di dati, che da sempre
ha costituito una problematica non superabile con i database tradizionali, sono state
introdotte diverse categorie di database non relazionali. Una delle categorie presa in
considerazione in questo elaborato è quella dei database colonnari, in particolare il database
HBase, che offre una serie di vantaggi: permette di archiviare una grande quantità di dati
offrendo un’architettura orientata alla scalabilità, consente l’integrazione con MapReduce e
HDFS, supporta anche semplici API REST per accedere alle risorse e permette di operare in
memoria. Con l’utilizzo della shell di HBase si è potuto dimostrare che essa è stabile,
veloce e di semplice utilizzo. In definitiva il mondo è in continuo evoluzione e sicuramente
nei prossimi anni alcuni di questi database spariranno, mentre altri prenderanno il loro
posto, traendo vantaggi dai vari database.
30
Bibliografia
[1] https://hbase.apache.org
[2] https://otherplus.com/tech/database-nosql/
[3] http://www.megadix.it/files/www.megadix.it/defranciscis_NoSQL.pdf
[4] http://www.ecos2k.it/allegati/BigData.pdf
[5] http://www.cloudera.com/content/cloudera/en/products-and-services/cdh/hbase.html
[6] http://www-01.ibm.com/software/data/infosphere/hadoop/data-scientist.html
[7] http://akbarahmed.com/category/hbase/
[8] Perego A, Pasini P, Big Data Live: casi di eccellenza, SDA Bocconi 2013
[9] Perego A, Pasini P, Nuove fonti di conoscenza Aziendale e nuovi modelli di
management, SDA Bocconi, Dicembre 2012
[10] http://www.tutorialspoint.com/hbase/hbase_installation.htm
[11] http://it.wikipedia.org/wiki/Big_data
31