Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Hadoop

Hadoop
by

Francho Gonzalez

on 7 June 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Hadoop

Hadoop
Cassandra
Hive
HBase
Pig
Avro
Oozie
Mahout
Zookeeper
HADOOP: la plataforma para las bases de datos Big Data
Es modelo de procesos de datos distribuidos y entorno de ejecucion que corre en grandes clusters
Es un modelo de programacion
linelamente escalable
funciones Map
función Reduce
job tracker
tasktrackers 1 ...n
función Map
funciones Reduce
funciones Map
MapReduce
Desde el 2005 ha habido un crecimiento exponencial del volumen de datos digitales: Redes Sociales, Moviles, Fotografia, Video, Busquedas, Sensores, Comercio Electronico, etc ...
Se crea a partir de la arquitectura del Google File System (GFS) y del motor de busqueda Nutch (MapReduce de Google)
Es un modelo de programación para el procesamiento de datos en grandes clusters

Utiliza al maximo el procesamiento de datos distribuido y en paralelo.
MapReduce
linealmente escalable
RDBMS
HADOOP
Gigabytes
Petabytes
Interactivo y Batch
Batch
Lectura y escritura frecuentes
Una escritura, muchas lecturas
Esquema estático
Esquema dinámico
Alta integridad de datos
Baja integridad de datos
No linealmente escalable
Linealmente escalable
n procesos Maps, n procesos Reduce
Pares (Clave, Valor)
A-M
en=1, un=1, lugar=1,
de=1,1,1,1,
la=1, mancha=1
cuyo=1, acordarme=1, ha=1, mucho=1, hidalgo=1, los=1, lanza=1, artillero=1, adarga=1 antigua=1
A-M
flaco=1, galgo=1, corredor=1,
de=1
, algo=1, mas=1, carnero=1, las=1, duelos=1, los=1
N-Z
nombre=1, no=1,1, quiero=1 , tiempo=1, que=1, vivia=1
N-Z
rozin=1, y=1,1, una=1, olla=1, vaca=1, que=1, salpicon=1, noches=1, quebrantos=1
A-M
lantejas=1, los=1,1, algun=1,
de=1,1,1,1,1,
añadidura=1, domingos=1, consumian=1, las=1,1, hazienda=1, el=1, della=1, concluian=1, calças=1, fiesta=1, con=1
N-Z
sabados=1, viernes=1, palomino=1, tres=1, partes=1, su=1, resto=1, sayo=1, velarte=1, velludo=1, para=1, sus=1, pantuflos=1
A-N
en=1, un=1, lugar=1,
de=10
, la=1, mancha=1, cuyo=1, acordarme=1, ha=1, mucho=1, hidalgo=1, los=4, lanza=1, artillero=1, adarga=1, antigua=1, flaco=1, galgo=1, corredor=1, algo=1, mas=1, carnero=1, las=3, duelos=1, lantejas=1, algun=1, añadidura=1, domingos=1, consumian=1, hazienda=1, el=1, della=1, concluian=1, calças=1, fiesta=1, con=1
N-Z
nombre=1, no=2, quiero=1, tiempo=1, que=2, vivia=1, rozin=1, y=2, una=1, olla=1, vaca=1, salpicon=1, noches=1, quebrantos=1, sabados=1, viernes=1, palomino=1, tres=1, partes=1, su=1, resto=1, sayo=1, velarte=1, velludo=1, para=1, sus=1, pantuflos=1
n procesos Maps, 1 proceso reduce
n procesos Maps
El Filesystem de Hadoop es distribuido y esta ideado para trabajar con grandes ficheros.
Hadoop File System (HDFS)
Trabaja mediante "streaming" (escribir una vez, leer muchas veces)
Soporta replicación de ficheros, se configura mediante un parametro
Como realiza las
lecturas HDFS
Como escribe HDFS
Distancia entre nodos: dx, rx, nx ....... dy, ry, ny
El bloque por defecto es de 64 MB
% hadoop fs -mkdir libros
% hadoop fs -copyFromLocal /home/libros/docs/untexto.txt
hdfs://localhost/libros/untexto.txt
% hadoop fs -ls .
Operaciones basicas con HDFS
Flujo de datos en MapReduce
BBDD Cassandra
Codigo Abierto
Distribuida
Descentralizada
Linealmente Escalable
Tolerante a fallos
Alta disponibilidad.
Orientada a columnas
Utiliza hadoop como soporte y es:
Un ejemplo:

SELECT Palabras, COUNT(*)
FROM QuijoteDeLaMancha
GROUP BY Palabras;
¿Que replica lee HDFS?
¿Donde escribe las replicas HDFS?
¿QUE ES PIG?
Pig es un framework para el procesamiento de ficheros en paralelo
Es codigo abierto
Utiliza MapReduce y HDFS
El lenguaje asociado se llama Pig Latin, cuyas sentencias pueden realizar ordenamiento, filtros, joins
En la actualidad Hadoop es utilizado por ...
Clusters de hasta 100 nodos
Millones de sesiones diarias
Hadoop, HDFS y HBase
Cluster de 80 nodos
Clusters de 532 nodos
Java MapReduce, Pig, Hive, HBase
Hadoop, Hive
Un Cluster de 2000 nodos
Cluster de 44 nodos
Java MapReduce
150 millones eventos diarios
Clusters de 1200, 580 y 120 nodos
Hadoop, Pig, Hive, Avro
Java MapReduce, Pig, Hive, HBase y Cassandra
Hadoop, Pig
40.000 nodos en Hadoop
Cluster de 4500 nodos
RENDIMIENTO
HARDWARE
N-Z
sabados=1, viernes=1, palomino=1, tres=1, partes=1, su=1, resto=1, sayo=1, velarte=1, velludo=1, para=1, sus=1, pantuflos=1
N-Z
rozin=1, y=1,1, una=1, olla=1, vaca=1 salpicon=1, noches=1, quebrantos=1
A-M
flaco=1, galgo=1, corredor=1,
de=1
, algo=1, mas=1, carnero=1, las=1, duelos=1, los=1
A-M
lantejas=1, los=1,1, algun=1,
de=1,1,1,1,1
añadidura=1, domingos=1, consumian=1, las=1,1, hazienda=1, el=1, della=1, concluian=1, calças=1, fiesta=1, con=1
A-M
en=1, un=1, lugar=1,
de=1,1,1,1
, la=1, mancha=1
cuyo=1, acordarme=1, ha=1, mucho=1, hidalgo=1, los=1, lanza=1, artillero=1, adarga=1 antigua=1
N-Z
nombre=1, no=1,1, quiero=1 , tiempo=1, que=1, vivia=1
Como funciona MapReduce
package CuentaPalabras;

import java.io.IOException;
import java.util.*;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.mapreduce.lib.input.*;
import org.apache.hadoop.mapreduce.lib.output.*;
import org.apache.hadoop.util.*;

public class CuentaPalabras extends Configured implements Tool {

public static class Map
extends Mapper<LongWritable, Text, Text, IntWritable> {

private final static IntWritable uno = new IntWritable(1);
private Text palabra = new Text();


public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException
{
String line = value.toString().toLowerCase();

StringTokenizer tokenizer = new StringTokenizer(linea,".,;:'\")(-!¿«?¡ ");

while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());

context.write(palabra, uno);
}
}
}

public static class Reduce
extends Reducer<Text, IntWritable, Text, IntWritable> {


public void reduce(Text clave, Iterable<IntWritable> valores,
Context context) throws IOException, InterruptedException {
int suma = 0;

for (IntWritable val : valores) {

suma += val.get();
}

context.write(clave, new IntWritable(suma));
}
}

public int run(String [] args) throws Exception {
Job job = new Job(getConf());
job.setJarByClass(CuentaPalabras.class);
job.setJobName("cuentapalabras");

job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);


job.setMapperClass(Map.class);
job.setCombinerClass(Reduce.class);
job.setReducerClass(Reduce.class);

job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);

FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));

boolean success = job.waitForCompletion(true);
return success ? 0 : 1;
}

public static void main(String[] args) throws Exception {
int ret = ToolRunner.run(new CuentaPalabras(), args);
System.exit(ret);
}
}
Java


mapred.compress.map.output=false Si la salida se comprime
mapred.map.output.compresion.codec Nombre del codec si hay compresion
COMPRESION
A-M
en=1, un=1, lugar=1,
de=1,1,1,1,1,1,1,1,1
, la=1, mancha=1
cuyo=1, acordarme=1, ha=1, mucho=1, hidalgo=1, los=1,1,1,1, lanza=1, artillero=1, adarga=1 antigua=1
flaco=1, galgo=1, corredor=1, algo=1, mas=1, carnero=1, las=1,1,1, duelos=1, lantejas=1, algun=1, , añadidura=1, domingos=1, consumian=1, hazienda=1, el=1, della=1, concluian=1, calças=1, fiesta=1, con=1
N-Z
nombre=1, no=1,1, quiero=1 , tiempo=1, que=1, vivia=1, rozin=1, y=1,1, una=1, olla=1, vaca=1 salpicon=1, noches=1, quebrantos=1, sabados=1, viernes=1, palomino=1, tres=1, partes=1, su=1, resto=1, sayo=1, velarte=1, velludo=1, para=1, sus=1, pantuflos=1
Instalación Hadoop
Instalar Java (JDK)
Configurar SSH
Instalar Hadoop (Hadoop 0.20.2)
hadoop-env.sh (JAVA_HOME=/usr/lib/jvm/java-6-openjdk)
core-site.xml
hdfs-site.xml
mapred-site.xml
masters
slaves
<?xml version="1.0"?>
<!-- mapred-site.xml -->
<configuration>
<property>

<name>mapred.job.tracker</name>
<value>Jupiter:8021</value>
</property>
<property>

<name>mapred.tasktracker.map.tasks.maximum</name>
<value>7</value>
</property>
<property>

<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>7</value>
</property>
</configuration>
<?xml version="1.0"?>
<!-- hdfs-site.xml -->
<configuration>
<property>

<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/disk1/hdfs/data,/disk2/hdfs/data</value>
</property>
</configuration>
<?xml version="1.0"?>
<!-- core-site.xml -->
<configuration>
<property>

<name>fs.default.name</name>
<value>hdfs://Saturno/</value>
</property>
</configuration>
CORE-SITE.XML
HDFS-SITE.XML
MAPRED-SITE.XML
Rubi
Pyton
C++
Como arrancar Hadoop
start-dfs.sh / stop-dfs.sh
start-mapred.sh / stop-mapred.sh
start-all.sh / stop-all.sh
hadoop/conf
hadoop/bin
modos de ejecucion
Modo local
Modo pseudo-distribuido
Modo distribuido (cluster)
Componente Propiedad Local Pseudo-distribuido Distribuido
Common fs.default.name file:/// (default) hdfs://localhost/ hdfs://Saturno/

HDFS dfs.replication N/A 1 3 (default)

MapReduce mapred.job.tracker local (default) localhost:8021 Jupiter:8021
Tabla de configuración para diferentes modos
1 jobtracker
n tasktracker
1 namenode,
n namenodes secundarios
n datanodes

Hasta 100 TB de tamaño para un solo fichero.
-- Cargar el fichero quijote.txt y cargar cada linea en entrada
entrada
= LOAD 'quijote.txt' AS (linea);

-- TOKENIZE trozea la linea en palabras
palabras = FOREACH
entrada
GENERATE FLATTEN (TOKENIZE(linea)) as palabra;

-- Agrupamos por palabras
grupoPalabras
= GROUP palabras BY palabra;

-- Contamos las palabras.
contador = FOREACH
grupoPalabras
GENERATE group, COUNT(palabras);

-- Imprimimos los resultados.
DUMP contador;
Cuenta Palabras en PIG
Disponibilidad
Consistencia
Tolerancia a fallos
Relacionales: MySql, SQL Server, Postgres
Cassandra
, Voldemort, CouchDB, Riak
Neoj4J, Google Bigtable, MongoDB,
HBase,
Hypertable
Dentro de un sistema de datos distribuidos a gran escala es imposible satisfacer simultaneamente los siguientes requerimientos:
Hadoop y el teorema CAP
Teorema CAP
modelo de datos
SalasDeReuniones Super Familia de Columnas

SCkey: Salas Primera Planta Super Columna

key: Sala Australia Clave Fila

tlfno: 917440304 Columna:Valor
desc: Sala pequeña Columna:Valor

key: Sala Alemania Clave Fila

tlfno: 917442403, Columna:Valor
desc: sala con telefono cisco IP Phone 7911 Columna:Valor

SCkey: Salas Segunda Planta Super Columna

key: Brasil Clave Fila

desc: Sala espaciosa y muy luminosa Columna:Valor

key: Belgica Clave Fila
orientado a columnas
Un ejemplo ...
21 PB de almacenamiento en cluster
2000 equipos
12 TB por equipo (unos pocos tiene 24 TB)
1200 equipos con 8 procesadores + 800 equipos con 16 procesadores
32 GB por RAM por equipo
15 tareas map-reduce por equipo
12 TB de datos comprimidos añadidos por dia
800 TB de datos comprimidos tratados por dia
25,000 trabajos map-reduce por dia
65 millones de ficheros en HDFS
30,000 accesos simultaneos al HDFS

Hadoop: The Definitive Guide -Tom White- (O'Reilly)
Hadoop in Action -Chuck Lam- (Manning)
Programming Pig, Dataflow Scripting with Hadoop -Alan Gates- (O'Reilly)
Cassandra. The Definitive Guide -Eben Hewitt- (O'Reilly)
HBase. The Definitive Guide -Lars George- (O'Reilly)
Privacy and Big Data -Terence Craig and Mary E. Ludloff- (0'Reilly)
Base de Datos Relacionales - HADOOP
BBDD HBASE
Es una versión en codigo abierto del Bigtable de Google
Orientada a columnas
Distribuida
Escalable
Estrictamente Consistente
Tolerante a fallos
HBASE esta organizado como:
Tabla
Clave (Fila)
Familia de Columnas
Columna
Fecha
Valor
(tabla, clave, familia, columna, fecha)
valor
HBASE a nivel superior esta organizado en Regiones
Hive
Hive es una infraestrutura de data warehouse basado en Hadoop

Desarrollada por Facebook en 2008.

Contiene un lenguaje tipo SQL llamado Hive QL
1 namenode,
n namenodes secundarios
n datanodes
1ª Replica: En el mismo del cliente
2ª Replica: En un nodo otro rack
3ª Replica: En otro nodo del mismo rack
n Replica: Random de cualquier nodo
max(min.split.size, min(max.split.size, blockSize))

dfs.block.size=64 MB
Tamaño del bloque en MB
mapred.min.split.size=1 byte Minimo valor por cada split del Map
mapred.max.split.size=MAX_VALUE Maximo valor por cada split del Map
fs.default.name=localhost Equipo donde se ejecuta el NameNode,
el filesystem por defecto
dfs.replication=1 Numero de replicación de cada fichero
dfs.name.dir
dfs.data.dir
mapred.reduce.tasks=1 Numero de tareas Reduce que intervienen por cada MapReduce
mapred.job.tracker=localhost Equipo donde se va a ejecutar el JobTracker
mapred.task.tracker.map.tasks.maximum=2 Maximo numero de tareas map por tasktracker
mapred.task.tracker.reduce.tasks.maximum=2 Maximo numero de tareas reduce por tasktracker
mapred.map.tasks.speculative.execution=True
mapred.reduce.tasks.speculative.execution=True
mapred.job.reuse.jvm.num.tasks=1
BLOQUES
HDFS

io.sort.mb=100 Memoria del buffer de ordenacion del map.
io.sort.record.percent=0.05
io.sort.spill.percent=0.80
io.sort.factor=10
ORDENACION
TAREAS
Tamaño de datos
Modo de Acceso
Modificaciones
Estructura
Integridad
Escalabilidad
Tabla
Fila
Columna
Columna particionada
Bucket
/user/hive/data warehouse/ventas/fecha=20120201/tienda=Madrid/
part-00000
/user/hive/data warehouse/ventas/fecha=20120201/tienda=Madrid/
part-00001
...
/user/hive/data warehouse/ventas/fecha=20120201/tienda=Barcelona/part-00000
...
/user/hive/data warehouse/ventas/fecha=
20120201
/tienda=Valencia/part-00000
...
/user/hive/data warehouse/ventas/fecha=
20120212
/tienda=Madrid/part-00000
...
/user/hive/data warehouse/ventas/fecha=20120213/tienda=Barcelona/part-00000
....
/user/hive/data warehouse/ventas/fecha=20120216/tienda=Valencia/part-00000
...
CREATE TABLE ventas (tienda STRING, seccion STRING, vendedor STRING,
articulo STRING, precio INT, fecha DATE, )
PARTITIONED BY (fecha DATE, tienda STRING)
CLUSTERED BY (vendedor) INTO 20 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS SEQUENCEFILE;
vendedor
Modelo de Datos
Bibliografia
Hadoop aparece ante la demanda generada por esta explosión de datos (Big Data)
CONSISTENCIA(Consistency): leer el mismo valor para una query
DISPONIBILIDAD (Availability):ser capaz de leer y escribir datos
TOLERANCIA A FALLOS (Partition tolerance): seguir funcionando con fallos en la red
Un sistema de serialización de datos
Es un servicio para la coordinación de grandes aplicaciones distribuidas
Libreria Java para el procesados de datos
Es un servidor para la coordinación de aplicaciones Hadoop
HADOOP= MAPREDUCE + HDFS
MapReduce se encarga de procesar los datos

HDFS se encarga de gestionar el almacenamiento de datos
Haddop nace en 2006 como sub-proyecto del motor de busqueda Nutch de Apache, en 2008 pasa a nivel de proyecto.
SELECT vendedores.nombre, ventas.facturacion
FROM vendedores vd JOIN ventas vt ON (vd.idusr = vt.idusr)
WHERE vt.date = '2012-01-03';
Full transcript