2. Qualcosa su di me…
Messina, 21/03/2015 Dario Catalano
dario@catalano.email
Linkedin
Google+
Twitter
3. Di cosa parleremo
Messina, 21/03/2015 Dario Catalano
• Cos’è Apache Hadoop?
• Un po’ di storia
• L’algoritmo Map-Reduce
• L’architettura
• Cloudera
• Esempio Applicativo
• Configurazione
• Amministrazione
• Sicurezza
• «Estensioni» di
Hadoop
• Bibliografia
4. Cosa è Hadoop?
Messina, 21/03/2015 Dario Catalano
Framework
Cluster
Big
Data
Map
Reduce
Distribuited
File System
API
Fault tollerant
Cloud
Scalable
Cost effective
Extensible
Flexibile
Java
5. Un po’ di storia
Messina, 21/03/2015 Dario Catalano
2003 Google File System
6. Un po’ di storia
Messina, 21/03/2015 Dario Catalano
2004 Google Map Reduce
7. Un po’ di storia
Messina, 21/03/2015 Dario Catalano
2005
Doug Cutting Mike Cafarella
8. Un po’ di storia
Messina, 21/03/2015 Dario Catalano
2006 2011 2013
9. Map Reduce » Step I
Messina, 21/03/2015 Dario Catalano
…
…
…
…
…
Mapper
Mapper
Mapper
Mapper
Datas
…
Intermediate Datas
Record
Record
Record
Record
Record
Record
Record
Partitionated Datas
Record
Record
Record
Record
Record
Record
Record
Record
Record
Map Tasks
(K1,Va) (K2,Vb)
(K3,Vc) (K4,Vd)
(K5,Ve) (K6,Vf)
…
(K1,Vc) (K5,Vc)
(K5,Vf) (K2,Vd)
(K1,Ve) (K1,Vf)
…
(K3,Va) (K2,Va)
(K1,Vc) (K7,Vd)
(K2,Vb) (K3,Vf)
…
(K4,Va) (K2,Vb)
(K8,Vc) (K7,Vf)
(K2,Ve) (K5,Vf)
10. Map Reduce » Step II
Messina, 21/03/2015 Dario Catalano
…
Intermediate Datas
(K1,Va) (K2,Vb)
(K3,Vc) (K4,Vd)
(K5,Ve) (K6,Vf)
…
(K1,Vc) (K5,Vc)
(K5,Vf) (K2,Vd)
(K1,Ve) (K1,Vf)
…
(K3,Va) (K2,Va)
(K1,Vc) (K7,Vd)
(K2,Vb) (K3,Vf)
…
(K4,Va) (K1,Vb)
(K8,Vc) (K7,Vf)
(K2,Ve) (K5,Vf)
K1 Va Ve
K2
K3
K4
Vf Vb
K5 Ve Vf Vc Vf
K6
K7 Vd
K8 Vc
Vc
Vb
Vc
Va Vd Ve Vb
Vc Va Vf
Vd Va
Vf
Vf
Intermediate DatasShuffle, Partitionig and Sorting
11. Map Reduce » Step III
Messina, 21/03/2015 Dario Catalano
K1 Va Ve
K2
K3
K4
Vf Vb
K5 Ve Vf Vc Vf
K6
K7 Vd
K8 Vc
Vc
Vb
Vc
Va Vd Ve Vb
Vc Va Vf
Vd Va
Vf
Vf
Intermediate Datas
Reducer …
Record
Record
Reducer …
Record
Record
Reduce Tasks
…
Record
Record
Record
Record
Record
Record
Record
Record
Output Datas
16. Architettura » HDFS » NameNode
Messina, 21/03/2015 Dario Catalano
• Ruolo Master
• Responsabile dei Metadata
Struttura directory, file e relativi permessi
Posizione dei blocchi
Stato dei files
Identità dei DataNode caricata al boot
Filename dei blocchi nei fs locale dei DataNode
• Dati in memoria
24. Architettura » Map Reduce v1
Messina, 21/03/2015 Dario Catalano
• Master / Slave
• TaskTracker:
Creazione task slot-based
JVM fork
Heartbeat
• JobTracker:
Responsabile/Gestore del Job
Colloquia con il NameNode
Effettua recovery di task falliti
Punto debole dell’architettura
25. Architettura » Master / Slave
Messina, 21/03/2015 Dario Catalano
• Hdfs e MapReduce nello stesso nodo = minore traffico di rete = maggiore
performance
26. Architettura » YARN
Messina, 21/03/2015 Dario Catalano
• Container
Unità computazionale
Controlla CPU e RAM assegnate
• Node Manager
Riceve richieste del RS (Slave)
Gestisce ciclo vita dei container
Gestisce logging e servizi ausiliari
• Resource Manager:
Riceve richieste da AM
Schedula con politiche variabili
(Fair, Capacity,…)
• Application Master
Dipende dal tipo di applicazione
Separazione delle responsabilità =
Scalabilità
27. Architettura » YARN
Messina, 21/03/2015 Dario Catalano
1. CL -> RM (inizio
applicazione)
2. RM -> NM (richiesta nuovo
AM)
3. AM -> RM (registrazione)
4. AM -> RM (richiesta risorse)
5. AM -> NM(s) (avvio
containers)
6. CS -> AM (containers
eseguono il codice ed inviano
checks)
7. CL -> AM (client chiede stato
applicazione)
8. AM -> RM (shutdown)
28. Architettura » YARN
Messina, 21/03/2015 Dario Catalano
Hadoop 1.x Hadoop 2.x
Tipo di elaborazione Solo Map Reduce Implementazioni multiple
Gestione delle risorse
e delle elaborazioni
Unica (JobTracker)
Separata (ResourceManager e
Application Master)
Scalabilità di HDFS Singolo NameNode HDFS Federation
Affidabilità di HDFS Singolo NameNode HDFS High Availability
Limite Nodi 4.000 10.000
29. HostHost
Processo
Modalità di Esecuzione
Messina, 21/03/2015 Dario Catalano
Singolo Processo
NameNode
Job
Tracker
Task
Tracker
Pseudo Distribuita
Data
Node
Secondary
NameNode
Host
NN
JT
Host
DN
TT
M
Host
DN
TT
R
Distribuita
30. Prima del codice…
Messina, 21/03/2015 Dario Catalano
• Servizi, architetture e
formazione su Apache
Hadoop
• Apache Main Contributor
• CDH (Cloudera
Distribution with Hadoop)
31. Cloudera Quickstart VM
Messina, 21/03/2015 Dario Catalano
• CDH 5 è basata su Linux Centos 6.4
• Contiene:
HDFS, MapReduce, Hadoop Common, Hbase, Hive, Pig, Oozie, Sqoop, Flume,
ZooKeeper, Hue, Whirr, Mahout, Cloudera Manager
• Disponibile per VMWare, KVM, Oracle Virtualbox
• Requisititi Minimi:
4 Gb RAM (8 raccomandati)
64 bit host OS
• Scaricabile da:
http://www.cloudera.com/content/cloudera/en/downloads/quickstart_vms/
cdh-5-3-x.html
32. Word Count API «vecchia»
Messina, 21/03/2015 Dario Catalano
import java.io.IOException;
...
import org.apache.hadoop.mapred.TextOutputFormat;
public class WordCountOldAPI {
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(WordCountOldAPI.class);
conf.setJobName("wordcount");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(MyMapper.class);
conf.setCombinerClass(MyReducer.class);
conf.setReducerClass(MyReducer.class);
conf.setNumReduceTasks(1);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
33. Word Count API «vecchia»
Messina, 21/03/2015 Dario Catalano
public static class MyMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text,
IntWritable> {
public void map(LongWritable key, Text value,OutputCollector<Text, IntWritable> output, Reporter
reporter) throws IOException {
output.collect(new Text(value.toString()), new IntWritable(1));
}
}
public static class MyReducer extends MapReduceBase implements Reducer<Text, IntWritable, Text,
IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
output.collect(key, new IntWritable(sum));
}
}
}
34. La «nuova» API
Messina, 21/03/2015 Dario Catalano
• Introdotta con Hadoop 0.20 (2009)
• Nuovo package
• Più concisa e compatta
• Più pulita e leggibile
• Permette un controllo del Job più completo ed accurato
• Non confondere versione API con versione
dell’architettura (1.x o 2.x)
35. Word Count API «nuova»
Messina, 21/03/2015 Dario Catalano
import java.io.IOException;
...
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
public class WordCountNewAPI {
public static void main(String[] args) throws Exception {
Job job = Job.getInstance(new Configuration());
job.setJarByClass(WordCountNewAPI.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
boolean status = job.waitForCompletion(true);
if (status) System.exit(0)
else System.exit(1);
}
36. Word Count API «nuova»
Messina, 21/03/2015 Dario Catalano
public static class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
public void map(LongWritable key, Text value, Context context) throws IOException,
InterruptedException {
String w = value.toString();
context.write(new Text(w), new IntWritable(1));
}
}
public static class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException,
InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
}
38. Configurazione
Messina, 21/03/2015 Dario Catalano
• Configurazione XML per ogni nodo
• *‐default.xml nei JAR di Hadoop, *‐site.xml nella cartella di
configurazione
• 4 tipi file principali:
core‐*.xml
hdfs‐*.xml
mapred‐*.xml
yarn‐*.xml
• Precedenza delle proprietà definite in varie posizioni:
Oggetto Job o JobConf all’interno del codice
File *‐site.xml all’interno del nodo Client
File *‐site.xml all’interno del nodo Slave
File *‐default.xml nei JAR (uguali in tutti i nodi)
39. Amministrazione e Monitoring
Messina, 21/03/2015 Dario Catalano
• Command Line Interface
• Log files
• Interfacce Web per ogni processo
• YARN REST API
• JMX
• Manager Tools
Cloudera Manager
Ambari
40. Sicurezza
Messina, 21/03/2015 Dario Catalano
• Inizialmente trascurata (solo dati pubblici)
• Hadoop solo su reti private
• Sviluppo software di terze parti:
Cloudera Sentry, IBM InfoSphere Optim Data Masking, Intel's secure Hadoop
distribution, DataStax Enterprise, DataGuise for Hadoop,ecc.
• Dalla versione 0.20.x:
Autenticazione tra servizi Kerberos
Autenticazione Web Console personalizzabile
HDFS Permessi ed ACL
Autenticazioni Token based per diminuire overhead
Possibile crittazione delle connessioni
• Problemi ancora da risolvere
HDFS non crittato
Difficile integrazione in ambienti non Kerberos
Regole di autorizzazione non sufficientemente flessibili
Modello complessivo della sicurezza complicato
• Intel Project Rhino
43. HIVE
Messina, 21/03/2015 Dario Catalano
• Database
• Data wharehouse e BI
• Linguaggio dichiarativo
• Tabelle -> File su HDFS
• SQL-like query -> MapReduce
• Tabelle (managed ed
esterne), viste, partizioni, … =
flessibilità organizzativa.
44. Pig
Messina, 21/03/2015 Dario Catalano
• Scripting
• Data flow e Pipelining
• ETL oriented
• Linguaggio procedurale
• LOAD, FILTER, JOIN,
GROUP, STORE,… =
controllo del dato step by
step
45. HCatalog
Messina, 21/03/2015 Dario Catalano
• Integrazione di varie
tecnologie Hadoop
based (HIVE, Pig,
MapReduce)
• Astrazione per rendere
uniformi BI e ETL
• REST API
50. Bibliografia
Messina, 21/03/2015 Dario Catalano
• Libri
Pro Hadoop Second Edition, Sameer Wadkar, Madhu Siddalingaiah, Jason Venner , Apress
Hadoop: The Definitive Guide Third Edition, Tom White, O’ Reilly
• Web
Apache Hadoop Official Site, https://hadoop.apache.org/
What is Hadoop?, http://www-01.ibm.com/software/data/infosphere/hadoop/
Cloudera, http://www.cloudera.com/
Introduzione ad Hadoop, https://paolobernardi.wordpress.com/2011/10/09/introduzione-ad-
hadoop/
Introduction to Hadoop 2.0 and advantages of Hadoop 2.0,
http://www.edureka.co/blog/introduction-to-hadoop-2-0-and-advantages-of-hadoop-2-0/
The New Hadoop API 0.20.x, http://sonerbalkir.blogspot.it/2010/01/new-hadoop-api-020x.html
Big Data Security: The Evolution of Hadoop’s Security Model,
http://www.infoq.com/articles/HadoopSecurityModel