Presentazione
Chi sono
● Antonio Davide Calì
● Dottor in Ingegneria Informatica presso
Università degli studi di Padova
● Studente magistrale in Ingegneria Informatica
presso Università degli studi di Bologna
● Sito Web: http://www.antoniocali.com/
Cosa verrà trattato
● Presentazione ad Hadoop
● Esempio applicativo con uso di HortonNetworks
Apache Hadoop
Cosa è Apache Hadoop?
● È un sistema distribuito di interrogazione dati,
scalabile e tollerante ai guasti
● Un Framework Open Source sotto licenza Apache
● Formato da diversi componenti:
– Algoritmo MapReduce
– File system distribuito HDFS
– ...
Un po' di storia
● 2004: i programmatori Doug Cutting e Michael J. Cafarella
lavorano ad una versione iniziale di Hadoop
● 2005: Dean e Ghemawat introducono per la prima volta il
paradigma MapReduce per il calcolo parallelo di Big Data
● 2008: Dal paradigma MapReduce e dalla creazione del file
system HDFS esce la prima release Open Source di
Hadoop.
Vantaggi: Agilità e flessibilità
RDBMS: Schema on Write
● Lo schema dei dati deve
essere creato prima che i
dati stessi vengano caricati
● Ogni dato da caricare deve
essere trasformato nella
struttura interna del database
● Nuove colonne devono
essere aggiunte
esplicitamente prima che i
nuovi dati per tali colonne
siano caricate nel database
Hadoop: Schema on Read
● I dati sono semplicemente
copiati nel file system,
nessuna trasformazione è
richiesta
● I dati delle colonne sono
estratte durante la fase di
lettura
● I nuovi dati possono essere
aggiunti ed estratti in qualsiasi
momento
Ecosistema Hadoop
HDFS
● Hadoop Distributed File System (HDFS) è un File System
distribuito
● Alta tolleranza ai guasti
● Scalabilità: è in grado di gestire una moltitudine di file di grandi
dimesionio (gigabyte, terabyte)
● Non è conforme allo standard POSIX in quanto non permette la
modifica dei file
● I file sono rappresentati attraverso una struttura gerarchica che
utilizza l'architettura master/slave: NameNode e DataNode
● Un cluster in HDFS possiede un solo master (NameNode) che
gestisce il namespace del file system e regola gli accessi del
clients
HDFS (Cont)
● Un cluster possiede diversi slave (DataNode), solitamente uno per
ogni nodo del cluster, che gestisce lo storage del nodo che possiede.
● Internamente i file sono suddivisi in blocchi: ogni blocco viene
replicato in maniera indipendente su diversi DataNode.
● Il NameNode gestisce le operazioni del namespace, cioè apertura,
chiusura, copia dei file e delle directory.
● Il NameNode gestisce anche la mappatura dei blocchi del file sui
diversi DataNode
● I DataNode sono responsabili della scrittura e lettura sotto richiesta
dei Client
● I DataNode sono anche responsabili della creazione, distruzione e
replica dei blocchi sotto richiesta del NameNode
HDFS (Architettura)
HDFS
● Il contenuto del file viene diviso in blocchi (solitamente di
128MB)
● Ogni blocco viene replicato indipendentemente su diversi
DataNode
● Il NameNode monitora il numero di repliche dei blocchi
● Se la replica di un blocco viene persa a causa di un guasto del
DataNode o guasto al disco?
– Il NameNode crea una nuova replica del blocco perso.
● Il NameNode gestisce l'albero del namespace e la mappatura
dei blocchi sui DataNode
● Il NameNode mantiene l'intera immagine del namespace in
Ram
HDFS: NameNode e DataNode
● Sia il NameNode che i DataNode sono moduli software
sviluppati in Java
– ogni macchina che supporta Java supporta NameNode
e DataNode
● Una tipica distribuzione prevede una macchina dedicata
ad un singolo NameNode.
● Ogni altra macchina dello stesso cluster esegue DateNode
● L'esistenza di un singolo NameNode per cluster semplifica
notevolmente l'architettura.
– Il NameNode fa da arbitro e deposito di tutti i metadata
del file system.
● Il sistema è così costruito per non far fluire i dati utente
attraverso il NameNode.
HDFS: NameNode
● Il NameNode mantiene il namespace del File System
● Ogni modifica al namespace o alle sue proprietà viene
registrata sul NameNode
● Un'applicazione può specificare il numero di repliche
che HDFS deve gestire
● Il numero di repliche di un file è chiamato il fattore
della replica del file
● L'informazione sul fattore della replica è mantenuto sul
NameNode
HDFS: Data Replication
● HDFS è disegnato all'affidabilità di storage di una moltitudine di file di
grandi dimensioni.
● Memorizza i file come sequenze di blocchi.
● Tutti i blocchi, eccetto per l'ultimo, hanno la stessa dimensione
● I blocchi sono replicati per garantire la tolleranza ai guasti
● La grandezza dei blocchi e il fattore di replica sono parametri
configurabili di ciascun file
● Un'applicazione può specificare il numero di repliche per ogni file
● Il fattore di replica può essere specificato all'atto di creazione del file
e modificato successivamente
● I file sono write-once, ovvero non possono essere modificati
HDFS: Data Replication
● Il NameNode prende tutte le decisioni riguardo le repliche
dei blocchi.
● Periodicamente riceve un HeartBeat e un BlockReport da
ogni DataNode all'interno del cluster
● Ricevere un HeartBeat da un DataNode implica il corretto
funzionamento del DataNode
● Il BlockReport invece contiene la lista dei blocchi che il
DataNode possiede
HDFS: Data Replication
HDFS: Data Replication
● Le repliche sono importanti per affidabilità e performance.
● L'ottimizzazione del posizionamento delle repliche avviene
grazie al tuning
● Le repliche sono rack-aware, ovvero conscie del rack a cui
appartengono
– Serve a migliorare l'affidabilità dei dati, l'uso della
banda di rete e la disponibilità
● L'architettura generale di un grande HDFS prevede un
cluster di computer composti da più racks.
– La banda di rete fra due nodi nello stesso rack è
superiore a quella fra due nodi appartenente a rack
diversi
HDFS: Data Replication
● Il NameNode determina il rack ID a cui ogni DataNode
appartiene.
● Una strategia semplice ma non ottima prevede di memorizzare
tutte le repliche in un solo rack:
– questa politica permette di prevenire la perdita di dati
quando un intero rack si guasta
– permette l'utilizzo di banda da diversi rack in lettura dati
● Questa politica distribuisce uniformemente le repliche nel
cluster
– ciò permette di bilanciare il carico in caso di errore di
componenti.
● Purtroppo questa politica aumenta il costo di scrittura poiché
una scrittura deve trasferire blocchi a più rack.
Data Replication (Esempio)
● Tipico esempio di fattore di replica è tre.
● La prima replica viene memorizzata in un nodo del rack locale
● La seconda e la terza replica memorizzate in un rack remoto
● Questa politica taglia il traffico di scrittura inter-rack il che
generalmente migliora le performance
● Le probabilità di guasto di un intero rack sono molto minori che
di un singolo nodo
● Migliora l'utilizzo di banda in lettura poiché si devono leggere
solo due rack e non tre.
● Questa politica migliora le performance di scrittura e lettura
senza intaccare l'affidabilità dei dati.
HDFS: Replica Selection
● Una volta memorizzate le repliche su diversi
nodi e/o rack, al momento di lettura bisogna
scegliere quale replica leggere.
● HDFS per migliorare le performance di lettura
cerca la replica che risiede più vicina al client
lettore.
● Se esiste una replica sullo stesso rack del nodo
lettore allora viene utilizzata quest'ultima
HDFS: SafeMode
● Quando si avvia un NameNode esso viene caricato in una
modalità chiamata SafeMode
● In questo stato il NameNode riceve segnali di HeartBeat e
BlockReport dai vari DataNode
● I BlockReport contengono la lista di blocchi replicati che il
DataNode possiede.
● Un blocco viene considerato safely replicated quando il
numero minimo di repliche del blocco viene raggiunto
– Bisogna comunicare al NameNode questo status
HDFS: SafeMode
● Al raggiungimento di una percentuale di blocchi safely
replicated, il NameNode esce dallo stato SafeMode
● Al termine del SafeMode il NameNode è conscio dei
blocchi non safely replicated
– Vengono create dunque delle repliche da memorizzare
in DataNode per renderli safely
Persistenza: Metadati
● HDFS deve garantire la persistenza dei propri metadati
(ad esempio il fattore di replica, la creazione di un nuovo
file)
● La persistenza del namespace dell'HDFS è demandata al
NameNode.
– Il NameNode fa uso di un log chiamato EditLog sul
quale registra ogni cambiamento.
● L'intero namespace del File System, inclusa la mappatura
dei blocchi dei file, viene memorizzato in un file chiamato
FsImage.
● FsImage viene salvato nel File System locale del
NameNode
Persistenza: Metadati
● Il NameNode utilizza un metodo simile a qualsiasi DBMS
per mantenere la persistenza, ovvero fa uso del record
Checkpoint.
● All'avvio del NameNode, esso carica da disco EditLog e
FsImage.
– Attraverso l'EditLog aggiorna l'immagine del FileSystem
che aveva salvato su FsImage
– Viene aggiornato l'FsImage riscrivendolo sul disco
stesso.
● Il NameNode mantiene in memoria l'intero namespace e il
mapping dei blocchi
– Utilizza la tecnica del checkpoint per avere la certezza
di avere dati corretti
Persistenza: Dati
● La persistenza dei dati è demandata ai singoli DataNode.
● Ogni DataNode non è conscio dell'esistenza dell'HDFS e
dei suoi metadati
● Ogni DataNode mantiene i propri dati (blocchi) nel proprio
file system locale.
● Ogni blocco di dati viene memorizzato in un file differente
● I blocchi non vengono memorizzati in una unica directory
ma si usa una funzione euristica per ottimizzare il numero
di file per directory
– Si creano subdirectory se necessario.
● All'avvio, il DataNode legge l'intero file system locale per
creare il proprio BlockReport
HDFS: Robustezza
● Uno degli obiettivi di HDFS è garantire
robustezza ai guasti e l'affidabilità ai dati.
● I tre tipi di guasti più comuni sono:
– Al NameNode
– Al DataNode
– A partizioni della rete
Robustezza: Heartbeat
● Periodicamente i DataNode mandano segnali di HeartBeat
al NameNode per assicurare il proprio funzionamento
● Il NameNode si accorge di una perdita di connessione tra
esso e una partizione della rete grazie alla non ricezione di
segnali di HeartBeat
● Il NameNode segna questi DataNode come “morti” e non
vi manda più alcuna richiesta I/O
● Ogni dato che era presente in un DataNode morto, viene
reso non più disponibile a HDFS.
● La presenza di DataNode morti potrebbe non soddisfare
più il requisito minimo del fattore di replica
Robustezza: Heartbeat (Cont)
● Il NameNode riesce a tenere traccia di quali file non
soddisfano più il fattore di replica per richiederne
nuove repliche.
● Tra le cause possibile di non soddisfacibilità del fattore
di replica e per la richiesta di una nuova replica
abbiamo
– DataNode non più disponibile
– Replica corrotta
– Guasto all'harddisk del DataNode
– Il fattore di replica del file viene incrementato
Robustezza: riorganizzazione Cluster
● L'architettura HDFS è compatibile con la ridistribuzione dei
dati nei cluster.
● L'architettura può decidere autonomamente di spostare
dati da un DataNode ad un altro
– Questo avviene se la percentuale di riempimento di un
DataNode risulta troppo elevata o troppo bassa
● In presenza di una alta richiesta di un file, l'architettura può
decidere di aumentare il fattore di replica per quel file
– Questo meccanismo ne incrementa la robustezza
Robustezza: Integrità dei dati
● È possibile che un certo blocco di un file possa arrivare al
DataNode corrotto. Le cause
– un guasto sulla struttura di archiviazione
– un errore sulla rete o a causa di un software corrotto.
● Il client HDFS implementa un protocollo di checksum sui
contenuti dei file
● Quando un client crea un file HDFS, esso ne calcola il
checksum per ogni blocco
– Il checksum viene archiviato in un file nascosto
all'interno del namespace di HDFS
Robustezza: Integrità dei dati (Cont)
● Quando un client riceve un dato da un DataNode, ne
calcola il checksum
– Viene confrontato il checksum così calcolato con il
checksum associato al file
● Se soddisfa l'uguaglianza il dato è considerato integro
● In caso non soddisfi il confronto, il client può richiedere il
dato ad un altro DataNode
Robustezza: Integrità HDFS
● FsImage e EditLog sono file di estrema importanza per
HDFS, per questo bisogna proteggerli da eventuali guasti
● Il NameNode si fa carico di mantenere diverse copie dello
stesso FsImage e di EditLog
● Ogni aggiornamento su FsImage e EditLog deve essere
propagato in maniera sincrona ad ogni copia
● Un numero elevato di copie di FsImage e EditLog può
degradare le prestazioni a causa dei continui
aggiornamenti su diverse copie
● Quando un NameNode si riavvia, utilizza l'ultima copia
aggiornata di FsImage e EditLog
HDFS: Organizzazione dei dati
● HDFS è stato costruito per supportare file di ampie
dimensioni.
● Le applicazioni che fanno uso di HDFS sono strutturate
per scrivere una sola volta i dati, ma leggerli una o più
volte con velocità di streaming
● HDFS supporta la semantica write-once-read-many sui
file.
● La grandezza tipica di un blocco è di 64MB.
● Per cui un file viene diviso in diversi chunks di 64MB.
● Ogni chunk risiede, solitamente, su un DataNode diverso
HDFS: Funzionamento
● Quando un client richiede la creazione di un file, la
richiesta non viene spedita direttamente al NameNode.
● Il client invece si fa carico di memorizzare localmente i
dati, fino al raggiungimento dell'occupazione minima di un
blocco.
● Una volta raggiunto la grandezza minima di un blocco, il
client manda la richiesta al NameNode
– il NameNode inserisce il nome del file nel namespace e
alloca lo spazio necessario al blocco.
– il NameNode si fa carico di scegliere il DataNode su cui
allocare il blocco, restituendo al client l'ID del DataNode
scelto
HDFS: Funzionamento (Cont.)
● Il client trasferisce il blocco dalla propria memoria al
DataNode selezionato, cancellando la copia locale.
● Quando il file viene chiuso, i dati rimasti localmente sul
client vengono trasferiti al DataNode e viene comunicata la
chiusura del file al NameNode
● A questo punto il NameNode esegue il commit
dell'operazione di scrittura conclusa in maniera
persistente.
● Se il NameNode muore prima della chiusura del file, il file
viene perso.
● Il client utilizza questo protocollo di mantenimento su file
locale per non causare congestione sulla rete.
HDFS: Replication Pipelining
● Quando un client vuole scrivere un file su HDFS, come
descritto precedentemente, aspetta di raggiungere la
dimensione di un blocco.
– Una volta raggiunta, trasferisce i dati al DataNode
indicato dal NameNode
● Poichè ogni file ha un fattore di replica, il NameNode
indica una lista di DataNode sul quale il blocco verrà
replicato
● Il primo DataNode memorizza localmente i dati che sta
ricevendo (solitamente in porzioni di 4Kb)
– Intanto trasferisce le porzioni ricevute al DataNode
successivo della lista che conterrà la prima replica
HDFS: Replication Pipeling (Cont)
● Il processo continua fino al raggiungimento dell'ultimo
DataNode che deve contere le repliche.
● Questo permette il pipelining delle repliche.
HDFS: Accessibilità
● Si può accedere a HDFS in diversi modi
– HDFS prevede API Java per l'accesso delle
applicazioni
– Esiste un wrapper scritto in C per le API Java messe a
disposizione
– È possibile l'accesso anche attraverso browser HTTP
per la visualizzazione dei file
HDFS: Eliminare File
● Quando un file viene eliminato dall'utente o da una
applicazione, non viene rimosso immediatamente.
● Il file selezionato viene rinominato e spostato nella
directory /trash: fintanto che è presente in questa directory
può essere immediatamente ripristinato
● I file rimangono nella directory /trash per un tempo
configurabile
– una volta trascorso questo tempo, il NameNode elimina
il file dal namespace di HDFS.
● L'eliminazione di un file implica la liberazione del blocco
allocato associato.
HDFS: Ripristinare un file
● Fintanto che il file rimane nella directory /trash, esso può
essere ripristinato
● Nella directory /trash è presente solo l'ultima copia
aggiornata del file.
● La directory /trash è simile a qualsiasi directory, con una
peculiarità
– HDFS applica determinate politiche di eliminazione
automatica dei file presenti
● Di default il tempo di vita di un file nella directory /trash è di
sei ore.
HDFS: Diminuire fattore di replica
● Quando il fattore di replica di un file viene diminuito, il
NameNode decide le repliche che devono essere
eliminate
● Il successivo segnale di Heartbeat trasferisce questa
informazione al DataNode.
● I DataNode dunque rimuove il corrispondente blocco e uno
spazio equivalente viene aggiunto al cluster.
● Vi può essere un ritardo tra la richiesta di eliminazione e
l'effettivo spazio liberato sul cluster
MapReduce
● MapReduce è un modello di programmazione, che
implementato, permette di realizzare sistemi di
computazione parallela e distribuita
● MapReduce viene utilizzato per la computazione di larga
scala su un quantitativo enorme di dati.
● Estremamente scalabile, deve lavorare su Gigabyte o
Petabyte di dati
● Challenges:
– Come distribuire la computazione
– Come risolvere i guasti alle macchine
MapReduce (Cont.)
● Si basa sul concetto di functional programming, in cui non
vi è più la condivisione di dati, ma questi vengono passati
alle funzioni come parametri o valori di ritorno
● Lavora secondo il paradigma divide-et-impera
suddividendo le operazioni di calcolo in diversi processi
autonomi.
– Quando tutte le sottoparti del problema sono state
processate, esse vengono “ridotte” (ovvero ricomposte)
a un unico risultato finale
● Idee chiavi:
– Portare la computazione vicino ai dati
– Immagazzinare i file più volte per l'affidabilità (HDFS)
MapReduce in breve
● Un processo MapReduce può essere diviso
– I dati in Input, su HDFS
– Una funzione map, che trasforma i dati di input in una
serie di coppie chiave/valore intermedie
– Una funzione reduce, che “unifica” i valori delle chiavi
intermedie creando una nuova serie di coppie
chiave/valore
– Output scritto su HDFS
MapReduce in breve (Cont.)
MapReduce (Cont)
● Il sistema in run-time si occupa di gestire
– Il partizionamento dei dati di input
– La schedulazione del programma sulle diverse
macchine
– La gestione dei guasti e fallimenti delle macchine
– La gestione della comunicazione fra le varie macchine
MapReduce: algoritmo
Cosa avviene quando MapReduce è in esecuzione
1)La libreria MapReduce divide il file di input in M
sottoinsiemi. Crea una copia del programma su ogni
cluster di macchine.
2)Una copia del programma è speciale – il master. Le
restanti copie sono workers a cui viene assegnato dal
master un determinato lavoro.
● Ci sono M lavori di map e R lavori di reduce da dover
assegnare.
● Il master dunque assegna ad ogni macchina in idle un
determinato lavoro
MapReduce: algoritmo (Cont.)
4)Un worker a cui è stato assegnato il lavoro di map legge
l'input assegnatogli, passandolo alla funzione map definita
dall'utente
● la funzione map produce una coppia chiave/valore
intermedia che rimane in buffer in memoria principale.
5)Periodicamente, le coppie chiave/valore intermedie
vengono scritte in memoria locale, partizionate in R regioni
dalla funzione di partizionamento.
● La locazione delle coppie intermedie viene passata al
master che ha il compito di trasferirle alle macchine
reduce
MapReduce: algoritmo (Cont.)
6)Quando una macchina reduce viene notificata dal master
delle posizioni delle chiavi intermedie:
● Usa una chiamata di procedura remota per leggere tali
posizioni dai dischi locali delle macchine map.
7)Quando ha letto tutte le chiavi intermedie, le ordina per
valore di chiave in modo da raggruppare le coppie aventi
la stessa chiave.
● L'ordinamento è necessario poiché solitamente son
presenti chiavi diverse.
MapReduce: algoritmo (Cont.)
8)Il reducer itera sulle coppie intermedie ordinate
● Per ogni chiave unica che incontra, passa la chiave e la
lista di valori associata alla funzione reduce definita
dall'utente.
● L'output della funzione reduce viene aggiunto al file di
output finale della partizione esaminata
9)Quando tutti i workers, sia map che reduce, hanno
completato il loro lavoro, il master risveglia il programma
utente.
MapReduce: algoritmo (Cont.)
● A completamento, l'output è disponibile in R partizioni
differenti.
● Solitamente gli utenti non devono combinare i diversi file in
un unico.
– Spesso viene chiamato un nuovo programma
MapReduce che li combina
– Oppure i diversi file vengono dati in gestione ad
applicazioni che riescono a gestire input partizionati su
diverse distribuzioni.
MapReduce – Esempio WordCount
Si voglio contare le occorrenze di tutte le parole presenti in un testo.
Vediamo come MapReduce svolge l'attività.
MapReduce - WordCount
L'utente deve definire le funzioni di Map e Reduce
Map
Map(chiave,valore)
//chiave: il documento – valore: la riga assegnata come input
for each w in valore
emit(w,1);
Reduce
Reduce(chiave,valore)
//chiave: una singola parola – valore: un iteratore sulle occorrenze
result=0;
for each val in valore
result+=val;
emit(chiave,result);
La funzione Map può chiamare la funzione emit più volte.
La funzione emit crea un “documento” in output che lega la chiave w al valore specificato
MapReduce - Diagramma
MapReduce
● L'utente deve specificare:
– La funzione Map
– La funzione Reduce
– I file di Input
● Workflow
– Si legge l'input come insieme di coppie
chiave-valore
– Map trasforma le coppie cv in un nuovo
insieme di coppie c'v'
– Sort & Shuffle delle coppie per creare un
raggruppamento sulle chiavi
– Tutte le coppie con la stessa chiave c'
vengono mandate allo steso Reduce
– Reduce processa tutte la coppie c'v' con la
stessa chiave c' e crea un nuovo insieme di
coppie c''v''
– Scrive l'output in diversi file
● Tutti le fasi sono distribuite con più task che
fanno il lavoro
Hortonworks
● Hortonworks è una compagnia che produce software
incentrati sullo sviluppo e supporto di Apache Hadoop
● Il software principale di Hortonworks è Hortonworks Data
Platform (HDP)
● HDP ha lo scopo di gestire enorme quantità di dati da
diverse fonti
● HDP include molti progetti Apache Hadoop come: HDFS,
MapReduce, Pig, Hive, Hbase..
Hortonworks
● Hortonworks ha creato SandBox, un sistema portatile
Hadoop contenente i loro progetti più importanti.
● SandBox è una macchina virtuale con Apache Hadoop
pre-configurato.
● Il download è gratuito e disponibile al seguente indirizzo:
http://hortonworks.com/products/hortonworks-sandbox/#install
● Avremo bisogno di un programma per l'emulazione: è stato
scelto VirtualBox
Text Opinioning
● L'esempio che andremo a costruire riguarderà
l'opinione degli utenti twitter all'uscita del film Batman
Origins.
● Utilizzeremo Horton Sandbox
● Verrà utilizzata la componente Apache Hadoop Hive
● Infine si utilizzerà Excel per poter avere a disposizione
i grafici per l'analisi dell'opinione degli utenti.
Text Opinioning - Setup
● Scarichiamo VirtualBox dal sito ufficiale:
https://www.virtualbox.org/wiki/Downloads
● Scarichiamo SandBox dal sito ufficiale:
http://hortonworks.com/products/hortonworks-sandbox/#install
● Scarichiamo i Tweets d'esempio per l'analisi:
http://s3.amazonaws.com/hw-sandbox/tutorial13/SentimentFiles.zip
● All'interno dei tweets troveremo anche lo script Hive
necessario per l'analisi e la trasformazione dei tweets
(vedremo in seguito).
Text Opinioning - Setup
● Avviamo VirtualBox e importiamo (File->Importa
Applicazione Virtuale) la nostra macchina virtuale
SandBox precedentemente scaricata
● Attendiamo e al completamento avviamo la macchina
● Sandbox è stata programmata per dar la possibilità
all'utente di avere una GUI di semplice utilizzo per le
funzioni generali di Hadoop.
● All'avvio viene richiesto di aprire un browser ed inserire il
seguente indirizzo http://127.0.0.1:8888 per permettere il
collegamento alla macchina.
– Inserite le credenziali spostiamoci al nuovo indirizzo
http://127.0.0.1:8000
SandBox (Panoramica)
SandBox
● Dobbiamo ora caricare i tweets, precedemente scaricati, in
SandBox.
● Per far ciò clicchiamo sulla scheda File Browser. Quindi
Upload e Zip File
SandBox
● Il file verrà quindi automaticamente caricato in SandBox
nella directory
SandBox
● Una volta terminato il caricamento, sarà presente una
nuova directory chiamata upload
SandBox – SentimenFile.zip
● Il file SentimenFile.zip contiene diverse informazioni
– È presente uno script Hive (vedremo più avanti)
– È presente un file dizionario dictionary.tsv
● Il file dictionary.tsv
– Contiene una lista di vocaboli
– Per ogni parola è specificato l'importanza e un punteggio ad essa
assegnato: per semplificazione hanno lo stesso valore
– Viene specificato anche se la parola è stata sottoposta allo
stemming
– Viene specificato la tipologia del vocabolo: aggettivo, verbo o
sostantivo
– Infine viene definito un valore semantico: positivo o negativo
SandBox - Hive
● Prima di controllare lo script Hive presente all'interno del
file, presentiamo in breve di cosa si tratta.
● Apache Hive è de facto lo standard utilizzato per
interrogazioni SQL su Hadoop
● Utilizza la semantica SQL concentrandosi sull'efficienza e
la scalabilità
● Le tabelle in Hive sono molto simili alle tabelle Relation
Databases.
● Hive supporta tutti i tipi nativi: BIGINT, CHAR...
SandBox – hiveddl.sql
● Il hiveddl.sql è uno script Hive che permette di creare tabelle
utili ad analizzare i tweets successivamente.
● Descriviamo dunque ogni
porzione dello script
● Questo primo script crea
una tabella tweets_raw
utilizzando i tweets caricati
precedentemente.
● Come si evince, si creano
strutture per i dati forniti.
SandBox – hiveddl.sql
● Stiamo ora creando la
tabella dictionary
utilizzando il file prima
descritto.
● Successivamente
creiamo anche una
tabella time_zone_map
per descrivere il
timezone di ogni stato.
SandBox – hiveddl.sql
● Creiamo una vista tweets_simple a partire dalla tabella
tweets_raw raccogliendo le informazioni necessarie.
● Creiamo un'altra vista tweets_clean che utilizzerà
effettivamente solo le informazioni utili al text opinioning
SandBox – hiveddl.sql
● Explode() è UDTF che in input riceve un array o una
mappa e in output fornisce gli elementi dell'array come
righe separate
● Lateral View viene utilizzata accoppiata ad un UDTF.
● Lateral View applica subito la UDTF ad ogni riga della
tabella
● Successivamente ne congiunge l'output alle righe di input
per la crazione di una nuova tabella virtuale.
SandBox – hiveddl.sql
● La vista l1 attraverso l'utilizzo della funzione sentences()
crea una prima struttura in cui le frasi dei tweets vengono
suddivise
● La vista l2 finisce il lavoro di l1 per avere una vista in cui
ogni parola di ogni tweet occupa una propria riga
● La vista l3 ne calcola il valore semantico utilizzando
anche la tabella dictionary
SandBox – hiveddl.sql
● Crea una tabella tweets_sentiment in cui introduciamo il
“sentimento” utilizzando la vista l3
● Il comando stored as orc richiede di creare il file in formato
ORC (Optimized Row Columnar)
● Il formato ORC gestisce in maniera efficiente la
memorizzazione dei dati Hive
SandBox – hiveddl.sql
● Mettiamo tutto assieme e modifichiamo i pesi ai “sentimenti”
● Script finale utile
per Excel
SandBox
● Spostiamoci ora nella finestra relativa alla gestione Hive
(Beeswax) e copiamo uno script per volta.
SandBox
● Una volta eseguiti tutti gli script, possiamo spostarci sulla
componente Hcat che ci permette di controllare le tabelle
create.
● Apriamo per esempio
la tabella tweetsbi e
spostiamoci su
Browse Data.
● Sarà possibile vedere
il contenuto della
tabella
● Scarichiamo il
contenuto in formato
CSV che
importeremo su Excel
SandBox – View
● Abbiamo ora i nostri tweets, insieme al loro valore
“semantico”. Adesso dobbiamo visualizzare il contenuto
per vederne l'opinione.
● Abbiamo bisogno di Excel e dell'opzione Power View.
● Apriamo Excel e importiamo il file CSV.
– All'atto dell'import scartiamo la colonna “text” perchè
ormai di poco interesse
● Alla richiesta, importiamo senza alcun ordine.
SandBox – View
SandBox – View
● Abbiamo ora i nostri dati a disposizione. Andiamo a
visualizzarli. Utilizziamo la funzione Power View di Excel
(Insert > Power View)
SandBox - View
● Si aprirà dunque l'editor del PowerView
● Togliamo la spunta da id e
ts poiché non sono di
nostro interesse
● Clicchiamo sulla sezione
Map
● Map permette di avere una
panoramica su una cartina
geografica.
SandBox - View
● Abbiamo ora una visione generale dei nostri tweets.
SandBox - View
● Manca solo l'ultima specifica. Aggiungiamo un colore ai
nostri “sentimenti”.
● Nelle opzioni di PowerView clicchiamo su “sentiment” e
Add As Color.
● Impostiamo nell'opzione Size l'opzione sentiment > count
(not blank) che ci permette di avere il grafo a torta sul
conteggio dei nostri sentimenti.
● Abbiamo ora i colori in cui:
– Arancione: positivo
– Blue: negativo
– Rosso: neutro
SandBox - View
Approfondimenti
● Apache Hadoop Homepage: http://hadoop.apache.org/
● Apache Hadoop Wiki: http://wiki.apache.org/hadoop/
● Apache MapReduce:
http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html
● Apache HDFS:
http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html
● Apache Hive: http://hive.apache.org/
● HortonWorks Homepage: http://hortonworks.com/
● Apache Flume (Crawling Twitter): http://flume.apache.org/

Hadoop

  • 1.
    Presentazione Chi sono ● AntonioDavide Calì ● Dottor in Ingegneria Informatica presso Università degli studi di Padova ● Studente magistrale in Ingegneria Informatica presso Università degli studi di Bologna ● Sito Web: http://www.antoniocali.com/ Cosa verrà trattato ● Presentazione ad Hadoop ● Esempio applicativo con uso di HortonNetworks
  • 2.
    Apache Hadoop Cosa èApache Hadoop? ● È un sistema distribuito di interrogazione dati, scalabile e tollerante ai guasti ● Un Framework Open Source sotto licenza Apache ● Formato da diversi componenti: – Algoritmo MapReduce – File system distribuito HDFS – ...
  • 3.
    Un po' distoria ● 2004: i programmatori Doug Cutting e Michael J. Cafarella lavorano ad una versione iniziale di Hadoop ● 2005: Dean e Ghemawat introducono per la prima volta il paradigma MapReduce per il calcolo parallelo di Big Data ● 2008: Dal paradigma MapReduce e dalla creazione del file system HDFS esce la prima release Open Source di Hadoop.
  • 4.
    Vantaggi: Agilità eflessibilità RDBMS: Schema on Write ● Lo schema dei dati deve essere creato prima che i dati stessi vengano caricati ● Ogni dato da caricare deve essere trasformato nella struttura interna del database ● Nuove colonne devono essere aggiunte esplicitamente prima che i nuovi dati per tali colonne siano caricate nel database Hadoop: Schema on Read ● I dati sono semplicemente copiati nel file system, nessuna trasformazione è richiesta ● I dati delle colonne sono estratte durante la fase di lettura ● I nuovi dati possono essere aggiunti ed estratti in qualsiasi momento
  • 5.
  • 6.
    HDFS ● Hadoop DistributedFile System (HDFS) è un File System distribuito ● Alta tolleranza ai guasti ● Scalabilità: è in grado di gestire una moltitudine di file di grandi dimesionio (gigabyte, terabyte) ● Non è conforme allo standard POSIX in quanto non permette la modifica dei file ● I file sono rappresentati attraverso una struttura gerarchica che utilizza l'architettura master/slave: NameNode e DataNode ● Un cluster in HDFS possiede un solo master (NameNode) che gestisce il namespace del file system e regola gli accessi del clients
  • 7.
    HDFS (Cont) ● Uncluster possiede diversi slave (DataNode), solitamente uno per ogni nodo del cluster, che gestisce lo storage del nodo che possiede. ● Internamente i file sono suddivisi in blocchi: ogni blocco viene replicato in maniera indipendente su diversi DataNode. ● Il NameNode gestisce le operazioni del namespace, cioè apertura, chiusura, copia dei file e delle directory. ● Il NameNode gestisce anche la mappatura dei blocchi del file sui diversi DataNode ● I DataNode sono responsabili della scrittura e lettura sotto richiesta dei Client ● I DataNode sono anche responsabili della creazione, distruzione e replica dei blocchi sotto richiesta del NameNode
  • 8.
  • 9.
    HDFS ● Il contenutodel file viene diviso in blocchi (solitamente di 128MB) ● Ogni blocco viene replicato indipendentemente su diversi DataNode ● Il NameNode monitora il numero di repliche dei blocchi ● Se la replica di un blocco viene persa a causa di un guasto del DataNode o guasto al disco? – Il NameNode crea una nuova replica del blocco perso. ● Il NameNode gestisce l'albero del namespace e la mappatura dei blocchi sui DataNode ● Il NameNode mantiene l'intera immagine del namespace in Ram
  • 10.
    HDFS: NameNode eDataNode ● Sia il NameNode che i DataNode sono moduli software sviluppati in Java – ogni macchina che supporta Java supporta NameNode e DataNode ● Una tipica distribuzione prevede una macchina dedicata ad un singolo NameNode. ● Ogni altra macchina dello stesso cluster esegue DateNode ● L'esistenza di un singolo NameNode per cluster semplifica notevolmente l'architettura. – Il NameNode fa da arbitro e deposito di tutti i metadata del file system. ● Il sistema è così costruito per non far fluire i dati utente attraverso il NameNode.
  • 11.
    HDFS: NameNode ● IlNameNode mantiene il namespace del File System ● Ogni modifica al namespace o alle sue proprietà viene registrata sul NameNode ● Un'applicazione può specificare il numero di repliche che HDFS deve gestire ● Il numero di repliche di un file è chiamato il fattore della replica del file ● L'informazione sul fattore della replica è mantenuto sul NameNode
  • 12.
    HDFS: Data Replication ●HDFS è disegnato all'affidabilità di storage di una moltitudine di file di grandi dimensioni. ● Memorizza i file come sequenze di blocchi. ● Tutti i blocchi, eccetto per l'ultimo, hanno la stessa dimensione ● I blocchi sono replicati per garantire la tolleranza ai guasti ● La grandezza dei blocchi e il fattore di replica sono parametri configurabili di ciascun file ● Un'applicazione può specificare il numero di repliche per ogni file ● Il fattore di replica può essere specificato all'atto di creazione del file e modificato successivamente ● I file sono write-once, ovvero non possono essere modificati
  • 13.
    HDFS: Data Replication ●Il NameNode prende tutte le decisioni riguardo le repliche dei blocchi. ● Periodicamente riceve un HeartBeat e un BlockReport da ogni DataNode all'interno del cluster ● Ricevere un HeartBeat da un DataNode implica il corretto funzionamento del DataNode ● Il BlockReport invece contiene la lista dei blocchi che il DataNode possiede
  • 14.
  • 15.
    HDFS: Data Replication ●Le repliche sono importanti per affidabilità e performance. ● L'ottimizzazione del posizionamento delle repliche avviene grazie al tuning ● Le repliche sono rack-aware, ovvero conscie del rack a cui appartengono – Serve a migliorare l'affidabilità dei dati, l'uso della banda di rete e la disponibilità ● L'architettura generale di un grande HDFS prevede un cluster di computer composti da più racks. – La banda di rete fra due nodi nello stesso rack è superiore a quella fra due nodi appartenente a rack diversi
  • 16.
    HDFS: Data Replication ●Il NameNode determina il rack ID a cui ogni DataNode appartiene. ● Una strategia semplice ma non ottima prevede di memorizzare tutte le repliche in un solo rack: – questa politica permette di prevenire la perdita di dati quando un intero rack si guasta – permette l'utilizzo di banda da diversi rack in lettura dati ● Questa politica distribuisce uniformemente le repliche nel cluster – ciò permette di bilanciare il carico in caso di errore di componenti. ● Purtroppo questa politica aumenta il costo di scrittura poiché una scrittura deve trasferire blocchi a più rack.
  • 17.
    Data Replication (Esempio) ●Tipico esempio di fattore di replica è tre. ● La prima replica viene memorizzata in un nodo del rack locale ● La seconda e la terza replica memorizzate in un rack remoto ● Questa politica taglia il traffico di scrittura inter-rack il che generalmente migliora le performance ● Le probabilità di guasto di un intero rack sono molto minori che di un singolo nodo ● Migliora l'utilizzo di banda in lettura poiché si devono leggere solo due rack e non tre. ● Questa politica migliora le performance di scrittura e lettura senza intaccare l'affidabilità dei dati.
  • 18.
    HDFS: Replica Selection ●Una volta memorizzate le repliche su diversi nodi e/o rack, al momento di lettura bisogna scegliere quale replica leggere. ● HDFS per migliorare le performance di lettura cerca la replica che risiede più vicina al client lettore. ● Se esiste una replica sullo stesso rack del nodo lettore allora viene utilizzata quest'ultima
  • 19.
    HDFS: SafeMode ● Quandosi avvia un NameNode esso viene caricato in una modalità chiamata SafeMode ● In questo stato il NameNode riceve segnali di HeartBeat e BlockReport dai vari DataNode ● I BlockReport contengono la lista di blocchi replicati che il DataNode possiede. ● Un blocco viene considerato safely replicated quando il numero minimo di repliche del blocco viene raggiunto – Bisogna comunicare al NameNode questo status
  • 20.
    HDFS: SafeMode ● Alraggiungimento di una percentuale di blocchi safely replicated, il NameNode esce dallo stato SafeMode ● Al termine del SafeMode il NameNode è conscio dei blocchi non safely replicated – Vengono create dunque delle repliche da memorizzare in DataNode per renderli safely
  • 21.
    Persistenza: Metadati ● HDFSdeve garantire la persistenza dei propri metadati (ad esempio il fattore di replica, la creazione di un nuovo file) ● La persistenza del namespace dell'HDFS è demandata al NameNode. – Il NameNode fa uso di un log chiamato EditLog sul quale registra ogni cambiamento. ● L'intero namespace del File System, inclusa la mappatura dei blocchi dei file, viene memorizzato in un file chiamato FsImage. ● FsImage viene salvato nel File System locale del NameNode
  • 22.
    Persistenza: Metadati ● IlNameNode utilizza un metodo simile a qualsiasi DBMS per mantenere la persistenza, ovvero fa uso del record Checkpoint. ● All'avvio del NameNode, esso carica da disco EditLog e FsImage. – Attraverso l'EditLog aggiorna l'immagine del FileSystem che aveva salvato su FsImage – Viene aggiornato l'FsImage riscrivendolo sul disco stesso. ● Il NameNode mantiene in memoria l'intero namespace e il mapping dei blocchi – Utilizza la tecnica del checkpoint per avere la certezza di avere dati corretti
  • 23.
    Persistenza: Dati ● Lapersistenza dei dati è demandata ai singoli DataNode. ● Ogni DataNode non è conscio dell'esistenza dell'HDFS e dei suoi metadati ● Ogni DataNode mantiene i propri dati (blocchi) nel proprio file system locale. ● Ogni blocco di dati viene memorizzato in un file differente ● I blocchi non vengono memorizzati in una unica directory ma si usa una funzione euristica per ottimizzare il numero di file per directory – Si creano subdirectory se necessario. ● All'avvio, il DataNode legge l'intero file system locale per creare il proprio BlockReport
  • 24.
    HDFS: Robustezza ● Unodegli obiettivi di HDFS è garantire robustezza ai guasti e l'affidabilità ai dati. ● I tre tipi di guasti più comuni sono: – Al NameNode – Al DataNode – A partizioni della rete
  • 25.
    Robustezza: Heartbeat ● Periodicamentei DataNode mandano segnali di HeartBeat al NameNode per assicurare il proprio funzionamento ● Il NameNode si accorge di una perdita di connessione tra esso e una partizione della rete grazie alla non ricezione di segnali di HeartBeat ● Il NameNode segna questi DataNode come “morti” e non vi manda più alcuna richiesta I/O ● Ogni dato che era presente in un DataNode morto, viene reso non più disponibile a HDFS. ● La presenza di DataNode morti potrebbe non soddisfare più il requisito minimo del fattore di replica
  • 26.
    Robustezza: Heartbeat (Cont) ●Il NameNode riesce a tenere traccia di quali file non soddisfano più il fattore di replica per richiederne nuove repliche. ● Tra le cause possibile di non soddisfacibilità del fattore di replica e per la richiesta di una nuova replica abbiamo – DataNode non più disponibile – Replica corrotta – Guasto all'harddisk del DataNode – Il fattore di replica del file viene incrementato
  • 27.
    Robustezza: riorganizzazione Cluster ●L'architettura HDFS è compatibile con la ridistribuzione dei dati nei cluster. ● L'architettura può decidere autonomamente di spostare dati da un DataNode ad un altro – Questo avviene se la percentuale di riempimento di un DataNode risulta troppo elevata o troppo bassa ● In presenza di una alta richiesta di un file, l'architettura può decidere di aumentare il fattore di replica per quel file – Questo meccanismo ne incrementa la robustezza
  • 28.
    Robustezza: Integrità deidati ● È possibile che un certo blocco di un file possa arrivare al DataNode corrotto. Le cause – un guasto sulla struttura di archiviazione – un errore sulla rete o a causa di un software corrotto. ● Il client HDFS implementa un protocollo di checksum sui contenuti dei file ● Quando un client crea un file HDFS, esso ne calcola il checksum per ogni blocco – Il checksum viene archiviato in un file nascosto all'interno del namespace di HDFS
  • 29.
    Robustezza: Integrità deidati (Cont) ● Quando un client riceve un dato da un DataNode, ne calcola il checksum – Viene confrontato il checksum così calcolato con il checksum associato al file ● Se soddisfa l'uguaglianza il dato è considerato integro ● In caso non soddisfi il confronto, il client può richiedere il dato ad un altro DataNode
  • 30.
    Robustezza: Integrità HDFS ●FsImage e EditLog sono file di estrema importanza per HDFS, per questo bisogna proteggerli da eventuali guasti ● Il NameNode si fa carico di mantenere diverse copie dello stesso FsImage e di EditLog ● Ogni aggiornamento su FsImage e EditLog deve essere propagato in maniera sincrona ad ogni copia ● Un numero elevato di copie di FsImage e EditLog può degradare le prestazioni a causa dei continui aggiornamenti su diverse copie ● Quando un NameNode si riavvia, utilizza l'ultima copia aggiornata di FsImage e EditLog
  • 31.
    HDFS: Organizzazione deidati ● HDFS è stato costruito per supportare file di ampie dimensioni. ● Le applicazioni che fanno uso di HDFS sono strutturate per scrivere una sola volta i dati, ma leggerli una o più volte con velocità di streaming ● HDFS supporta la semantica write-once-read-many sui file. ● La grandezza tipica di un blocco è di 64MB. ● Per cui un file viene diviso in diversi chunks di 64MB. ● Ogni chunk risiede, solitamente, su un DataNode diverso
  • 32.
    HDFS: Funzionamento ● Quandoun client richiede la creazione di un file, la richiesta non viene spedita direttamente al NameNode. ● Il client invece si fa carico di memorizzare localmente i dati, fino al raggiungimento dell'occupazione minima di un blocco. ● Una volta raggiunto la grandezza minima di un blocco, il client manda la richiesta al NameNode – il NameNode inserisce il nome del file nel namespace e alloca lo spazio necessario al blocco. – il NameNode si fa carico di scegliere il DataNode su cui allocare il blocco, restituendo al client l'ID del DataNode scelto
  • 33.
    HDFS: Funzionamento (Cont.) ●Il client trasferisce il blocco dalla propria memoria al DataNode selezionato, cancellando la copia locale. ● Quando il file viene chiuso, i dati rimasti localmente sul client vengono trasferiti al DataNode e viene comunicata la chiusura del file al NameNode ● A questo punto il NameNode esegue il commit dell'operazione di scrittura conclusa in maniera persistente. ● Se il NameNode muore prima della chiusura del file, il file viene perso. ● Il client utilizza questo protocollo di mantenimento su file locale per non causare congestione sulla rete.
  • 34.
    HDFS: Replication Pipelining ●Quando un client vuole scrivere un file su HDFS, come descritto precedentemente, aspetta di raggiungere la dimensione di un blocco. – Una volta raggiunta, trasferisce i dati al DataNode indicato dal NameNode ● Poichè ogni file ha un fattore di replica, il NameNode indica una lista di DataNode sul quale il blocco verrà replicato ● Il primo DataNode memorizza localmente i dati che sta ricevendo (solitamente in porzioni di 4Kb) – Intanto trasferisce le porzioni ricevute al DataNode successivo della lista che conterrà la prima replica
  • 35.
    HDFS: Replication Pipeling(Cont) ● Il processo continua fino al raggiungimento dell'ultimo DataNode che deve contere le repliche. ● Questo permette il pipelining delle repliche.
  • 36.
    HDFS: Accessibilità ● Sipuò accedere a HDFS in diversi modi – HDFS prevede API Java per l'accesso delle applicazioni – Esiste un wrapper scritto in C per le API Java messe a disposizione – È possibile l'accesso anche attraverso browser HTTP per la visualizzazione dei file
  • 37.
    HDFS: Eliminare File ●Quando un file viene eliminato dall'utente o da una applicazione, non viene rimosso immediatamente. ● Il file selezionato viene rinominato e spostato nella directory /trash: fintanto che è presente in questa directory può essere immediatamente ripristinato ● I file rimangono nella directory /trash per un tempo configurabile – una volta trascorso questo tempo, il NameNode elimina il file dal namespace di HDFS. ● L'eliminazione di un file implica la liberazione del blocco allocato associato.
  • 38.
    HDFS: Ripristinare unfile ● Fintanto che il file rimane nella directory /trash, esso può essere ripristinato ● Nella directory /trash è presente solo l'ultima copia aggiornata del file. ● La directory /trash è simile a qualsiasi directory, con una peculiarità – HDFS applica determinate politiche di eliminazione automatica dei file presenti ● Di default il tempo di vita di un file nella directory /trash è di sei ore.
  • 39.
    HDFS: Diminuire fattoredi replica ● Quando il fattore di replica di un file viene diminuito, il NameNode decide le repliche che devono essere eliminate ● Il successivo segnale di Heartbeat trasferisce questa informazione al DataNode. ● I DataNode dunque rimuove il corrispondente blocco e uno spazio equivalente viene aggiunto al cluster. ● Vi può essere un ritardo tra la richiesta di eliminazione e l'effettivo spazio liberato sul cluster
  • 40.
    MapReduce ● MapReduce èun modello di programmazione, che implementato, permette di realizzare sistemi di computazione parallela e distribuita ● MapReduce viene utilizzato per la computazione di larga scala su un quantitativo enorme di dati. ● Estremamente scalabile, deve lavorare su Gigabyte o Petabyte di dati ● Challenges: – Come distribuire la computazione – Come risolvere i guasti alle macchine
  • 41.
    MapReduce (Cont.) ● Sibasa sul concetto di functional programming, in cui non vi è più la condivisione di dati, ma questi vengono passati alle funzioni come parametri o valori di ritorno ● Lavora secondo il paradigma divide-et-impera suddividendo le operazioni di calcolo in diversi processi autonomi. – Quando tutte le sottoparti del problema sono state processate, esse vengono “ridotte” (ovvero ricomposte) a un unico risultato finale ● Idee chiavi: – Portare la computazione vicino ai dati – Immagazzinare i file più volte per l'affidabilità (HDFS)
  • 42.
    MapReduce in breve ●Un processo MapReduce può essere diviso – I dati in Input, su HDFS – Una funzione map, che trasforma i dati di input in una serie di coppie chiave/valore intermedie – Una funzione reduce, che “unifica” i valori delle chiavi intermedie creando una nuova serie di coppie chiave/valore – Output scritto su HDFS
  • 43.
  • 44.
    MapReduce (Cont) ● Ilsistema in run-time si occupa di gestire – Il partizionamento dei dati di input – La schedulazione del programma sulle diverse macchine – La gestione dei guasti e fallimenti delle macchine – La gestione della comunicazione fra le varie macchine
  • 45.
    MapReduce: algoritmo Cosa avvienequando MapReduce è in esecuzione 1)La libreria MapReduce divide il file di input in M sottoinsiemi. Crea una copia del programma su ogni cluster di macchine. 2)Una copia del programma è speciale – il master. Le restanti copie sono workers a cui viene assegnato dal master un determinato lavoro. ● Ci sono M lavori di map e R lavori di reduce da dover assegnare. ● Il master dunque assegna ad ogni macchina in idle un determinato lavoro
  • 46.
    MapReduce: algoritmo (Cont.) 4)Unworker a cui è stato assegnato il lavoro di map legge l'input assegnatogli, passandolo alla funzione map definita dall'utente ● la funzione map produce una coppia chiave/valore intermedia che rimane in buffer in memoria principale. 5)Periodicamente, le coppie chiave/valore intermedie vengono scritte in memoria locale, partizionate in R regioni dalla funzione di partizionamento. ● La locazione delle coppie intermedie viene passata al master che ha il compito di trasferirle alle macchine reduce
  • 47.
    MapReduce: algoritmo (Cont.) 6)Quandouna macchina reduce viene notificata dal master delle posizioni delle chiavi intermedie: ● Usa una chiamata di procedura remota per leggere tali posizioni dai dischi locali delle macchine map. 7)Quando ha letto tutte le chiavi intermedie, le ordina per valore di chiave in modo da raggruppare le coppie aventi la stessa chiave. ● L'ordinamento è necessario poiché solitamente son presenti chiavi diverse.
  • 48.
    MapReduce: algoritmo (Cont.) 8)Ilreducer itera sulle coppie intermedie ordinate ● Per ogni chiave unica che incontra, passa la chiave e la lista di valori associata alla funzione reduce definita dall'utente. ● L'output della funzione reduce viene aggiunto al file di output finale della partizione esaminata 9)Quando tutti i workers, sia map che reduce, hanno completato il loro lavoro, il master risveglia il programma utente.
  • 49.
    MapReduce: algoritmo (Cont.) ●A completamento, l'output è disponibile in R partizioni differenti. ● Solitamente gli utenti non devono combinare i diversi file in un unico. – Spesso viene chiamato un nuovo programma MapReduce che li combina – Oppure i diversi file vengono dati in gestione ad applicazioni che riescono a gestire input partizionati su diverse distribuzioni.
  • 50.
    MapReduce – EsempioWordCount Si voglio contare le occorrenze di tutte le parole presenti in un testo. Vediamo come MapReduce svolge l'attività.
  • 51.
    MapReduce - WordCount L'utentedeve definire le funzioni di Map e Reduce Map Map(chiave,valore) //chiave: il documento – valore: la riga assegnata come input for each w in valore emit(w,1); Reduce Reduce(chiave,valore) //chiave: una singola parola – valore: un iteratore sulle occorrenze result=0; for each val in valore result+=val; emit(chiave,result); La funzione Map può chiamare la funzione emit più volte. La funzione emit crea un “documento” in output che lega la chiave w al valore specificato
  • 52.
  • 53.
    MapReduce ● L'utente devespecificare: – La funzione Map – La funzione Reduce – I file di Input ● Workflow – Si legge l'input come insieme di coppie chiave-valore – Map trasforma le coppie cv in un nuovo insieme di coppie c'v' – Sort & Shuffle delle coppie per creare un raggruppamento sulle chiavi – Tutte le coppie con la stessa chiave c' vengono mandate allo steso Reduce – Reduce processa tutte la coppie c'v' con la stessa chiave c' e crea un nuovo insieme di coppie c''v'' – Scrive l'output in diversi file ● Tutti le fasi sono distribuite con più task che fanno il lavoro
  • 55.
    Hortonworks ● Hortonworks èuna compagnia che produce software incentrati sullo sviluppo e supporto di Apache Hadoop ● Il software principale di Hortonworks è Hortonworks Data Platform (HDP) ● HDP ha lo scopo di gestire enorme quantità di dati da diverse fonti ● HDP include molti progetti Apache Hadoop come: HDFS, MapReduce, Pig, Hive, Hbase..
  • 56.
    Hortonworks ● Hortonworks hacreato SandBox, un sistema portatile Hadoop contenente i loro progetti più importanti. ● SandBox è una macchina virtuale con Apache Hadoop pre-configurato. ● Il download è gratuito e disponibile al seguente indirizzo: http://hortonworks.com/products/hortonworks-sandbox/#install ● Avremo bisogno di un programma per l'emulazione: è stato scelto VirtualBox
  • 57.
    Text Opinioning ● L'esempioche andremo a costruire riguarderà l'opinione degli utenti twitter all'uscita del film Batman Origins. ● Utilizzeremo Horton Sandbox ● Verrà utilizzata la componente Apache Hadoop Hive ● Infine si utilizzerà Excel per poter avere a disposizione i grafici per l'analisi dell'opinione degli utenti.
  • 58.
    Text Opinioning -Setup ● Scarichiamo VirtualBox dal sito ufficiale: https://www.virtualbox.org/wiki/Downloads ● Scarichiamo SandBox dal sito ufficiale: http://hortonworks.com/products/hortonworks-sandbox/#install ● Scarichiamo i Tweets d'esempio per l'analisi: http://s3.amazonaws.com/hw-sandbox/tutorial13/SentimentFiles.zip ● All'interno dei tweets troveremo anche lo script Hive necessario per l'analisi e la trasformazione dei tweets (vedremo in seguito).
  • 59.
    Text Opinioning -Setup ● Avviamo VirtualBox e importiamo (File->Importa Applicazione Virtuale) la nostra macchina virtuale SandBox precedentemente scaricata ● Attendiamo e al completamento avviamo la macchina ● Sandbox è stata programmata per dar la possibilità all'utente di avere una GUI di semplice utilizzo per le funzioni generali di Hadoop. ● All'avvio viene richiesto di aprire un browser ed inserire il seguente indirizzo http://127.0.0.1:8888 per permettere il collegamento alla macchina. – Inserite le credenziali spostiamoci al nuovo indirizzo http://127.0.0.1:8000
  • 60.
  • 61.
    SandBox ● Dobbiamo oracaricare i tweets, precedemente scaricati, in SandBox. ● Per far ciò clicchiamo sulla scheda File Browser. Quindi Upload e Zip File
  • 62.
    SandBox ● Il fileverrà quindi automaticamente caricato in SandBox nella directory
  • 63.
    SandBox ● Una voltaterminato il caricamento, sarà presente una nuova directory chiamata upload
  • 64.
    SandBox – SentimenFile.zip ●Il file SentimenFile.zip contiene diverse informazioni – È presente uno script Hive (vedremo più avanti) – È presente un file dizionario dictionary.tsv ● Il file dictionary.tsv – Contiene una lista di vocaboli – Per ogni parola è specificato l'importanza e un punteggio ad essa assegnato: per semplificazione hanno lo stesso valore – Viene specificato anche se la parola è stata sottoposta allo stemming – Viene specificato la tipologia del vocabolo: aggettivo, verbo o sostantivo – Infine viene definito un valore semantico: positivo o negativo
  • 65.
    SandBox - Hive ●Prima di controllare lo script Hive presente all'interno del file, presentiamo in breve di cosa si tratta. ● Apache Hive è de facto lo standard utilizzato per interrogazioni SQL su Hadoop ● Utilizza la semantica SQL concentrandosi sull'efficienza e la scalabilità ● Le tabelle in Hive sono molto simili alle tabelle Relation Databases. ● Hive supporta tutti i tipi nativi: BIGINT, CHAR...
  • 66.
    SandBox – hiveddl.sql ●Il hiveddl.sql è uno script Hive che permette di creare tabelle utili ad analizzare i tweets successivamente. ● Descriviamo dunque ogni porzione dello script ● Questo primo script crea una tabella tweets_raw utilizzando i tweets caricati precedentemente. ● Come si evince, si creano strutture per i dati forniti.
  • 67.
    SandBox – hiveddl.sql ●Stiamo ora creando la tabella dictionary utilizzando il file prima descritto. ● Successivamente creiamo anche una tabella time_zone_map per descrivere il timezone di ogni stato.
  • 68.
    SandBox – hiveddl.sql ●Creiamo una vista tweets_simple a partire dalla tabella tweets_raw raccogliendo le informazioni necessarie. ● Creiamo un'altra vista tweets_clean che utilizzerà effettivamente solo le informazioni utili al text opinioning
  • 69.
    SandBox – hiveddl.sql ●Explode() è UDTF che in input riceve un array o una mappa e in output fornisce gli elementi dell'array come righe separate ● Lateral View viene utilizzata accoppiata ad un UDTF. ● Lateral View applica subito la UDTF ad ogni riga della tabella ● Successivamente ne congiunge l'output alle righe di input per la crazione di una nuova tabella virtuale.
  • 70.
    SandBox – hiveddl.sql ●La vista l1 attraverso l'utilizzo della funzione sentences() crea una prima struttura in cui le frasi dei tweets vengono suddivise ● La vista l2 finisce il lavoro di l1 per avere una vista in cui ogni parola di ogni tweet occupa una propria riga ● La vista l3 ne calcola il valore semantico utilizzando anche la tabella dictionary
  • 71.
    SandBox – hiveddl.sql ●Crea una tabella tweets_sentiment in cui introduciamo il “sentimento” utilizzando la vista l3 ● Il comando stored as orc richiede di creare il file in formato ORC (Optimized Row Columnar) ● Il formato ORC gestisce in maniera efficiente la memorizzazione dei dati Hive
  • 72.
    SandBox – hiveddl.sql ●Mettiamo tutto assieme e modifichiamo i pesi ai “sentimenti” ● Script finale utile per Excel
  • 73.
    SandBox ● Spostiamoci oranella finestra relativa alla gestione Hive (Beeswax) e copiamo uno script per volta.
  • 74.
    SandBox ● Una voltaeseguiti tutti gli script, possiamo spostarci sulla componente Hcat che ci permette di controllare le tabelle create. ● Apriamo per esempio la tabella tweetsbi e spostiamoci su Browse Data. ● Sarà possibile vedere il contenuto della tabella ● Scarichiamo il contenuto in formato CSV che importeremo su Excel
  • 75.
    SandBox – View ●Abbiamo ora i nostri tweets, insieme al loro valore “semantico”. Adesso dobbiamo visualizzare il contenuto per vederne l'opinione. ● Abbiamo bisogno di Excel e dell'opzione Power View. ● Apriamo Excel e importiamo il file CSV. – All'atto dell'import scartiamo la colonna “text” perchè ormai di poco interesse ● Alla richiesta, importiamo senza alcun ordine.
  • 76.
  • 77.
    SandBox – View ●Abbiamo ora i nostri dati a disposizione. Andiamo a visualizzarli. Utilizziamo la funzione Power View di Excel (Insert > Power View)
  • 78.
    SandBox - View ●Si aprirà dunque l'editor del PowerView ● Togliamo la spunta da id e ts poiché non sono di nostro interesse ● Clicchiamo sulla sezione Map ● Map permette di avere una panoramica su una cartina geografica.
  • 79.
    SandBox - View ●Abbiamo ora una visione generale dei nostri tweets.
  • 80.
    SandBox - View ●Manca solo l'ultima specifica. Aggiungiamo un colore ai nostri “sentimenti”. ● Nelle opzioni di PowerView clicchiamo su “sentiment” e Add As Color. ● Impostiamo nell'opzione Size l'opzione sentiment > count (not blank) che ci permette di avere il grafo a torta sul conteggio dei nostri sentimenti. ● Abbiamo ora i colori in cui: – Arancione: positivo – Blue: negativo – Rosso: neutro
  • 81.
  • 82.
    Approfondimenti ● Apache HadoopHomepage: http://hadoop.apache.org/ ● Apache Hadoop Wiki: http://wiki.apache.org/hadoop/ ● Apache MapReduce: http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html ● Apache HDFS: http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html ● Apache Hive: http://hive.apache.org/ ● HortonWorks Homepage: http://hortonworks.com/ ● Apache Flume (Crawling Twitter): http://flume.apache.org/