SlideShare a Scribd company logo
Hadoop in action
Gabriele Lombari - Alessandra Zullo
Sistemi Operativi Avanzati - Giuseppe Cattaneo
April 21, 2016
Universit`a degli Studi di Salerno
Table of contents
1. Esempio: WordCount
2. Apache Hadoop & MapReduce
3. Hadoop Distributed File System
4. Hadoop v2.x
5. WordCount Distribuito
6. Prestazioni
7. Hadoop in action!
8. Riferimenti
2
Esempio: WordCount
Esempio: WordCount (1)
Immaginiamo di avere un grande DataSet di parole
{web, weed, green, sun, moon, land, part, web, green ...}
di cui volgiamo contare il numero di occorrenze.
4
Esempio: WordCount - Sequential Code
1
2 p u b l i c c l a s s SequentialWordCount {
3
4 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) throws Exception {
5
6 F i l e I n p u t S t r e a m fstream = new F i l e I n p u t S t r e a m ( ”BIG FILE 8GB . t x t ” ) ;
7 DataInputStream i n = new DataInputStream ( fstream ) ;
8 BufferedReader br = new BufferedReader ( new InputStreamReader ( i n ) ) ;
9
10 HashMap<String , I n t e g e r> map = new HashMap<>();
11
12 S t r i n g word ;
13 w h i l e (( word = br . re adL in e () ) != n u l l ){
14
15 S t r i n g T o k e n i z e r t o k e n i z e r = new S t r i n g T o k e n i z e r ( word , ” tnrf . , ; : ’  ” ” ) ;
16
17 w h i l e ( t o k e n i z e r . hasMoreTokens () ) {
18 S t r i n g word now = t o k e n i z e r . nextToken () ;
19 I n t e g e r count = map . get ( word now ) ;
20
21 map . put ( word now , count == n u l l ? 1 : ++count ) ;
22 }
23 }
24
25 f o r ( Entry<String , I n t e g e r> e n t r y : map . e n t r y S e t () ) System . out . p r i n t l n ( e n t r y . getKey () + ” : ” +
e n t r y . getValue () ) ;
26 }
27
28 }
5
Esempio: WordCount - MapReduce execution
Un esempio di come il problema WordCount viene risolto in
un’esecuzione su ambiente MapReduce.
6
Apache Hadoop & MapReduce
Un po’ di storia
La genesi di Apache Hadoop ha avuto inizio quando Google presenta,
nell’Ottobre del 2003, The Google File System e, poi nel Dicembre
2004, MapReduce: Simplified Data Processing on Large Clusters.
Lo sviluppo del framework inizia con il progetto Nutch, divenuto presto a
far parte del progetto Apache Lucene.
Nel 2005 Yahoo! entra a far parte del progetto Nutch decretando cos`ı
l’inizio di Hadoop.
8
Un po’ di storia
Il progetto fu supervisionato da Doug Cutting e Michael J. Cafarella
Il nome Hadoop fu coniato dal nome del pupazzo del figlio di Cutting.
9
Introduzione
Apache Hadoop `e un framework per l’elaborazione distribuita di grandi
insiemi di dati(Big Data) che usa il modello di programmazione
MapReduce.
10
MapReduce (1)
Il modello computazionale proposto da Google nel 2004 prevedeva che gli
utenti dovessero comporre la loro logica di elaborazione basandosi su due
soli step:
11
MapReduce (1)
Il modello computazionale proposto da Google nel 2004 prevedeva che gli
utenti dovessero comporre la loro logica di elaborazione basandosi su due
soli step:
• Map, il quale prende in input una coppia < K, V > e restituisce una
lista di coppie < K , V >, intermedie;
11
MapReduce (1)
Il modello computazionale proposto da Google nel 2004 prevedeva che gli
utenti dovessero comporre la loro logica di elaborazione basandosi su due
soli step:
• Map, il quale prende in input una coppia < K, V > e restituisce una
lista di coppie < K , V >, intermedie;
• Reduce, il quale prende in input una lista di coppie < K , V >,
aventi la stessa K, e restituisce in output una coppia < K , V >.
11
MapReduce (1)
Il modello computazionale proposto da Google nel 2004 prevedeva che gli
utenti dovessero comporre la loro logica di elaborazione basandosi su due
soli step:
• Map, il quale prende in input una coppia < K, V > e restituisce una
lista di coppie < K , V >, intermedie;
• Reduce, il quale prende in input una lista di coppie < K , V >,
aventi la stessa K, e restituisce in output una coppia < K , V >.
Ci`o permette una grande parallelizzazione in grado di sfruttare al meglio
le nostre CPU, eliminando qualsiasi difficolt`a al programmatore.
11
MapReduce (2)
Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il
codice per le operazioni di Map e Reduce, sar`a compito del framework
rendere parallela la computazione in maniera del tutto trasparente.
12
MapReduce (2)
Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il
codice per le operazioni di Map e Reduce, sar`a compito del framework
rendere parallela la computazione in maniera del tutto trasparente.
In particolare il framework si occupa di:
12
MapReduce (2)
Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il
codice per le operazioni di Map e Reduce, sar`a compito del framework
rendere parallela la computazione in maniera del tutto trasparente.
In particolare il framework si occupa di:
• Scheduling;
12
MapReduce (2)
Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il
codice per le operazioni di Map e Reduce, sar`a compito del framework
rendere parallela la computazione in maniera del tutto trasparente.
In particolare il framework si occupa di:
• Scheduling;
• Data/code co-location;
12
MapReduce (2)
Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il
codice per le operazioni di Map e Reduce, sar`a compito del framework
rendere parallela la computazione in maniera del tutto trasparente.
In particolare il framework si occupa di:
• Scheduling;
• Data/code co-location;
• Synchronization;
12
MapReduce (2)
Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il
codice per le operazioni di Map e Reduce, sar`a compito del framework
rendere parallela la computazione in maniera del tutto trasparente.
In particolare il framework si occupa di:
• Scheduling;
• Data/code co-location;
• Synchronization;
• Error and fault handling.
12
Apache Hadoop
Hadoop `e formato principalmente da 4 macro-progetti:
• Hadoop Common: librerie di base per la corretta esecuzione del
framework;
• Hadoop Distributed File System (HDFS): file system distribuito
che fornisce un accesso veloce ai dati;
• Hadoop Yet Another Resource Negotiator (YARN): sistema per
la pianificazione dei processi e la gestione delle risorse del cluster.
• Hadoop MapReduce: sistema per l’elaborazione parallela dei
BigData;
13
Hadoop Distributed File System
Hadoop Distributed File System - HDFS (1)
HDFS, acronimo di Hadoop Distributed File System, `e il file system
distribuito di Hadoop.
File system distribuito (DFS): particolare file system che permette la
memorizzazione di file e risorse in dispositivi di archiviazione
distribuiti in rete, resi disponibili attraverso un meccanismo client-server
tra dispositivi remoti.
15
Hadoop Distributed File System - HDFS (2)
HDFS `e un file system strutturato a blocchi;i file sono suddivisi in
blocchi di dimensioni fisse, non necessariamente memorizzati sulla stessa
macchina.
16
Hadoop Distributed File System - HDFS (2)
HDFS `e un file system strutturato a blocchi;i file sono suddivisi in
blocchi di dimensioni fisse, non necessariamente memorizzati sulla stessa
macchina.
Le dimensioni sono di 64MB per Hadoop v1.x e 128MB per Hadoop v2.x.
16
Hadoop Distributed File System - HDFS (2)
HDFS `e un file system strutturato a blocchi;i file sono suddivisi in
blocchi di dimensioni fisse, non necessariamente memorizzati sulla stessa
macchina.
Le dimensioni sono di 64MB per Hadoop v1.x e 128MB per Hadoop v2.x.
HDFS non pu`o essere montato direttamente sul SO esistente, per tale
motivo bisogna spostare i file prima e dopo l’esecuzione di un job.
16
Hadoop Distributed File System - HDFS (2)
HDFS `e un file system strutturato a blocchi;i file sono suddivisi in
blocchi di dimensioni fisse, non necessariamente memorizzati sulla stessa
macchina.
Le dimensioni sono di 64MB per Hadoop v1.x e 128MB per Hadoop v2.x.
HDFS non pu`o essere montato direttamente sul SO esistente, per tale
motivo bisogna spostare i file prima e dopo l’esecuzione di un job.
HDFS prevede un modulo che permette alle applicazioni di spostarsi
vicino ai dati in modo da minimizzare la congestione della rete e
incrementare il throughput del sistema.
16
HDFS - Architettura (1)
HDFS ha un’architettura master/slaves.
Master e slave sono indicati con il nome dei daemons che forniscono il
rispettivo servizio; con Namenode indichiamo il master e con Datanode
indichiamo gli slaves.
17
HDFS - Architettura(2)
In dettaglio:
• master (uno): tiene traccia del file namespace (metadati che
contengono informazioni circa il file, la struttura delle directory di
tutti i file presenti sull’HDFS,la posizione dei blocchi e i permessi di
accesso);
• slaves (molti): effettua il reale calcolo computazionale; memorizza e
recupera i blocchi quando richiesto (dal client o dal master), e
comunica periodicamente al master la lista dei blocchi da esso
memorizzati. .
18
HDFS - Architettura(3)
`E importante sottolineare che un failure del Namenode causerebbe un
fault di tutto il sistema.
Tale problema `e stato risolto in Hadoop v2.x con l’aggiunta del modulo
Hadoop HA in cui vi `e una coppia di NameNode (active e standby);
nel caso in cui si verifica una failure sul NameNode active Hadoop HA
si occupa, in maniera trasparente, di attivare il NameNode stanby come
NameNode principale.
I DataNode comunicano tra di loro per bilanciare i dati,spostare delle
copie o per mantenere delle repliche dei dati.
19
HDFS - Data Replication
L’HDFS `e progettato per memorizzare e gestire molti grandi file.
Ogni file `e scomposto in blocchi, ciascuno dei quali `e memorizzato in un
DataNode; per fault tolerance i blocchi sono replicati.
La replica su macchine fisiche differenti incrementa la localit`a dei dati e
migliora l’efficienza dell’esecuzione MapReduce.
20
HDFS - Scrittura di un file (1)
Quando un client chiede di scrivere un file sull’HDFS esso viene
memorizzato in una cache temporanea (in maniera trasparente), se tale
file supera una certa grandezza allora viene contattato il NameNode, che
alloca un blocco di dati e lo inserisce nella gerarchia del file system.
Il NameNode risponde al client restituendogli l’identit`a (id) del
DataNode e il datablock di destinazione su cui viene memorizzato il
contenuto del file temporaneo; infine viene svuotata la cache.
21
HDFS - Scrittura di un file (2)
22
HDFS - Replication Pipelining
Quando si scrive un file sull’HDFS il NameNode decide il DataNode su
cui memorizzare il blocco (prima replica), tale DataNode invia una copia
al prossimo nodo (seconda replica) e cos`ı via.
In tal modo ogni DataNode `e pipeline al nodo successivo.
23
HDFS - Lettura di un file
Quando un client vuole leggere un file, contatta il NameNode
richiedendo lo specifico file; il NameNode restituisce le informazioni sui
datablocks e la posizione dei DataNodes.
Il client, grazie alle informazioni passate dal NameNode, unisce i singoli
blocchi per ricostruire il file.
24
HDFS - Many small file
Uno small file `e un file di dimensioni molto pi`u piccole rispetto alle
dimensioni di un blocco dell’HDFS, questo significa che ogni small file `e
inviato ad un map task.
25
HDFS - Many small file
Uno small file `e un file di dimensioni molto pi`u piccole rispetto alle
dimensioni di un blocco dell’HDFS, questo significa che ogni small file `e
inviato ad un map task.
Il NameNode salva in memoria le informazioni per ogni file; avere molti
small file comporta un overhead per esso.
25
HDFS - Many small file
Uno small file `e un file di dimensioni molto pi`u piccole rispetto alle
dimensioni di un blocco dell’HDFS, questo significa che ogni small file `e
inviato ad un map task.
Il NameNode salva in memoria le informazioni per ogni file; avere molti
small file comporta un overhead per esso.
SOLUZIONE: Si adopera un container per raggruppare tutti i file in un
unico file pi`u grande.
25
Hadoop v2.x
Hadoop v2.x (1)
Hadoop v2.x `e composto da miglioramenti applicati alle release stabili di
Hadoop v1.x.
II principali cambiamenti riguardano:
• YARN ( Yet Another Resource Negotiator ), un nuovo sistema di
runtime MapReduce (ma non il SOLO!) ed un gestore di risorse
distribuite.
• HDFS Federation, partiziona l’HDFS namespace in pi`u NameNode
per poter usare un cluster con molti pi`u file.
• NameNode High-availability, risolve eventuali failure attivando un
NameNode che `e in standby per failover.
27
Hadoop v2.x - Componenti principali (1)
Le principali componenti sono:
• Global Resource Manager (RM) che gestisce l’assegnamento
globale delle risorse di calcolo alle applicazioni;
• Application Master (AM) gestisce l’applicazione, lo scheduling e
l’esecuzione dei task; ogni applicazione ha il suo AM.
• Container che rappresenta una risorsa allocata nel cluster ed `e
sempre assegnato ad un singolo job.
• NodeManager, (uno per ogni nodo) si occupa di gestire la
computazione sul singolo nodo, mantiene informato il
ResourceManager sulle sue attivit`a e inoltre `e responsabile per i
Container e per il monitoraggio delle risorse usate (cpu, memoria,
disco e rete) da quel nodo.
Per applicazione si intende o un singolo job o un DAG dei job.
28
Hadoop v2.x - Componenti principali (2)
29
Hadoop MapReduce
Come gi`a detto in precedenza, Hadoop `e un framework per l’elaborazione
distribuita di BigData tramite il modello di programmazione MapReduce.
30
Hadoop MapReduce - Splitter (1)
Lo Splitter `e quella componente che ha il compito di prendere l’intero
input e di dividerlo in InputSplits, che verranno poi inviati ai vari map
task.
31
Hadoop MapReduce - Splitter (1)
Lo Splitter `e quella componente che ha il compito di prendere l’intero
input e di dividerlo in InputSplits, che verranno poi inviati ai vari map
task.
La mappatura < K, V > degli InputSplits viene definita dalla classe
InputFormats implementata.
31
Hadoop MapReduce - Splitter (1)
Lo Splitter `e quella componente che ha il compito di prendere l’intero
input e di dividerlo in InputSplits, che verranno poi inviati ai vari map
task.
La mappatura < K, V > degli InputSplits viene definita dalla classe
InputFormats implementata.
31
Hadoop MapReduce - Splitter (2)
Hadoop mette a disposizione diverse implementazioni di InputFormat, tra
cui:
Classe Descrizione
TextInputFormat
Ogni linea `e un record
K1: Offset
V1: Testo
KeyValueTextInputFormat
Ogni linea `e un record
K1: Testo prima di un delimitatore
V1: Testo dopo il delimitatore
SequenceFileInputFormat<K,V>
Utilizzato per record binari
K1: Input di taglia K
V1: Input di taglia V
NLineInputFormat
Ogni linea `e un record
K1: Offset
V1: Testo 32
Hadoop MapReduce - Splitter (2)
Qui `e possibile prendere visione della gerarchia delle classi degli
InputFormat messi a disposizione dal framework:
`E possibile, ovviamente, definire un proprio InputFormat da utilizzare
durante la computazione implementando l’interfaccia InputFormat.
33
Hadoop MapReduce - Splitter (3)
Attenzione!
Non bisgona confondere l’InputSplit con il blocco utilizzato dall’HDFS. I due
”blocchi” non necessariamente corrispondono.
Possono infatti verificarsi dei casi in cui l’InputSplit utilizza dati presenti in pi`u
blocchi, causando un leggero overhead del sistema.
34
Hadoop MapReduce (2)
35
HadoopMapReduce - Partitioners and Combiners (1)
Quella vista fino ad ora `e la parte funzionale del modello presentato da
Google, eccezion fatta per lo Splitter.
36
HadoopMapReduce - Partitioners and Combiners (1)
Quella vista fino ad ora `e la parte funzionale del modello presentato da
Google, eccezion fatta per lo Splitter.
´E necessario introdurre due elementi addizionali, propri di Hadoop, senza
i quali tutto il framework potrebbe non funzionare o risultare comunque
poco efficente:
36
HadoopMapReduce - Partitioners and Combiners (1)
Quella vista fino ad ora `e la parte funzionale del modello presentato da
Google, eccezion fatta per lo Splitter.
´E necessario introdurre due elementi addizionali, propri di Hadoop, senza
i quali tutto il framework potrebbe non funzionare o risultare comunque
poco efficente:
• Partitioners;
36
HadoopMapReduce - Partitioners and Combiners (1)
Quella vista fino ad ora `e la parte funzionale del modello presentato da
Google, eccezion fatta per lo Splitter.
´E necessario introdurre due elementi addizionali, propri di Hadoop, senza
i quali tutto il framework potrebbe non funzionare o risultare comunque
poco efficente:
• Partitioners;
• Combiners.
36
HadoopMapReduce - Partitioners and Combiners (2)
• Partitioners: responsabili di dividere le coppie < K, V > intermedie
generati dai MapTasks ai vari Reducers per la funzione di Reduce.
Per dividere in maniera equa i compiti ai Reducers i partitioners
usano una funzione di hash sulla chiave:
reducer = hash(K) mod n.
37
HadoopMapReduce - Partitioners and Combiners (2)
• Partitioners: responsabili di dividere le coppie < K, V > intermedie
generati dai MapTasks ai vari Reducers per la funzione di Reduce.
Per dividere in maniera equa i compiti ai Reducers i partitioners
usano una funzione di hash sulla chiave:
reducer = hash(K) mod n.
• Combiners: un’ottimizzazione di Hadoop rispetto a MapReduce in
quanto permettono di aggregare LOCALMENTE prima della fasi di
shuffle e sorting.
37
HadoopMapReduce - Partitioners and Combiners (3)
38
Hadoop MapReduce (4)
Possiamo riassumere un’esecuzione di MapReduce in:
39
Hadoop MapReduce (4)
Possiamo riassumere un’esecuzione di MapReduce in:
1. Lettura dei dati;
39
Hadoop MapReduce (4)
Possiamo riassumere un’esecuzione di MapReduce in:
1. Lettura dei dati;
2. InputSplitting;
39
Hadoop MapReduce (4)
Possiamo riassumere un’esecuzione di MapReduce in:
1. Lettura dei dati;
2. InputSplitting;
3. Mapping;
39
Hadoop MapReduce (4)
Possiamo riassumere un’esecuzione di MapReduce in:
1. Lettura dei dati;
2. InputSplitting;
3. Mapping;
4. Combining;
39
Hadoop MapReduce (4)
Possiamo riassumere un’esecuzione di MapReduce in:
1. Lettura dei dati;
2. InputSplitting;
3. Mapping;
4. Combining;
5. Partitioning, Shuffling and Sorting;
39
Hadoop MapReduce (4)
Possiamo riassumere un’esecuzione di MapReduce in:
1. Lettura dei dati;
2. InputSplitting;
3. Mapping;
4. Combining;
5. Partitioning, Shuffling and Sorting;
6. Reducing.
39
WordCount Distribuito
Esempio: WordCount - Mapper SourceCode
1 p u b l i c s t a t i c c l a s s TokenizerMapper
2 extends Mapper<Object , Text , Text , I n t W r i t a b l e>{
3 p r i v a t e f i n a l s t a t i c I n t W r i t a b l e one = new I n t W r i t a b l e (1) ;
4 p r i v a t e Text word = new Text () ;
5 p u b l i c void map( Object key , Text value , Context context
6 ) throws IOException , I n t e r r u p t e d E x c e p t i o n {
7 S t r i n g T o k e n i z e r i t r = new S t r i n g T o k e n i z e r ( v a l u e . t o S t r i n g () ) ;
8 w h i l e ( i t r . hasMoreTokens () ) {
9 word . s e t ( i t r . nextToken () ) ;
10 context . w r i t e ( word , one ) ;
11 }
12 }
13 }
La classe Mapper.
41
Esempio: WordCount - Reducer SourceCode
1 p u b l i c s t a t i c c l a s s IntSumReducer
2 extends Reducer<Text , I n t W r i t a b l e , Text , I n t W r i t a b l e> {
3 p r i v a t e I n t W r i t a b l e r e s u l t = new I n t W r i t a b l e () ;
4
5 p u b l i c void reduce ( Text key , I t e r a b l e<I n t W r i t a b l e> values , Context context )
6 throws IOException , I n t e r r u p t e d E x c e p t i o n {
7 i n t sum = 0;
8 f o r ( I n t W r i t a b l e v a l : v a l u e s ) {
9 sum += v a l . get () ;
10 }
11 r e s u l t . s e t (sum) ;
12 context . w r i t e ( key , r e s u l t ) ;
13 }
La classe Reducer.
42
Esempio: WordCount - Main SourceCode
1 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) throws Exception {
2 C o n f i g u r a t i o n conf = new C o n f i g u r a t i o n () ;
3 Job job = Job . g e t I n s t a n c e ( conf , ”word count ” ) ;
4 job . s e t J a r B y C l a s s ( WordCount . c l a s s ) ;
5 job . setMapperClass ( TokenizerMapper . c l a s s ) ;
6 job . setCombinerClass ( IntSumReducer . c l a s s ) ;
7 job . s e t R e d u c e r C l a s s ( IntSumReducer . c l a s s ) ;
8 job . setOutputKeyClass ( Text . c l a s s ) ;
9 job . setOutputValueClass ( I n t W r i t a b l e . c l a s s ) ;
10 F il e In p u tF o r ma t . addInputPath ( job , new Path ( args [ 0 ] ) ) ;
11 FileOutputFormat . setOutputPath ( job , new Path ( args [ 1 ] ) ) ;
12 System . e x i t ( job . waitForCompletion ( t r u e ) ? 0 : 1) ;
13 }
14
Main method.
43
Prestazioni
Prestazioni
Per misurare le prestazioni usiamo:
• Speedup che misura l’incremento delle prestazioni all’aumentare dei
processori:
S(n) = Timeseq/TimeHad(n)
dove:
• Timeseq `e il tempo di esecuzione di un’implementazione sequenziale
• TimeHad(n) `e il tempo di esecuzione di un’implementazione
distribuita che utilizza n slaves.
• Efficienza che esprime la capacit`a di sfruttare la potenza di calcolo:
E(n) = S(n)/n
dove:
• S(n) `e lo speedup
• n `e il numero di slaves(core) che eseguono i task Hadoop.
45
Hadoop in action!
Comandi utili
• start-dfs.sh //Avvio di HDFS (NameNode, DataNode)
• stop-dfs.sh //Arresto HDFS
• start-yarn.sh //Avvio del ResourceManager
• stop-yarn.sh //Arrwto del ResourceManager
• mr-jobhistory-daemon.sh start historyserver //Avvio de
JobHistoryServer
• mr-jobhistory-daemon.sh stop historyserver //Arresto del
JobHistoryServer
• hdfs dfs -mkdir -p . //Creazione della cartella radice nell’HDFS
• hdfs dfs -rm <-r> Rimuove file <cartelle>dall’HDFS
• hdfs dfs -ls -l Visualizzazione del contenuto dell’HDFS
47
Grazie per l’attenzione!
48
Riferimenti
Riferimenti
Apache Hadoop
http : //hadoop.apache.org/
https : //hadoop.apache.org/docs/r1.2.1/mapredtutorial.html
http : //hadoop.apache.org/docs/r2.5.1/index.html
MapReduce: Simplifed Data Processing on Large Clusters Dean, J.
and Ghemawat, S. Communication of ACM 51, 1 (Jan. 2008), 107-113
The Hadoop Distributed File System Shvachko, Konstantin et al.
2010 IEEE 26th Symposium on Mass Storage Systems and Technologies
(MSST)
Pro Hadoop Jason Venner - Copyright c 2009 by Jason Venner -
ISBN:978-1-4302-1942-2
50
Riferimenti
Data-Intensive Text Processing with MapReduce Jimmy Lin and
Chris Dyer - University of Maryland, College Park - Manuscript prepared
April 11, 2010
Slide Ph.D. Roscigno Gianluca Dipartimento di Informatica -
Universit`a degli Studi di Salerno, I-84084, Fisciano (SA), Italy
giroscigno@unisa.it
51

More Related Content

What's hot

Presentazione Emc Data Domain Remota
Presentazione Emc Data Domain RemotaPresentazione Emc Data Domain Remota
Presentazione Emc Data Domain Remota
modestini
 
PostgreSQL: Archtettura per la gestione dei pro
PostgreSQL: Archtettura per la gestione dei proPostgreSQL: Archtettura per la gestione dei pro
PostgreSQL: Archtettura per la gestione dei pro
Enrico Pirozzi
 
Architettura dei Calcolatori 11 Cache
Architettura dei Calcolatori 11 CacheArchitettura dei Calcolatori 11 Cache
Architettura dei Calcolatori 11 Cache
Majong DevJfu
 

What's hot (18)

Summary of "NebulOS: A Big Data framework for astrophysics"
Summary of "NebulOS: A Big Data framework for astrophysics"Summary of "NebulOS: A Big Data framework for astrophysics"
Summary of "NebulOS: A Big Data framework for astrophysics"
 
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL ClusterMySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
 
Oltre il modello relazionale
Oltre il modello relazionaleOltre il modello relazionale
Oltre il modello relazionale
 
PostgreSQL: Prima configurazione
PostgreSQL: Prima configurazionePostgreSQL: Prima configurazione
PostgreSQL: Prima configurazione
 
JBoss Data Grid Tech Lab
JBoss Data Grid Tech LabJBoss Data Grid Tech Lab
JBoss Data Grid Tech Lab
 
Glusterfs: un filesystem altamente versatile
Glusterfs: un filesystem altamente versatileGlusterfs: un filesystem altamente versatile
Glusterfs: un filesystem altamente versatile
 
Presentazione Emc Data Domain Remota
Presentazione Emc Data Domain RemotaPresentazione Emc Data Domain Remota
Presentazione Emc Data Domain Remota
 
MapReduce: Simplified Data Processing on Large Clusters
MapReduce: Simplified Data Processing on Large ClustersMapReduce: Simplified Data Processing on Large Clusters
MapReduce: Simplified Data Processing on Large Clusters
 
Le novità di Domino 8.5 - lato Admin
Le novità di Domino 8.5 - lato AdminLe novità di Domino 8.5 - lato Admin
Le novità di Domino 8.5 - lato Admin
 
Soluzioni distribuite per l’analisi di dati biomedici in ambiente Virtual Dat...
Soluzioni distribuite per l’analisi di dati biomedici in ambiente Virtual Dat...Soluzioni distribuite per l’analisi di dati biomedici in ambiente Virtual Dat...
Soluzioni distribuite per l’analisi di dati biomedici in ambiente Virtual Dat...
 
Data grid
Data gridData grid
Data grid
 
PostgreSQL: Archtettura per la gestione dei pro
PostgreSQL: Archtettura per la gestione dei proPostgreSQL: Archtettura per la gestione dei pro
PostgreSQL: Archtettura per la gestione dei pro
 
Openday - PostgreSQL: primi passi con Json/Jsonb
Openday - PostgreSQL: primi passi con Json/Jsonb Openday - PostgreSQL: primi passi con Json/Jsonb
Openday - PostgreSQL: primi passi con Json/Jsonb
 
Architettura dei Calcolatori 11 Cache
Architettura dei Calcolatori 11 CacheArchitettura dei Calcolatori 11 Cache
Architettura dei Calcolatori 11 Cache
 
Gnutella Italian Printable
Gnutella Italian PrintableGnutella Italian Printable
Gnutella Italian Printable
 
Iaa s con openstack per l'analisi di bigdata
Iaa s con openstack per l'analisi di bigdataIaa s con openstack per l'analisi di bigdata
Iaa s con openstack per l'analisi di bigdata
 
Telegraph Cq Italian
Telegraph Cq ItalianTelegraph Cq Italian
Telegraph Cq Italian
 
E2 File
E2 FileE2 File
E2 File
 

Viewers also liked

Viewers also liked (6)

FantaGAD
FantaGAD FantaGAD
FantaGAD
 
Google File System - GFS
Google File System - GFSGoogle File System - GFS
Google File System - GFS
 
5. суша
5. суша5. суша
5. суша
 
Regular Model Checking - Verifica di Sistemi Parametrici
Regular Model Checking - Verifica di Sistemi ParametriciRegular Model Checking - Verifica di Sistemi Parametrici
Regular Model Checking - Verifica di Sistemi Parametrici
 
Information Gathering
Information GatheringInformation Gathering
Information Gathering
 
Le fasi di un Penetration testing
Le fasi di un Penetration testingLe fasi di un Penetration testing
Le fasi di un Penetration testing
 

Similar to Hadoop in action!

Similar to Hadoop in action! (20)

Appunti di big data
Appunti di big dataAppunti di big data
Appunti di big data
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]
 
Hadoop SAR
Hadoop SARHadoop SAR
Hadoop SAR
 
Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...
Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...
Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...
 
Big data stack tecnologico
Big data stack tecnologicoBig data stack tecnologico
Big data stack tecnologico
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
 
Evoluzioni architetturali a partire da Hadoop
Evoluzioni architetturali a partire da HadoopEvoluzioni architetturali a partire da Hadoop
Evoluzioni architetturali a partire da Hadoop
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
 
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
 
Google Dev Fest 2016 - Roma
Google Dev Fest 2016 - RomaGoogle Dev Fest 2016 - Roma
Google Dev Fest 2016 - Roma
 
Introduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big DataIntroduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big Data
 
Introduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastoreIntroduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastore
 
MongoDB
MongoDBMongoDB
MongoDB
 
DbUp - A real case of database migration
DbUp - A real case of database migrationDbUp - A real case of database migration
DbUp - A real case of database migration
 
SQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with SparkSQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with Spark
 
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native modernoDrupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
 
Alla scoperta dei Vector Database e dei RAG
Alla scoperta dei Vector Database e dei RAGAlla scoperta dei Vector Database e dei RAG
Alla scoperta dei Vector Database e dei RAG
 
Database Data Aggregator
Database Data AggregatorDatabase Data Aggregator
Database Data Aggregator
 
Erlug
ErlugErlug
Erlug
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 

Hadoop in action!

  • 1. Hadoop in action Gabriele Lombari - Alessandra Zullo Sistemi Operativi Avanzati - Giuseppe Cattaneo April 21, 2016 Universit`a degli Studi di Salerno
  • 2. Table of contents 1. Esempio: WordCount 2. Apache Hadoop & MapReduce 3. Hadoop Distributed File System 4. Hadoop v2.x 5. WordCount Distribuito 6. Prestazioni 7. Hadoop in action! 8. Riferimenti 2
  • 4. Esempio: WordCount (1) Immaginiamo di avere un grande DataSet di parole {web, weed, green, sun, moon, land, part, web, green ...} di cui volgiamo contare il numero di occorrenze. 4
  • 5. Esempio: WordCount - Sequential Code 1 2 p u b l i c c l a s s SequentialWordCount { 3 4 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) throws Exception { 5 6 F i l e I n p u t S t r e a m fstream = new F i l e I n p u t S t r e a m ( ”BIG FILE 8GB . t x t ” ) ; 7 DataInputStream i n = new DataInputStream ( fstream ) ; 8 BufferedReader br = new BufferedReader ( new InputStreamReader ( i n ) ) ; 9 10 HashMap<String , I n t e g e r> map = new HashMap<>(); 11 12 S t r i n g word ; 13 w h i l e (( word = br . re adL in e () ) != n u l l ){ 14 15 S t r i n g T o k e n i z e r t o k e n i z e r = new S t r i n g T o k e n i z e r ( word , ” tnrf . , ; : ’ ” ” ) ; 16 17 w h i l e ( t o k e n i z e r . hasMoreTokens () ) { 18 S t r i n g word now = t o k e n i z e r . nextToken () ; 19 I n t e g e r count = map . get ( word now ) ; 20 21 map . put ( word now , count == n u l l ? 1 : ++count ) ; 22 } 23 } 24 25 f o r ( Entry<String , I n t e g e r> e n t r y : map . e n t r y S e t () ) System . out . p r i n t l n ( e n t r y . getKey () + ” : ” + e n t r y . getValue () ) ; 26 } 27 28 } 5
  • 6. Esempio: WordCount - MapReduce execution Un esempio di come il problema WordCount viene risolto in un’esecuzione su ambiente MapReduce. 6
  • 7. Apache Hadoop & MapReduce
  • 8. Un po’ di storia La genesi di Apache Hadoop ha avuto inizio quando Google presenta, nell’Ottobre del 2003, The Google File System e, poi nel Dicembre 2004, MapReduce: Simplified Data Processing on Large Clusters. Lo sviluppo del framework inizia con il progetto Nutch, divenuto presto a far parte del progetto Apache Lucene. Nel 2005 Yahoo! entra a far parte del progetto Nutch decretando cos`ı l’inizio di Hadoop. 8
  • 9. Un po’ di storia Il progetto fu supervisionato da Doug Cutting e Michael J. Cafarella Il nome Hadoop fu coniato dal nome del pupazzo del figlio di Cutting. 9
  • 10. Introduzione Apache Hadoop `e un framework per l’elaborazione distribuita di grandi insiemi di dati(Big Data) che usa il modello di programmazione MapReduce. 10
  • 11. MapReduce (1) Il modello computazionale proposto da Google nel 2004 prevedeva che gli utenti dovessero comporre la loro logica di elaborazione basandosi su due soli step: 11
  • 12. MapReduce (1) Il modello computazionale proposto da Google nel 2004 prevedeva che gli utenti dovessero comporre la loro logica di elaborazione basandosi su due soli step: • Map, il quale prende in input una coppia < K, V > e restituisce una lista di coppie < K , V >, intermedie; 11
  • 13. MapReduce (1) Il modello computazionale proposto da Google nel 2004 prevedeva che gli utenti dovessero comporre la loro logica di elaborazione basandosi su due soli step: • Map, il quale prende in input una coppia < K, V > e restituisce una lista di coppie < K , V >, intermedie; • Reduce, il quale prende in input una lista di coppie < K , V >, aventi la stessa K, e restituisce in output una coppia < K , V >. 11
  • 14. MapReduce (1) Il modello computazionale proposto da Google nel 2004 prevedeva che gli utenti dovessero comporre la loro logica di elaborazione basandosi su due soli step: • Map, il quale prende in input una coppia < K, V > e restituisce una lista di coppie < K , V >, intermedie; • Reduce, il quale prende in input una lista di coppie < K , V >, aventi la stessa K, e restituisce in output una coppia < K , V >. Ci`o permette una grande parallelizzazione in grado di sfruttare al meglio le nostre CPU, eliminando qualsiasi difficolt`a al programmatore. 11
  • 15. MapReduce (2) Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il codice per le operazioni di Map e Reduce, sar`a compito del framework rendere parallela la computazione in maniera del tutto trasparente. 12
  • 16. MapReduce (2) Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il codice per le operazioni di Map e Reduce, sar`a compito del framework rendere parallela la computazione in maniera del tutto trasparente. In particolare il framework si occupa di: 12
  • 17. MapReduce (2) Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il codice per le operazioni di Map e Reduce, sar`a compito del framework rendere parallela la computazione in maniera del tutto trasparente. In particolare il framework si occupa di: • Scheduling; 12
  • 18. MapReduce (2) Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il codice per le operazioni di Map e Reduce, sar`a compito del framework rendere parallela la computazione in maniera del tutto trasparente. In particolare il framework si occupa di: • Scheduling; • Data/code co-location; 12
  • 19. MapReduce (2) Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il codice per le operazioni di Map e Reduce, sar`a compito del framework rendere parallela la computazione in maniera del tutto trasparente. In particolare il framework si occupa di: • Scheduling; • Data/code co-location; • Synchronization; 12
  • 20. MapReduce (2) Al programmatore, quindi, verr`a lasciato solo il compito di scrivere il codice per le operazioni di Map e Reduce, sar`a compito del framework rendere parallela la computazione in maniera del tutto trasparente. In particolare il framework si occupa di: • Scheduling; • Data/code co-location; • Synchronization; • Error and fault handling. 12
  • 21. Apache Hadoop Hadoop `e formato principalmente da 4 macro-progetti: • Hadoop Common: librerie di base per la corretta esecuzione del framework; • Hadoop Distributed File System (HDFS): file system distribuito che fornisce un accesso veloce ai dati; • Hadoop Yet Another Resource Negotiator (YARN): sistema per la pianificazione dei processi e la gestione delle risorse del cluster. • Hadoop MapReduce: sistema per l’elaborazione parallela dei BigData; 13
  • 23. Hadoop Distributed File System - HDFS (1) HDFS, acronimo di Hadoop Distributed File System, `e il file system distribuito di Hadoop. File system distribuito (DFS): particolare file system che permette la memorizzazione di file e risorse in dispositivi di archiviazione distribuiti in rete, resi disponibili attraverso un meccanismo client-server tra dispositivi remoti. 15
  • 24. Hadoop Distributed File System - HDFS (2) HDFS `e un file system strutturato a blocchi;i file sono suddivisi in blocchi di dimensioni fisse, non necessariamente memorizzati sulla stessa macchina. 16
  • 25. Hadoop Distributed File System - HDFS (2) HDFS `e un file system strutturato a blocchi;i file sono suddivisi in blocchi di dimensioni fisse, non necessariamente memorizzati sulla stessa macchina. Le dimensioni sono di 64MB per Hadoop v1.x e 128MB per Hadoop v2.x. 16
  • 26. Hadoop Distributed File System - HDFS (2) HDFS `e un file system strutturato a blocchi;i file sono suddivisi in blocchi di dimensioni fisse, non necessariamente memorizzati sulla stessa macchina. Le dimensioni sono di 64MB per Hadoop v1.x e 128MB per Hadoop v2.x. HDFS non pu`o essere montato direttamente sul SO esistente, per tale motivo bisogna spostare i file prima e dopo l’esecuzione di un job. 16
  • 27. Hadoop Distributed File System - HDFS (2) HDFS `e un file system strutturato a blocchi;i file sono suddivisi in blocchi di dimensioni fisse, non necessariamente memorizzati sulla stessa macchina. Le dimensioni sono di 64MB per Hadoop v1.x e 128MB per Hadoop v2.x. HDFS non pu`o essere montato direttamente sul SO esistente, per tale motivo bisogna spostare i file prima e dopo l’esecuzione di un job. HDFS prevede un modulo che permette alle applicazioni di spostarsi vicino ai dati in modo da minimizzare la congestione della rete e incrementare il throughput del sistema. 16
  • 28. HDFS - Architettura (1) HDFS ha un’architettura master/slaves. Master e slave sono indicati con il nome dei daemons che forniscono il rispettivo servizio; con Namenode indichiamo il master e con Datanode indichiamo gli slaves. 17
  • 29. HDFS - Architettura(2) In dettaglio: • master (uno): tiene traccia del file namespace (metadati che contengono informazioni circa il file, la struttura delle directory di tutti i file presenti sull’HDFS,la posizione dei blocchi e i permessi di accesso); • slaves (molti): effettua il reale calcolo computazionale; memorizza e recupera i blocchi quando richiesto (dal client o dal master), e comunica periodicamente al master la lista dei blocchi da esso memorizzati. . 18
  • 30. HDFS - Architettura(3) `E importante sottolineare che un failure del Namenode causerebbe un fault di tutto il sistema. Tale problema `e stato risolto in Hadoop v2.x con l’aggiunta del modulo Hadoop HA in cui vi `e una coppia di NameNode (active e standby); nel caso in cui si verifica una failure sul NameNode active Hadoop HA si occupa, in maniera trasparente, di attivare il NameNode stanby come NameNode principale. I DataNode comunicano tra di loro per bilanciare i dati,spostare delle copie o per mantenere delle repliche dei dati. 19
  • 31. HDFS - Data Replication L’HDFS `e progettato per memorizzare e gestire molti grandi file. Ogni file `e scomposto in blocchi, ciascuno dei quali `e memorizzato in un DataNode; per fault tolerance i blocchi sono replicati. La replica su macchine fisiche differenti incrementa la localit`a dei dati e migliora l’efficienza dell’esecuzione MapReduce. 20
  • 32. HDFS - Scrittura di un file (1) Quando un client chiede di scrivere un file sull’HDFS esso viene memorizzato in una cache temporanea (in maniera trasparente), se tale file supera una certa grandezza allora viene contattato il NameNode, che alloca un blocco di dati e lo inserisce nella gerarchia del file system. Il NameNode risponde al client restituendogli l’identit`a (id) del DataNode e il datablock di destinazione su cui viene memorizzato il contenuto del file temporaneo; infine viene svuotata la cache. 21
  • 33. HDFS - Scrittura di un file (2) 22
  • 34. HDFS - Replication Pipelining Quando si scrive un file sull’HDFS il NameNode decide il DataNode su cui memorizzare il blocco (prima replica), tale DataNode invia una copia al prossimo nodo (seconda replica) e cos`ı via. In tal modo ogni DataNode `e pipeline al nodo successivo. 23
  • 35. HDFS - Lettura di un file Quando un client vuole leggere un file, contatta il NameNode richiedendo lo specifico file; il NameNode restituisce le informazioni sui datablocks e la posizione dei DataNodes. Il client, grazie alle informazioni passate dal NameNode, unisce i singoli blocchi per ricostruire il file. 24
  • 36. HDFS - Many small file Uno small file `e un file di dimensioni molto pi`u piccole rispetto alle dimensioni di un blocco dell’HDFS, questo significa che ogni small file `e inviato ad un map task. 25
  • 37. HDFS - Many small file Uno small file `e un file di dimensioni molto pi`u piccole rispetto alle dimensioni di un blocco dell’HDFS, questo significa che ogni small file `e inviato ad un map task. Il NameNode salva in memoria le informazioni per ogni file; avere molti small file comporta un overhead per esso. 25
  • 38. HDFS - Many small file Uno small file `e un file di dimensioni molto pi`u piccole rispetto alle dimensioni di un blocco dell’HDFS, questo significa che ogni small file `e inviato ad un map task. Il NameNode salva in memoria le informazioni per ogni file; avere molti small file comporta un overhead per esso. SOLUZIONE: Si adopera un container per raggruppare tutti i file in un unico file pi`u grande. 25
  • 40. Hadoop v2.x (1) Hadoop v2.x `e composto da miglioramenti applicati alle release stabili di Hadoop v1.x. II principali cambiamenti riguardano: • YARN ( Yet Another Resource Negotiator ), un nuovo sistema di runtime MapReduce (ma non il SOLO!) ed un gestore di risorse distribuite. • HDFS Federation, partiziona l’HDFS namespace in pi`u NameNode per poter usare un cluster con molti pi`u file. • NameNode High-availability, risolve eventuali failure attivando un NameNode che `e in standby per failover. 27
  • 41. Hadoop v2.x - Componenti principali (1) Le principali componenti sono: • Global Resource Manager (RM) che gestisce l’assegnamento globale delle risorse di calcolo alle applicazioni; • Application Master (AM) gestisce l’applicazione, lo scheduling e l’esecuzione dei task; ogni applicazione ha il suo AM. • Container che rappresenta una risorsa allocata nel cluster ed `e sempre assegnato ad un singolo job. • NodeManager, (uno per ogni nodo) si occupa di gestire la computazione sul singolo nodo, mantiene informato il ResourceManager sulle sue attivit`a e inoltre `e responsabile per i Container e per il monitoraggio delle risorse usate (cpu, memoria, disco e rete) da quel nodo. Per applicazione si intende o un singolo job o un DAG dei job. 28
  • 42. Hadoop v2.x - Componenti principali (2) 29
  • 43. Hadoop MapReduce Come gi`a detto in precedenza, Hadoop `e un framework per l’elaborazione distribuita di BigData tramite il modello di programmazione MapReduce. 30
  • 44. Hadoop MapReduce - Splitter (1) Lo Splitter `e quella componente che ha il compito di prendere l’intero input e di dividerlo in InputSplits, che verranno poi inviati ai vari map task. 31
  • 45. Hadoop MapReduce - Splitter (1) Lo Splitter `e quella componente che ha il compito di prendere l’intero input e di dividerlo in InputSplits, che verranno poi inviati ai vari map task. La mappatura < K, V > degli InputSplits viene definita dalla classe InputFormats implementata. 31
  • 46. Hadoop MapReduce - Splitter (1) Lo Splitter `e quella componente che ha il compito di prendere l’intero input e di dividerlo in InputSplits, che verranno poi inviati ai vari map task. La mappatura < K, V > degli InputSplits viene definita dalla classe InputFormats implementata. 31
  • 47. Hadoop MapReduce - Splitter (2) Hadoop mette a disposizione diverse implementazioni di InputFormat, tra cui: Classe Descrizione TextInputFormat Ogni linea `e un record K1: Offset V1: Testo KeyValueTextInputFormat Ogni linea `e un record K1: Testo prima di un delimitatore V1: Testo dopo il delimitatore SequenceFileInputFormat<K,V> Utilizzato per record binari K1: Input di taglia K V1: Input di taglia V NLineInputFormat Ogni linea `e un record K1: Offset V1: Testo 32
  • 48. Hadoop MapReduce - Splitter (2) Qui `e possibile prendere visione della gerarchia delle classi degli InputFormat messi a disposizione dal framework: `E possibile, ovviamente, definire un proprio InputFormat da utilizzare durante la computazione implementando l’interfaccia InputFormat. 33
  • 49. Hadoop MapReduce - Splitter (3) Attenzione! Non bisgona confondere l’InputSplit con il blocco utilizzato dall’HDFS. I due ”blocchi” non necessariamente corrispondono. Possono infatti verificarsi dei casi in cui l’InputSplit utilizza dati presenti in pi`u blocchi, causando un leggero overhead del sistema. 34
  • 51. HadoopMapReduce - Partitioners and Combiners (1) Quella vista fino ad ora `e la parte funzionale del modello presentato da Google, eccezion fatta per lo Splitter. 36
  • 52. HadoopMapReduce - Partitioners and Combiners (1) Quella vista fino ad ora `e la parte funzionale del modello presentato da Google, eccezion fatta per lo Splitter. ´E necessario introdurre due elementi addizionali, propri di Hadoop, senza i quali tutto il framework potrebbe non funzionare o risultare comunque poco efficente: 36
  • 53. HadoopMapReduce - Partitioners and Combiners (1) Quella vista fino ad ora `e la parte funzionale del modello presentato da Google, eccezion fatta per lo Splitter. ´E necessario introdurre due elementi addizionali, propri di Hadoop, senza i quali tutto il framework potrebbe non funzionare o risultare comunque poco efficente: • Partitioners; 36
  • 54. HadoopMapReduce - Partitioners and Combiners (1) Quella vista fino ad ora `e la parte funzionale del modello presentato da Google, eccezion fatta per lo Splitter. ´E necessario introdurre due elementi addizionali, propri di Hadoop, senza i quali tutto il framework potrebbe non funzionare o risultare comunque poco efficente: • Partitioners; • Combiners. 36
  • 55. HadoopMapReduce - Partitioners and Combiners (2) • Partitioners: responsabili di dividere le coppie < K, V > intermedie generati dai MapTasks ai vari Reducers per la funzione di Reduce. Per dividere in maniera equa i compiti ai Reducers i partitioners usano una funzione di hash sulla chiave: reducer = hash(K) mod n. 37
  • 56. HadoopMapReduce - Partitioners and Combiners (2) • Partitioners: responsabili di dividere le coppie < K, V > intermedie generati dai MapTasks ai vari Reducers per la funzione di Reduce. Per dividere in maniera equa i compiti ai Reducers i partitioners usano una funzione di hash sulla chiave: reducer = hash(K) mod n. • Combiners: un’ottimizzazione di Hadoop rispetto a MapReduce in quanto permettono di aggregare LOCALMENTE prima della fasi di shuffle e sorting. 37
  • 57. HadoopMapReduce - Partitioners and Combiners (3) 38
  • 58. Hadoop MapReduce (4) Possiamo riassumere un’esecuzione di MapReduce in: 39
  • 59. Hadoop MapReduce (4) Possiamo riassumere un’esecuzione di MapReduce in: 1. Lettura dei dati; 39
  • 60. Hadoop MapReduce (4) Possiamo riassumere un’esecuzione di MapReduce in: 1. Lettura dei dati; 2. InputSplitting; 39
  • 61. Hadoop MapReduce (4) Possiamo riassumere un’esecuzione di MapReduce in: 1. Lettura dei dati; 2. InputSplitting; 3. Mapping; 39
  • 62. Hadoop MapReduce (4) Possiamo riassumere un’esecuzione di MapReduce in: 1. Lettura dei dati; 2. InputSplitting; 3. Mapping; 4. Combining; 39
  • 63. Hadoop MapReduce (4) Possiamo riassumere un’esecuzione di MapReduce in: 1. Lettura dei dati; 2. InputSplitting; 3. Mapping; 4. Combining; 5. Partitioning, Shuffling and Sorting; 39
  • 64. Hadoop MapReduce (4) Possiamo riassumere un’esecuzione di MapReduce in: 1. Lettura dei dati; 2. InputSplitting; 3. Mapping; 4. Combining; 5. Partitioning, Shuffling and Sorting; 6. Reducing. 39
  • 66. Esempio: WordCount - Mapper SourceCode 1 p u b l i c s t a t i c c l a s s TokenizerMapper 2 extends Mapper<Object , Text , Text , I n t W r i t a b l e>{ 3 p r i v a t e f i n a l s t a t i c I n t W r i t a b l e one = new I n t W r i t a b l e (1) ; 4 p r i v a t e Text word = new Text () ; 5 p u b l i c void map( Object key , Text value , Context context 6 ) throws IOException , I n t e r r u p t e d E x c e p t i o n { 7 S t r i n g T o k e n i z e r i t r = new S t r i n g T o k e n i z e r ( v a l u e . t o S t r i n g () ) ; 8 w h i l e ( i t r . hasMoreTokens () ) { 9 word . s e t ( i t r . nextToken () ) ; 10 context . w r i t e ( word , one ) ; 11 } 12 } 13 } La classe Mapper. 41
  • 67. Esempio: WordCount - Reducer SourceCode 1 p u b l i c s t a t i c c l a s s IntSumReducer 2 extends Reducer<Text , I n t W r i t a b l e , Text , I n t W r i t a b l e> { 3 p r i v a t e I n t W r i t a b l e r e s u l t = new I n t W r i t a b l e () ; 4 5 p u b l i c void reduce ( Text key , I t e r a b l e<I n t W r i t a b l e> values , Context context ) 6 throws IOException , I n t e r r u p t e d E x c e p t i o n { 7 i n t sum = 0; 8 f o r ( I n t W r i t a b l e v a l : v a l u e s ) { 9 sum += v a l . get () ; 10 } 11 r e s u l t . s e t (sum) ; 12 context . w r i t e ( key , r e s u l t ) ; 13 } La classe Reducer. 42
  • 68. Esempio: WordCount - Main SourceCode 1 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) throws Exception { 2 C o n f i g u r a t i o n conf = new C o n f i g u r a t i o n () ; 3 Job job = Job . g e t I n s t a n c e ( conf , ”word count ” ) ; 4 job . s e t J a r B y C l a s s ( WordCount . c l a s s ) ; 5 job . setMapperClass ( TokenizerMapper . c l a s s ) ; 6 job . setCombinerClass ( IntSumReducer . c l a s s ) ; 7 job . s e t R e d u c e r C l a s s ( IntSumReducer . c l a s s ) ; 8 job . setOutputKeyClass ( Text . c l a s s ) ; 9 job . setOutputValueClass ( I n t W r i t a b l e . c l a s s ) ; 10 F il e In p u tF o r ma t . addInputPath ( job , new Path ( args [ 0 ] ) ) ; 11 FileOutputFormat . setOutputPath ( job , new Path ( args [ 1 ] ) ) ; 12 System . e x i t ( job . waitForCompletion ( t r u e ) ? 0 : 1) ; 13 } 14 Main method. 43
  • 70. Prestazioni Per misurare le prestazioni usiamo: • Speedup che misura l’incremento delle prestazioni all’aumentare dei processori: S(n) = Timeseq/TimeHad(n) dove: • Timeseq `e il tempo di esecuzione di un’implementazione sequenziale • TimeHad(n) `e il tempo di esecuzione di un’implementazione distribuita che utilizza n slaves. • Efficienza che esprime la capacit`a di sfruttare la potenza di calcolo: E(n) = S(n)/n dove: • S(n) `e lo speedup • n `e il numero di slaves(core) che eseguono i task Hadoop. 45
  • 72. Comandi utili • start-dfs.sh //Avvio di HDFS (NameNode, DataNode) • stop-dfs.sh //Arresto HDFS • start-yarn.sh //Avvio del ResourceManager • stop-yarn.sh //Arrwto del ResourceManager • mr-jobhistory-daemon.sh start historyserver //Avvio de JobHistoryServer • mr-jobhistory-daemon.sh stop historyserver //Arresto del JobHistoryServer • hdfs dfs -mkdir -p . //Creazione della cartella radice nell’HDFS • hdfs dfs -rm <-r> Rimuove file <cartelle>dall’HDFS • hdfs dfs -ls -l Visualizzazione del contenuto dell’HDFS 47
  • 75. Riferimenti Apache Hadoop http : //hadoop.apache.org/ https : //hadoop.apache.org/docs/r1.2.1/mapredtutorial.html http : //hadoop.apache.org/docs/r2.5.1/index.html MapReduce: Simplifed Data Processing on Large Clusters Dean, J. and Ghemawat, S. Communication of ACM 51, 1 (Jan. 2008), 107-113 The Hadoop Distributed File System Shvachko, Konstantin et al. 2010 IEEE 26th Symposium on Mass Storage Systems and Technologies (MSST) Pro Hadoop Jason Venner - Copyright c 2009 by Jason Venner - ISBN:978-1-4302-1942-2 50
  • 76. Riferimenti Data-Intensive Text Processing with MapReduce Jimmy Lin and Chris Dyer - University of Maryland, College Park - Manuscript prepared April 11, 2010 Slide Ph.D. Roscigno Gianluca Dipartimento di Informatica - Universit`a degli Studi di Salerno, I-84084, Fisciano (SA), Italy giroscigno@unisa.it 51