SlideShare una empresa de Scribd logo
Hadoop
Tomás Fernández Pena
Universidade de Santiago de Compostela
El campus de Trasgo 19
Material bajo licencia Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
citius.usc.es
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Índice
1 Arquitectura de Hadoop
Almacenamiento con HDFS
Gestión de recursos con YARN
Programación MapReduce
2 Programación MapReduce con Java
Compresión
3 Otros lenguajes con Hadoop Streaming
4 Tecnologías de alto nivel
Pig
Hive
Hadoop
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Índice
1 Arquitectura de Hadoop
Almacenamiento con HDFS
Gestión de recursos con YARN
Programación MapReduce
2 Programación MapReduce con Java
Compresión
3 Otros lenguajes con Hadoop Streaming
4 Tecnologías de alto nivel
Pig
Hive
Hadoop
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Hadoop
Implementación open-source de MapReduce
Procesamiento de enormes cantidades de datos en grandes clusters
de hardware barato (commodity clusters)
Escala: petabytes de datos en miles de nodos
Hadoop 1/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Características de Hadoop
Incluye
Almacenamiento: HDFS
Procesamiento: YARN y MapReduce (Hadoop v2)
Ventajas
Bajo coste: clusters baratos o cloud
Facilidad de uso
Tolerancia a fallos
Hadoop 2/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Hadoop
Hadoop 3/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Instalación
Instalación relativamente simple: aplicación Java
Paquete fuente: hadoop.apache.org/releases.html
Sistemas preconfigurados proporcionados por empresas como
Cloudera–Hortonworks o MapR
Modos de funcionamiento:
Standalone: todo en un nodo, para pruebas
Pseudodistribuido: funciona como una instalación completa, pero en
un solo nodo
Totalmente distribuido
Hadoop 4/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Filesystems en Hadoop
Hadoop tiene una noción abstracta de los filesystems
HDFS es un caso particular de filesystem
Algunos filesystems soportados:
FS URI Descripción
Local file Disco local
HDFS hdfs Sistema HDFS
HFTP hftp RO acceso a HDFS sobre HTTP
HSFTP hsftp RO acceso a HDFS sobre HTTPS
WebHDFS webhdfs RW acceso a HDFS sobre HTTP
S3 (nativo) s3n Acceso a S3 nativo
S3 (block) s3 Acceso a S3 en bloques
Ejemplo:
hadoop fs -ls file:///home/pepe
Para usar con HDFS se recomienda el comando hdfs dfs:
hdfs dfs -help
Hadoop 5/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
HDFS: Hadoop Distributed File System
HDFS: Ventajas
Diseñado para almacenar ficheros muy grandes en commodity
hardware
Elevado ancho de banda
Fiabilidad mediante replicacion
HDFS: Inconvenientes
Elevada latencia
Poco eficiente con muchos ficheros pequeños
Modificaciones siempre al final de los ficheros
No permite múltiples escritores (modelo single-writer,
multiple-readers
Hadoop 6/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Conceptos de HDFS
Namenode
Mantiene la información (metadatos) de los ficheros y bloques que
residen en el HDFS
Datanodes
Mantienen los datos
Bloques
Por defecto 128 MB (64 MB en v1)
bloques pequeños aumentan el paralelismo (un bloque por Map)
bloques más grandes reducen la carga del Namenode
Hadoop 7/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Conceptos de HDFS (cont.)
Checkpoint node
Mantienen checkpoints del Namenode
debería ejecutarse en un sistema con características similares al
Namenode
Hadoop 8/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Localización de las replicas
Política por defecto:
1ª réplica: en el nodo del cliente o en
un nodo al azar
2ª réplica: en un rack diferente de la
primera (elegido al azar)
3ª réplica: en el mismo rack que la 2ª,
pero en otro nodo
Otras réplicas: al azar (se intenta
evitar colocar demasiadas réplicas en
el mismo rack)
DataCenter
rack 1 rack 2
nodo
Desde la versión 0.21: políticas “enchufables”
Hadoop 9/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Interactuar con HDFS
Tres modos principales:
1. Usando línea de comandos: comando hdfs dfs
Permite cargar, descargar y acceder a los ficheros desde línea de
comandos
Vale para todos los filesystems soportados
2. Usando el interfaz web del NameNode (solo lectura)
3. Programáticamente: interfaz Java
4. Mediante otras interfaces: WebHDFS, HFTP, HDFS NFS Gateway
Hadoop 10/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Interfaz en línea de comandos
Permite cargar, descargar y acceder a los ficheros HDFS desde línea
de comandos
Ayuda: hdfs dfs -help
Más información: hadoop.apache.org/docs/stable3/hadoop-project-
dist/hadoop-hdfs/HDFSCommands.html,
hadoop.apache.org/docs/stable3/hadoop-project-dist/hadoop-
common/FileSystemShell.html
Hadoop 11/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Interfaz en línea de comandos (I)
Algunos comandos de manejo de ficheros
Comando Significado
hdfs dfs -ls <path> Lista ficheros
hdfs dfs -ls -R <path> Lista recursivamente
hdfs dfs -cp <src> <dst> Copia ficheros HDFS a HDFS
hdfs dfs -mv <src> <dst> Mueve ficheros HDFS a HDFS
hdfs dfs -rm <path> Borra ficheros en HDFS
hdfs dfs -rm -r <path> Borra recursivamente
hdfs dfs -cat <path> Muestra fichero en HDFS
hdfs dfs -tail <path> Muestra el final del fichero
hdfs dfs -stat <path> Muestra estadísticas del fichero
hdfs dfs -mkdir <path> Crea directorio en HDFS
hdfs dfs -chmod ... Cambia permisos de fichero
hdfs dfs -chown ... Cambia propietario/grupo de fichero
hdfs dfs -du <path> Espacio en bytes ocupado por ficheros
hdfs dfs -du -s <path> Espacio ocupado acumulado
hdfs dfs -count <paths> Cuenta nº dirs/ficheros/bytes
Hadoop 12/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Interfaz en línea de comandos (II)
Movimiento de ficheros del sistema local al HDFS:
Comando Significado
hdfs dfs -put <local> <dst> Copia de local a HDFS
hdfs dfs -copyFromLocal ... Igual que -put
hdfs dfs -moveFromLocal ... Mueve de local a HDFS
hdfs dfs -get <src> <loc> Copia de HDFS a local
hdfs dfs -copyToLocal ... Copia de HDFS a local
hdfs dfs -getmerge ... Copia y concatena de HDFS a local
hdfs dfs -text <path> Muestra el fichero en texto
Hadoop 13/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Interfaz en línea de comandos (III)
Otros comandos:
Comando Significado
hdfs dfs -setrep <path> Cambia el nivel de replicación
hdfs dfs -test -[defsz] <path> Tests sobre el fichero
hdfs dfs -touchz <path> Crea fichero vacío
hdfs dfs -expunge Vacía la papelera
hdfs dfs -usage [cmd] Ayuda uso de comandos
Hadoop 14/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Otras herramientas para mover datos
Es posible mover datos a/desde HDFS usando otras herramientas
distcp Transferir datos en paralelo entre dos filesystems Hadoop
Ejemplo
hadoop distcp hdfs://nnode1/foo hdfs://nnode2/bar
Aplicación MapReduce map-only
Puede usar otros filesystems (HFTP, WebHDFS, etc.)
Interesante para mover cantidades masivas de datos
Más opciones: hadoop distcp -help
Apache Flume servicio para recoger, agregar y mover grandes
cantidades de datos de log a HDFS
Apache Sqoop transferencia masivas de datos entre bases de datos
estructuradas y HDFS
Hadoop 15/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Herramientas para la gestión del HDFS
Hadoop proporciona un conjunto de herramientas para chequear y
optimizar el HDFS
hdfs dfsadmin: optiene información del estado del HDFS
hdfs fsck: chequeo del filesystem
hdfs balancer: herramienta de rebalanceo de bloques entre
datanodes
Hadoop 16/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
hdfs dfsadmin
Algunas opciones (usar hdfs dfsadmin comando)
Comando Significado
-help Ayuda
-report Muestra estadísticas del filesystem
-setQuota Fija una cuota en el número de nombres en
un directorio (nº de ficheros/directorios)
-clrQuota Borra la cuota de nombres
-setSpaceQuota Fija una cuota en el espacio ocupado en un directorio
-clrSpaceQuota Borra la cuota de espacio
-refreshNodes Actualiza los nodos que se pueden conectar
-safemode fija o chequea el safe mode
-saveNameSpace en safe mode, salva el filesystem en memoria a un
nuevo fichero fsimage y resetea el fichero edits
Hadoop 17/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
hdfs fsck
Chequea la salud de los ficheros en HDFS
Chequea los bloques:
Over-replicated: con replicas de más
Under-replicated: con replicas de menos
Misreplicated: replicas mal colocadas
Corruptos
Missing replicas: sin réplicas
Ejemplos:
Chequea recursivamente todo el HDFS
hdfs fsck /
Informa del número de bloques de un fichero y su localización
hdfs fsck /user/pepe/foo -files -blocks -racks
Hadoop 18/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Problemas con el Namenode
El Namenode es un single point of failure (SPOF)
Si falla es imposible acceder a los datos
Posibilidad de recuperación a partir de los checkpoints
Conveniente guardar varias réplicas de los datos del namenode
(RAID, indicar en dfs.namenode.name.dir directorios en
diferentes máquinas, etc)
Mejoras en la versión 2.0
HDFS High-Availability
HDFS Federation
Hadoop 19/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
HDFS High-Availability
Un par de Namenodes en configuración activo-standby
si falla el Namenode activo, el otro ocupa su lugar
Consideraciones
Los Namenodes deben usar un almacenamiento compartido de alta
disponibilidad
Los Datanodes deben enviar informes de bloques a los dos
Namenodes (el block mapping va en memoria, no en disco)
Los Clientes deben manejar el fallo del Namenode de forma
transparente
Más información: hadoop.apache.org/docs/stable3/hadoop-project-
dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html,
hadoop.apache.org/docs/stable3/hadoop-project-dist/hadoop-
hdfs/HDFSHighAvailabilityWithQJM.html
Hadoop 20/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
HDFS Federation
El Namenode mantiene, en memoria, referencias a cada fichero y bloque
en el filesystem
problemas de escalabilidad
HDF Federation, introducida en la versión 2.0
Permite usar varios Namenodes
Cada uno gestiona una porción del espacio de nombres del
filesystem
Los Namenodes no se coordinan entre sí
Cada Datanodes se registra con todos los Namenodes
Más información: hadoop.apache.org/docs/stable3/hadoop-project-
dist/hadoop-hdfs/Federation.html
Hadoop 21/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Conceptos YARN (I)
Resource manager
arbitra los recursos entre las aplicaciones en el sistema
demonio global, obtiene datos del estado del cluster de los node
managers
dos componentes:
Scheduler: planifica aplicaciones en base a sus requerimientos de
recusos (se basa en el concepto de Container de recursos)
Applications Manager: acepta trabajos, negocia containers y
gestiona fallos de los Application Masters
Node managers
uno por nodo
monitorizan los recursos del cluster (containers)
Hadoop 22/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Conceptos YARN (II)
Application masters
uno por aplicación
gestiona el ciclo de vida de la aplicación
solicita recursos (containers) al Resource manager y ejecuta la
aplicación en esos containers
trabaja con los Node managers para ejecutar y monitorizar las
tareas
permiten que diferentes tipos de aplicaciones (no solo MapReduce)
se ejecuten en el cluster
Splits
Trozos en los que se divide la entrada a una tarea MapReduce
Aproximadamente del tamaño de 1 bloque (128 o 64 MB)
Hadoop 23/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Elementos de control YARN
Fuente: A. Murthy, V. Vavilapalli, “Apache Hadoop YARN”, Addison-Wesley, marzo 2014
Hadoop 24/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Comando yarn
Permite lanzar y gestionar trabajos en YARN:
yarn jar: ejecuta un fichero jar
yarn app: información sobre las aplicaciones ejecutándose en
YARN
yarn container: información sobre los contenedores
yarn node: información sobre los nodos
yarn top: información sobre el uso del cluster
yarn rmadmin: comandos para la administración del cluster
Más información: hadoop.apache.org/docs/stable3/hadoop-yarn/hadoop-
yarn-site/YarnCommands.html
Hadoop 25/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Mapreduce en Hadoop
Hadoop incorpora una implementación de MapReduce
Programable en Java
Uso de otros lenguajes mediante sockets (C++) o Streaming
(Python, Ruby, etc.)
Hadoop 26/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Índice
1 Arquitectura de Hadoop
Almacenamiento con HDFS
Gestión de recursos con YARN
Programación MapReduce
2 Programación MapReduce con Java
Compresión
3 Otros lenguajes con Hadoop Streaming
4 Tecnologías de alto nivel
Pig
Hive
Hadoop
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Java MapReduce en Hadoop
Un programa MapReduce en Java debe definir 3 clases:
1. Una clase mapper
2. Una clase reducer
3. Una clase principal, con el método main
Pueden crearse
como tres clases públicas separadas
como una sola, con el método main, y clases internas static para
mapper y reducer
Hadoop 27/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Ejemplo MapReduce: WordCount
El programa WordCount es el ejemplo canónico de MapReduce
Veremos una implementación muy simple
Definimos tres clases Java
Una clase para la operación Map (WordCountMapper)
Una clase para la operación Reduce (WordCountReducer)
Una clase de control, para inicializar y lanzar el trabajo MapReduce
(WordCountDriver)
Hadoop 28/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Mapper
public class WordCountMapper
extends Mapper<LongWritable , Text , Text , IntWritable> {
@Override
public void map(LongWritable key, Text value , Context ctxt )
throws IOException , InterruptedException {
Matcher matcher = pat .matcher(value . toString () ) ;
while (matcher. find () ) {
word. set (matcher. group () . toLowerCase () ) ;
ctxt . write (word, one) ;
}
}
private Text word = new Text () ;
private final static IntWritable one = new IntWritable (1) ;
private Pattern pat =
Pattern . compile( "   b[a−zA−Z u00C0−uFFFF]+b" ) ;
}
Hadoop 29/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Reducer
public class WordCountReducer
extends Reducer<Text , IntWritable , Text , IntWritable> {
@Override
public void reduce(Text key, Iterable<IntWritable> values ,
Context ctxt ) throws IOException , InterruptedException {
int sum = 0;
for ( IntWritable value : values ) {
sum += value . get () ;
}
ctxt . write (key, new IntWritable (sum) ) ;
}
}
Hadoop 30/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Driver (I)
public class WordCountDriver
extends Configured implements Tool {
public int run( String [] arg0) throws Exception {
i f (arg0 . length != 2) {
System. err . printf ( "Usar : %s [ops] <entrada> <salida >n" ,
getClass () .getSimpleName() ) ;
ToolRunner .printGenericCommandUsage(System. err ) ;
return −1;
}
Configuration conf = getConf () ;
Job job = Job . getInstance ( conf ) ;
job .setJobName( "Word Count" ) ;
job . setJarByClass ( getClass () ) ;
FileInputFormat . addInputPath( job , new Path(arg0[0]) ) ;
FileOutputFormat . setOutputPath( job , new Path(arg0[1]) ) ;
Hadoop 31/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Driver (II)
job . setOutputKeyClass(Text . class ) ;
job . setOutputValueClass ( IntWritable . class ) ;
job .setNumReduceTasks(1) ;
job . setMapperClass(WordCountMapper. class ) ;
job . setCombinerClass(WordCountReducer. class ) ;
job . setReducerClass(WordCountReducer. class ) ;
return ( job . waitForCompletion( true ) ? 0 : −1);
}
public static void main( String [] args) throws Exception {
int exitCode = ToolRunner . run(new WordCountDriver () , args) ;
System. exit (exitCode) ;
}
}
Hadoop 32/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Writables
Formato de serialización de objetos de Hadoop
Transforma objetos en un flujo de bytes para transmisión o
almacenamiento
Gran número de clases que implementan el interfaz Writable:
Objetos primitivos: BooleanWritable, ByteWritable,
IntWritable, LongWritable, FloatWritable,
DoubleWritable, Text (cadenas UTF-8)
Objetos primitivos de longitud variable: VIntWritable,
VLongWritable
Colecciones: ArrayWritable, ArrayPrimitiveWritable,
TwoDArrayWritable, MapWritable,
SortedMapWritable
Otros: NullWritable, BytesWritable, ObjectWritable,
GenericWritable,
Hadoop 33/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Compresión
Como vimos en el WordCount, Hadoop lee directamente ficheros
comprimidos:
Los ficheros se descomprimen automáticamente, usando la
terminación del fichero para determinar que codec usar
Formato Java/Nativo Splittable Codec
zlib/DEFLATE Sí/Sí No DefaultCodec
gzip Sí/Sí No GzipCodec
bzip2 Sí/Sí Sí BZip2Codec
LZO No/Sí No (Sí con preproceso) LzopCodec
LZ4 No/Sí No Lz4Codec
Snappy No/Sí No SnappyCodec
Hadoop 34/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Compresión
Fuente: Kamat, G., Singh, S., “Compression Options in Hadoop - A Tale of Tradeoffs”, Hadoop Summit (San Jose), June 27, 2013
Hadoop 35/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Compresión
Recomendaciones:
Usar contenedores binarios como Sequence File o Avro datafile
(soportan compresión y splitting)
Usar formatos splittables
Dividir los ficheros en trozos y comprimirlos por separado (cada
trozo comprimido debería ocupar un bloque HDFS)
No usar compresión
Hadoop 36/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Índice
1 Arquitectura de Hadoop
Almacenamiento con HDFS
Gestión de recursos con YARN
Programación MapReduce
2 Programación MapReduce con Java
Compresión
3 Otros lenguajes con Hadoop Streaming
4 Tecnologías de alto nivel
Pig
Hive
Hadoop
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Hadoop Streaming
API que permite crear códigos MapReduce en otros lenguajes
Utiliza streams Unix como interfaz entre Hadoop y el código
Permite usar cualquier lenguaje que pueda leer de la entrada
estándar y escribir en la salida estándar (Python, Ruby, etc.)
Más información
hadoop.apache.org/docs/stable3/hadoop-streaming
Hadoop Pipes
Interfaz C++ a Hadoop MapReduce
Usa sockets como canal de comunicación entre el tasktracker y el
proceso C++ que ejecuta el map o el reduce
Hadoop 37/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Ejemplo de streaming
WordCount Mapper en Python
#! / usr / bin /env python3
import re , sys
pattern = ’   b[a−zA−Zu00C0−uFFFF]+b ’
for line in sys . stdin :
words = re . findall ( pattern , line . lower () )
for w in words:
print ( "{0}t{1}" . format(w, 1) )
Hadoop 38/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Ejemplo de streaming
WordCount Reducer en Python
#! / usr / bin /env python3
import sys
( last_key , total ) = (None, 0)
for line in sys . stdin :
(key, value) = line . strip () . split ()
i f last_key and last_key != key:
print ( "{0}t{1}" . format( last_key , total ) )
( last_key , total ) = (key, int (value) )
else :
( last_key , total ) = (key, total+int (value) )
i f last_key :
print ( "{0}t{1}" . format( last_key , total ) )
Hadoop 39/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Ejemplo de streaming
Ejecución del código Python
yarn jar 
$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar 
-files WordCountMapper.py,WordCountReducer.py 
-input indir -output outdir 
-mapper WordCountMapper.py 
-reducer WordCountReducer.py
Nota: La opción -files sólo se necesita si se ejecuta en un cluster,
para enviar los scripts a los nodos del cluster
Hadoop 40/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Índice
1 Arquitectura de Hadoop
Almacenamiento con HDFS
Gestión de recursos con YARN
Programación MapReduce
2 Programación MapReduce con Java
Compresión
3 Otros lenguajes con Hadoop Streaming
4 Tecnologías de alto nivel
Pig
Hive
Hadoop
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Tecnologías relacionadas (I)
Diversas tecnologías relacionadas:
Pig: lenguaje data-flow de alto nivel para facilitar la programación
MapReduce
Hive: infraestructura de data-warehouse construida sobre Hadoop
Spark: motor de procesamiento de datos de caracter general
compatible con datos Hadoop
Oozie, Crunch, Cascading, Hamake: planificadores de workflows
para gestionar trabajos Hadoop
Tez: ejecución de DAGs de tareas complejos para queries
interactivas
Storm: procesamiento de flujos de datos (stream processing)
Impala: queries en tiempo real para Hadoop
Twill: abstracción sobre YARN que reduce la complejidad de
desarrollar aplicaciones distribuidas
Hadoop 41/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Tecnologías relacionadas (II)
HBase: base de datos distribuida no-relacional (NoSQL) que corre
sobre HDFS (inspirado en Google BigTable)
Sqoop: transferencia eficiente de datos eficiente entre Hadoop y
bases de datos relacionales
Parquet: formato de almacenamiento columnar para
almacenamiento eficiente de datos anidados
Ambari: herramienta basada en web para aprovisionar, gestionar y
monitorizar clusters Hadoop
Hue: interfaz web para simplificar el uso de Hadoop
ZooKeeper: servicio centralizado de configuración, nombrado,
sincronización distribuida y servicios de grupos para grandes
sistemas distribuidos
BigTop: empaquetamiento y tests para el ecosistema Hadoop
Hadoop 42/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Tecnologías relacionadas (III)
HCatalog: interfaces para permitir el acceso al Hive metastore
desde diversas herramientas
WebHCat: API REST-like para HCatalog (antes Templeton)
Falcon: solución para el procesamiento y gestión de datos para
Hadoop (movimiento. coordinación, gestión del ciclo de vida,
descubrimiento).
Slider: aplicación para desplegar aplicaciones distribuidas
existentes en YARN (aplicaciones long-running)
Hama: framework de computación Bulk Synchronous Parallel sobre
HDFS
Flume: obtención, agregación y movimiento de grandes ficheros de
log a HDFS
NiFi: automatización del flujo de datos entre sistemas
Hadoop 43/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Tecnologías relacionadas (IV)
Knox: REST API Gateway para interactuar con clusters Hadoop
incorporando seguridad (autenticación/autorización/auditoría)
Twister: aplicaciones MapReduce iterativas
Mahout: algoritmos escalables de machine learning y minería de
datos sobre Hadoop
Chukwa: sistema de recogida de datos para monitorizar grandes
sistemas distribuidos
Flink: procesamiento in-memory y de streams (similar a Spark)
Harp: abstracciones para datos y comunicaciones en el
procesamiento Big Data
Pydoop: Python API para Hadoop
Perldoop: Traducción de códigos MR en Perl a Java
Más ejemplos en https://hadoopecosystemtable.github.io/
Hadoop 44/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Pig
Iniciado en Yahoo! Research
Eleva el nivel de abstracción para
procesar grandes conjuntos de datos
Facilita centrarse en el “qué” en vez de
en el “cómo”
Expresa secuencias de trabajos
MapReduce
Modelo de datos: “bags” anidadas de
items
“Pig bag”: colección de tuplas
Proporciona operadores relacionales
(JOIN, GROUP BY, etc.)
Fácil definir y usar funciones definidas por
el usuario (UDFs) escritas en Java
Hadoop 45/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Pig
Dos elementos principales:
Un lenguaje propio: Pig Latin
Un entorno de ejecución: local o Hadoop
Programas ejecutados como:
Scripts en Pig Latin
Grunt: shell interactivo para ejecutar comandos Pig
Comandos Pig ejecutados desde Java
PigPen: entorno de desarrollo para Eclipse
Hadoop 46/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Ejemplo en Pig
Fichero con datos de usuarios
Fichero con lista de páginas
visitadas por los usuarios
Buscamos: 5 páginas más
visitadas por usuarios con edades
entre 18 y 25 años
Carga
usuarios
Filtra por
edad
Carga
páginas
Une por
nombre
Agrupa por
URL
Cuenta
clicks
Ordena por
clicks
Toma los
5 primeros
Fuente http://wiki.apache.org/pig-data/attachments/PigTalksPapers/attachments/ApacheConEurope09.ppt
Hadoop 47/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
En Pig Latin
Users = load ’users’ as (name, age);
Filtered = filter Users by age >= 18 and age <= 25;
Pages = load ’pages’ as (user, url);
Joined = join Filtered by name, Pages by user;
Grouped = group Joined by url;
Summed = foreach Grouped generate group,
count(Joined) as clicks;
Sorted = order Summed by clicks desc;
Top5 = limit Sorted 5;
store Top5 into ’top5sites’;
Hadoop 48/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Traslación directa
Los componentes del trabajo se trasladan de forma natural
Carga
usuarios
Filtra por
edad
Carga
páginas
Une por
nombre
Agrupa por
URL
Cuenta
clicks
Ordena por
clicks
Toma los
5 primeros
Users = load ...
Filtered = filter …
Pages = load …
Joined = join …
Grouped = group …
Summed = … count()…
Sorted = order …
Top5 = limit …
Hadoop 49/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Traslación directa
Los componentes del trabajo se trasladan de forma natural
Carga
usuarios
Filtra por
edad
Carga
páginas
Une por
nombre
Agrupa por
URL
Cuenta
clicks
Ordena por
clicks
Toma los
5 primeros
Users = load ...
Filtered = filter …
Pages = load …
Joined = join …
Grouped = group …
Summed = … count()…
Sorted = order …
Top5 = limit …
Job 1
Job 2
Job 3
Hadoop 49/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Instalación de Pig
La instalación de Pig es muy simple
1. Descargar el fichero pig-versión.tar.gz de
pig.apache.org/releases.html en el front-end
2. Destareadlo en nuestro $HOME
3. Definir variables de entorno:
export PIG_INSTALL=$HOME/pig-versión
export PATH=$PATH:$PIG_INSTALL/bin
Ejecución:
pig o pig -x mapreduce: ejecución en Hadoop (usa la
configuración de Hadoop del sistema)
pig -x local: ejecución en local
Hadoop 50/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Hive
Desarrollado en Facebook
“Base de datos relacional” sobre Hadoop
Soporta el análisis de grandes datasets en
filesystems compatibles con Hadoop (HDFS,
S3, ...)
HiveQL: dialecto de SQL
Peticiones HiveQL se convierten en un grafo dirigido acíclico de
trabajos MapReduce
Organiza los datos del filesystem en tablas
Listas de metadatos (p.e. esquemas de tablas) almacenados en una
base de datos (por defecto, Apache Derby)
Soporta particionado de tablas, clustering, tipos de datos
complejos, etc.
Puede llamar a scripts de Hadoop Streaming desde HiveQL
Hadoop 51/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Ejemplo de particiones y buckets
CREATE TABLE order (
username STRING,
orderdate STRING,
amount DOUBLE,
) PARTITIONED BY ( country STRING)
CLUSTERED BY (username) INTO 25 BUCKETS;
Se crea una partición por país
Se crean 25 buckets
Los datos de un usuario siempre al mismo bucket
Un bucket puede tener datos de múltiples usuarios
Se usa una función hash para determinar el bucket al que va cada
usuario
Hadoop 52/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Ejemplo Hive
Encontrar las 5 páginas más visitadas por usuarios entre 18-25 años
SELECT p. url , COUNT(1) as clicks
FROM users u JOIN page_views p ON (u.name = p. user)
WHERE u.age >= 18 AND u.age <= 25
GROUP BY p. url
ORDER BY clicks
LIMIT 5;
Filtra la vista de páginas usando un script Python
SELECT TRANSFORM(p. user , p. date)
USING ’map_script .py ’
AS dt , uid CLUSTER BY dt
FROM page_views p;
Hadoop 53/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Instalación de Hive
La instalación de Hive es sencilla
1. Descargar el fichero tar.gz con la versión estable de Hive de
hive.apache.org/downloads.html
2. Destareadlo en nuestro $HOME
3. Definir variables de entorno:
export HIVE_HOME=$HOME/hive-version
export PATH=$PATH:$HIVE_HOME/bin
Conectarse al NameNode, y como usuario hdmaster crear el
siguiente directorio
hdfs dfs -mkdir -p /user/hive/warehouse
Dadle permisos para que todos los usuarios puedan usar hive
hdfs dfs -chmod 1777 /user/hive/warehouse
Para ejecutarlo, simplemente comando hive
Hadoop 54/55
Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel
Ejecución Hive
Igual que Pig, Hive tiene un shell para ejecución interactiva
En el prompt de hive se pueden ir ejecutando una a una las
instrucciones Hive
También se pueden ejecutar scripts
Con hive -f script.hive ejecutaríamos el script completo
Además, con hive -e 'comando_hive' se puede ejecutar una
orden simple
Hadoop 55/55

Más contenido relacionado

PPTX
An Introduction To NoSQL & MongoDB
PPTX
Hadoop Tutorial For Beginners | Apache Hadoop Tutorial For Beginners | Hadoop...
PPTX
Non relational databases-no sql
PDF
Lab1-DB-Cassandra
PPTX
Hadoop Interview Questions And Answers Part-1 | Big Data Interview Questions ...
PPTX
Hadoop Training | Hadoop Training For Beginners | Hadoop Architecture | Hadoo...
PPTX
Apache Hive Tutorial
PDF
6. Utilización del modelo de objetos del documento (DOM)
An Introduction To NoSQL & MongoDB
Hadoop Tutorial For Beginners | Apache Hadoop Tutorial For Beginners | Hadoop...
Non relational databases-no sql
Lab1-DB-Cassandra
Hadoop Interview Questions And Answers Part-1 | Big Data Interview Questions ...
Hadoop Training | Hadoop Training For Beginners | Hadoop Architecture | Hadoo...
Apache Hive Tutorial
6. Utilización del modelo de objetos del documento (DOM)

La actualidad más candente (20)

PPT
Introduction to mongodb
PPTX
Nosql databases
PDF
Intro to HBase
PPTX
Hadoop
PDF
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
PPT
SAN Concepts
PDF
Building a Data Warehouse for Business Analytics using Spark SQL-(Blagoy Kalo...
PDF
PostgreSQL Tutorial for Beginners | Edureka
PPTX
Introduction to MongoDB
PPTX
Session 14 - Hive
PPTX
Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...
PPTX
Hadoop Ecosystem | Hadoop Ecosystem Tutorial | Hadoop Tutorial For Beginners ...
PPT
A la découverte du Web sémantique
PPTX
Introduction to HDFS
PPTX
Apache Spark Architecture
PDF
MapReduce Tutorial | What is MapReduce | Hadoop MapReduce Tutorial | Edureka
PDF
What is HDFS | Hadoop Distributed File System | Edureka
PPTX
Una base de datos relacional
PDF
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
PPTX
Introduction to Yarn
Introduction to mongodb
Nosql databases
Intro to HBase
Hadoop
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
SAN Concepts
Building a Data Warehouse for Business Analytics using Spark SQL-(Blagoy Kalo...
PostgreSQL Tutorial for Beginners | Edureka
Introduction to MongoDB
Session 14 - Hive
Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...
Hadoop Ecosystem | Hadoop Ecosystem Tutorial | Hadoop Tutorial For Beginners ...
A la découverte du Web sémantique
Introduction to HDFS
Apache Spark Architecture
MapReduce Tutorial | What is MapReduce | Hadoop MapReduce Tutorial | Edureka
What is HDFS | Hadoop Distributed File System | Edureka
Una base de datos relacional
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
Introduction to Yarn
Publicidad

Similar a Hadoop (20)

PPTX
MIERCODSGDSGDGDGDSGHSDGDGDSDGASDGLE.pptx
PPTX
Clase Hadoop
ODP
Hadoop, Cloud y Spring
PPTX
TRTRTRTRTRTcxfsdfasdfasfasfzasfgsdvfxgbRTRTR.pptx
PPTX
Hadoop: MapReduce para procesar grandes cantidades de datos
PDF
Hadoop barcamp 2011
PDF
Sistemas distribuidos
PPTX
Monta una Infraestructura Big Data para tu Empresa - Sesión I
PPTX
Hadoop Distributed File System (HDFS) pt2.pptx
PDF
Introducción a Hadoop
PPTX
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
PDF
Whitepaper – Qué es y cómo utilizar Hadoop
PPTX
Hadoop_Introduction_pptx.pptx
PDF
An evening with... Apache hadoop Meetup
PPTX
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
MIERCODSGDSGDGDGDSGHSDGDGDSDGASDGLE.pptx
Clase Hadoop
Hadoop, Cloud y Spring
TRTRTRTRTRTcxfsdfasdfasfasfzasfgsdvfxgbRTRTR.pptx
Hadoop: MapReduce para procesar grandes cantidades de datos
Hadoop barcamp 2011
Sistemas distribuidos
Monta una Infraestructura Big Data para tu Empresa - Sesión I
Hadoop Distributed File System (HDFS) pt2.pptx
Introducción a Hadoop
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
Whitepaper – Qué es y cómo utilizar Hadoop
Hadoop_Introduction_pptx.pptx
An evening with... Apache hadoop Meetup
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
Publicidad

Más de Tomás Fernández Pena (7)

PDF
Introducción al procesamiento del Big Data
PDF
Introducción a Hadoop
PDF
Content technologies - ICT H2020 - MED-Dialogue Networking, Amman 2014
PDF
MapReduce en Hadoop
PDF
BigData y MapReduce
PDF
Hadoop: tecnologias relacionadas
PDF
Cluster hadoop con herramientas EC2
Introducción al procesamiento del Big Data
Introducción a Hadoop
Content technologies - ICT H2020 - MED-Dialogue Networking, Amman 2014
MapReduce en Hadoop
BigData y MapReduce
Hadoop: tecnologias relacionadas
Cluster hadoop con herramientas EC2

Último (20)

PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
clase auditoria informatica 2025.........
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PDF
Estrategia de apoyo tecnología grado 9-3
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
Diapositiva proyecto de vida, materia catedra
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PDF
Influencia-del-uso-de-redes-sociales.pdf
PPTX
Presentación de Redes de Datos modelo osi
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Maste clas de estructura metálica y arquitectura
PDF
CyberOps Associate - Cisco Networking Academy
PPT
introduccion a las_web en el 2025_mejoras.ppt
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
historia_web de la creacion de un navegador_presentacion.pptx
clase auditoria informatica 2025.........
Zarate Quispe Alex aldayir aplicaciones de internet .docx
Estrategia de apoyo tecnología grado 9-3
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
Presentación PASANTIAS AuditorioOO..pptx
Diapositiva proyecto de vida, materia catedra
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Influencia-del-uso-de-redes-sociales.pdf
Presentación de Redes de Datos modelo osi
Power Point Nicolás Carrasco (disertación Roblox).pptx
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Sesion 1 de microsoft power point - Clase 1
Maste clas de estructura metálica y arquitectura
CyberOps Associate - Cisco Networking Academy
introduccion a las_web en el 2025_mejoras.ppt

Hadoop

  • 1. Hadoop Tomás Fernández Pena Universidade de Santiago de Compostela El campus de Trasgo 19 Material bajo licencia Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) citius.usc.es
  • 2. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Índice 1 Arquitectura de Hadoop Almacenamiento con HDFS Gestión de recursos con YARN Programación MapReduce 2 Programación MapReduce con Java Compresión 3 Otros lenguajes con Hadoop Streaming 4 Tecnologías de alto nivel Pig Hive Hadoop
  • 3. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Índice 1 Arquitectura de Hadoop Almacenamiento con HDFS Gestión de recursos con YARN Programación MapReduce 2 Programación MapReduce con Java Compresión 3 Otros lenguajes con Hadoop Streaming 4 Tecnologías de alto nivel Pig Hive Hadoop
  • 4. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Hadoop Implementación open-source de MapReduce Procesamiento de enormes cantidades de datos en grandes clusters de hardware barato (commodity clusters) Escala: petabytes de datos en miles de nodos Hadoop 1/55
  • 5. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Características de Hadoop Incluye Almacenamiento: HDFS Procesamiento: YARN y MapReduce (Hadoop v2) Ventajas Bajo coste: clusters baratos o cloud Facilidad de uso Tolerancia a fallos Hadoop 2/55
  • 6. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Hadoop Hadoop 3/55
  • 7. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Instalación Instalación relativamente simple: aplicación Java Paquete fuente: hadoop.apache.org/releases.html Sistemas preconfigurados proporcionados por empresas como Cloudera–Hortonworks o MapR Modos de funcionamiento: Standalone: todo en un nodo, para pruebas Pseudodistribuido: funciona como una instalación completa, pero en un solo nodo Totalmente distribuido Hadoop 4/55
  • 8. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Filesystems en Hadoop Hadoop tiene una noción abstracta de los filesystems HDFS es un caso particular de filesystem Algunos filesystems soportados: FS URI Descripción Local file Disco local HDFS hdfs Sistema HDFS HFTP hftp RO acceso a HDFS sobre HTTP HSFTP hsftp RO acceso a HDFS sobre HTTPS WebHDFS webhdfs RW acceso a HDFS sobre HTTP S3 (nativo) s3n Acceso a S3 nativo S3 (block) s3 Acceso a S3 en bloques Ejemplo: hadoop fs -ls file:///home/pepe Para usar con HDFS se recomienda el comando hdfs dfs: hdfs dfs -help Hadoop 5/55
  • 9. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel HDFS: Hadoop Distributed File System HDFS: Ventajas Diseñado para almacenar ficheros muy grandes en commodity hardware Elevado ancho de banda Fiabilidad mediante replicacion HDFS: Inconvenientes Elevada latencia Poco eficiente con muchos ficheros pequeños Modificaciones siempre al final de los ficheros No permite múltiples escritores (modelo single-writer, multiple-readers Hadoop 6/55
  • 10. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Conceptos de HDFS Namenode Mantiene la información (metadatos) de los ficheros y bloques que residen en el HDFS Datanodes Mantienen los datos Bloques Por defecto 128 MB (64 MB en v1) bloques pequeños aumentan el paralelismo (un bloque por Map) bloques más grandes reducen la carga del Namenode Hadoop 7/55
  • 11. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Conceptos de HDFS (cont.) Checkpoint node Mantienen checkpoints del Namenode debería ejecutarse en un sistema con características similares al Namenode Hadoop 8/55
  • 12. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Localización de las replicas Política por defecto: 1ª réplica: en el nodo del cliente o en un nodo al azar 2ª réplica: en un rack diferente de la primera (elegido al azar) 3ª réplica: en el mismo rack que la 2ª, pero en otro nodo Otras réplicas: al azar (se intenta evitar colocar demasiadas réplicas en el mismo rack) DataCenter rack 1 rack 2 nodo Desde la versión 0.21: políticas “enchufables” Hadoop 9/55
  • 13. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Interactuar con HDFS Tres modos principales: 1. Usando línea de comandos: comando hdfs dfs Permite cargar, descargar y acceder a los ficheros desde línea de comandos Vale para todos los filesystems soportados 2. Usando el interfaz web del NameNode (solo lectura) 3. Programáticamente: interfaz Java 4. Mediante otras interfaces: WebHDFS, HFTP, HDFS NFS Gateway Hadoop 10/55
  • 14. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Interfaz en línea de comandos Permite cargar, descargar y acceder a los ficheros HDFS desde línea de comandos Ayuda: hdfs dfs -help Más información: hadoop.apache.org/docs/stable3/hadoop-project- dist/hadoop-hdfs/HDFSCommands.html, hadoop.apache.org/docs/stable3/hadoop-project-dist/hadoop- common/FileSystemShell.html Hadoop 11/55
  • 15. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Interfaz en línea de comandos (I) Algunos comandos de manejo de ficheros Comando Significado hdfs dfs -ls <path> Lista ficheros hdfs dfs -ls -R <path> Lista recursivamente hdfs dfs -cp <src> <dst> Copia ficheros HDFS a HDFS hdfs dfs -mv <src> <dst> Mueve ficheros HDFS a HDFS hdfs dfs -rm <path> Borra ficheros en HDFS hdfs dfs -rm -r <path> Borra recursivamente hdfs dfs -cat <path> Muestra fichero en HDFS hdfs dfs -tail <path> Muestra el final del fichero hdfs dfs -stat <path> Muestra estadísticas del fichero hdfs dfs -mkdir <path> Crea directorio en HDFS hdfs dfs -chmod ... Cambia permisos de fichero hdfs dfs -chown ... Cambia propietario/grupo de fichero hdfs dfs -du <path> Espacio en bytes ocupado por ficheros hdfs dfs -du -s <path> Espacio ocupado acumulado hdfs dfs -count <paths> Cuenta nº dirs/ficheros/bytes Hadoop 12/55
  • 16. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Interfaz en línea de comandos (II) Movimiento de ficheros del sistema local al HDFS: Comando Significado hdfs dfs -put <local> <dst> Copia de local a HDFS hdfs dfs -copyFromLocal ... Igual que -put hdfs dfs -moveFromLocal ... Mueve de local a HDFS hdfs dfs -get <src> <loc> Copia de HDFS a local hdfs dfs -copyToLocal ... Copia de HDFS a local hdfs dfs -getmerge ... Copia y concatena de HDFS a local hdfs dfs -text <path> Muestra el fichero en texto Hadoop 13/55
  • 17. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Interfaz en línea de comandos (III) Otros comandos: Comando Significado hdfs dfs -setrep <path> Cambia el nivel de replicación hdfs dfs -test -[defsz] <path> Tests sobre el fichero hdfs dfs -touchz <path> Crea fichero vacío hdfs dfs -expunge Vacía la papelera hdfs dfs -usage [cmd] Ayuda uso de comandos Hadoop 14/55
  • 18. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Otras herramientas para mover datos Es posible mover datos a/desde HDFS usando otras herramientas distcp Transferir datos en paralelo entre dos filesystems Hadoop Ejemplo hadoop distcp hdfs://nnode1/foo hdfs://nnode2/bar Aplicación MapReduce map-only Puede usar otros filesystems (HFTP, WebHDFS, etc.) Interesante para mover cantidades masivas de datos Más opciones: hadoop distcp -help Apache Flume servicio para recoger, agregar y mover grandes cantidades de datos de log a HDFS Apache Sqoop transferencia masivas de datos entre bases de datos estructuradas y HDFS Hadoop 15/55
  • 19. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Herramientas para la gestión del HDFS Hadoop proporciona un conjunto de herramientas para chequear y optimizar el HDFS hdfs dfsadmin: optiene información del estado del HDFS hdfs fsck: chequeo del filesystem hdfs balancer: herramienta de rebalanceo de bloques entre datanodes Hadoop 16/55
  • 20. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel hdfs dfsadmin Algunas opciones (usar hdfs dfsadmin comando) Comando Significado -help Ayuda -report Muestra estadísticas del filesystem -setQuota Fija una cuota en el número de nombres en un directorio (nº de ficheros/directorios) -clrQuota Borra la cuota de nombres -setSpaceQuota Fija una cuota en el espacio ocupado en un directorio -clrSpaceQuota Borra la cuota de espacio -refreshNodes Actualiza los nodos que se pueden conectar -safemode fija o chequea el safe mode -saveNameSpace en safe mode, salva el filesystem en memoria a un nuevo fichero fsimage y resetea el fichero edits Hadoop 17/55
  • 21. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel hdfs fsck Chequea la salud de los ficheros en HDFS Chequea los bloques: Over-replicated: con replicas de más Under-replicated: con replicas de menos Misreplicated: replicas mal colocadas Corruptos Missing replicas: sin réplicas Ejemplos: Chequea recursivamente todo el HDFS hdfs fsck / Informa del número de bloques de un fichero y su localización hdfs fsck /user/pepe/foo -files -blocks -racks Hadoop 18/55
  • 22. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Problemas con el Namenode El Namenode es un single point of failure (SPOF) Si falla es imposible acceder a los datos Posibilidad de recuperación a partir de los checkpoints Conveniente guardar varias réplicas de los datos del namenode (RAID, indicar en dfs.namenode.name.dir directorios en diferentes máquinas, etc) Mejoras en la versión 2.0 HDFS High-Availability HDFS Federation Hadoop 19/55
  • 23. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel HDFS High-Availability Un par de Namenodes en configuración activo-standby si falla el Namenode activo, el otro ocupa su lugar Consideraciones Los Namenodes deben usar un almacenamiento compartido de alta disponibilidad Los Datanodes deben enviar informes de bloques a los dos Namenodes (el block mapping va en memoria, no en disco) Los Clientes deben manejar el fallo del Namenode de forma transparente Más información: hadoop.apache.org/docs/stable3/hadoop-project- dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html, hadoop.apache.org/docs/stable3/hadoop-project-dist/hadoop- hdfs/HDFSHighAvailabilityWithQJM.html Hadoop 20/55
  • 24. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel HDFS Federation El Namenode mantiene, en memoria, referencias a cada fichero y bloque en el filesystem problemas de escalabilidad HDF Federation, introducida en la versión 2.0 Permite usar varios Namenodes Cada uno gestiona una porción del espacio de nombres del filesystem Los Namenodes no se coordinan entre sí Cada Datanodes se registra con todos los Namenodes Más información: hadoop.apache.org/docs/stable3/hadoop-project- dist/hadoop-hdfs/Federation.html Hadoop 21/55
  • 25. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Conceptos YARN (I) Resource manager arbitra los recursos entre las aplicaciones en el sistema demonio global, obtiene datos del estado del cluster de los node managers dos componentes: Scheduler: planifica aplicaciones en base a sus requerimientos de recusos (se basa en el concepto de Container de recursos) Applications Manager: acepta trabajos, negocia containers y gestiona fallos de los Application Masters Node managers uno por nodo monitorizan los recursos del cluster (containers) Hadoop 22/55
  • 26. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Conceptos YARN (II) Application masters uno por aplicación gestiona el ciclo de vida de la aplicación solicita recursos (containers) al Resource manager y ejecuta la aplicación en esos containers trabaja con los Node managers para ejecutar y monitorizar las tareas permiten que diferentes tipos de aplicaciones (no solo MapReduce) se ejecuten en el cluster Splits Trozos en los que se divide la entrada a una tarea MapReduce Aproximadamente del tamaño de 1 bloque (128 o 64 MB) Hadoop 23/55
  • 27. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Elementos de control YARN Fuente: A. Murthy, V. Vavilapalli, “Apache Hadoop YARN”, Addison-Wesley, marzo 2014 Hadoop 24/55
  • 28. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Comando yarn Permite lanzar y gestionar trabajos en YARN: yarn jar: ejecuta un fichero jar yarn app: información sobre las aplicaciones ejecutándose en YARN yarn container: información sobre los contenedores yarn node: información sobre los nodos yarn top: información sobre el uso del cluster yarn rmadmin: comandos para la administración del cluster Más información: hadoop.apache.org/docs/stable3/hadoop-yarn/hadoop- yarn-site/YarnCommands.html Hadoop 25/55
  • 29. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Mapreduce en Hadoop Hadoop incorpora una implementación de MapReduce Programable en Java Uso de otros lenguajes mediante sockets (C++) o Streaming (Python, Ruby, etc.) Hadoop 26/55
  • 30. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Índice 1 Arquitectura de Hadoop Almacenamiento con HDFS Gestión de recursos con YARN Programación MapReduce 2 Programación MapReduce con Java Compresión 3 Otros lenguajes con Hadoop Streaming 4 Tecnologías de alto nivel Pig Hive Hadoop
  • 31. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Java MapReduce en Hadoop Un programa MapReduce en Java debe definir 3 clases: 1. Una clase mapper 2. Una clase reducer 3. Una clase principal, con el método main Pueden crearse como tres clases públicas separadas como una sola, con el método main, y clases internas static para mapper y reducer Hadoop 27/55
  • 32. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Ejemplo MapReduce: WordCount El programa WordCount es el ejemplo canónico de MapReduce Veremos una implementación muy simple Definimos tres clases Java Una clase para la operación Map (WordCountMapper) Una clase para la operación Reduce (WordCountReducer) Una clase de control, para inicializar y lanzar el trabajo MapReduce (WordCountDriver) Hadoop 28/55
  • 33. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Mapper public class WordCountMapper extends Mapper<LongWritable , Text , Text , IntWritable> { @Override public void map(LongWritable key, Text value , Context ctxt ) throws IOException , InterruptedException { Matcher matcher = pat .matcher(value . toString () ) ; while (matcher. find () ) { word. set (matcher. group () . toLowerCase () ) ; ctxt . write (word, one) ; } } private Text word = new Text () ; private final static IntWritable one = new IntWritable (1) ; private Pattern pat = Pattern . compile( " b[a−zA−Z u00C0−uFFFF]+b" ) ; } Hadoop 29/55
  • 34. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Reducer public class WordCountReducer extends Reducer<Text , IntWritable , Text , IntWritable> { @Override public void reduce(Text key, Iterable<IntWritable> values , Context ctxt ) throws IOException , InterruptedException { int sum = 0; for ( IntWritable value : values ) { sum += value . get () ; } ctxt . write (key, new IntWritable (sum) ) ; } } Hadoop 30/55
  • 35. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Driver (I) public class WordCountDriver extends Configured implements Tool { public int run( String [] arg0) throws Exception { i f (arg0 . length != 2) { System. err . printf ( "Usar : %s [ops] <entrada> <salida >n" , getClass () .getSimpleName() ) ; ToolRunner .printGenericCommandUsage(System. err ) ; return −1; } Configuration conf = getConf () ; Job job = Job . getInstance ( conf ) ; job .setJobName( "Word Count" ) ; job . setJarByClass ( getClass () ) ; FileInputFormat . addInputPath( job , new Path(arg0[0]) ) ; FileOutputFormat . setOutputPath( job , new Path(arg0[1]) ) ; Hadoop 31/55
  • 36. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Driver (II) job . setOutputKeyClass(Text . class ) ; job . setOutputValueClass ( IntWritable . class ) ; job .setNumReduceTasks(1) ; job . setMapperClass(WordCountMapper. class ) ; job . setCombinerClass(WordCountReducer. class ) ; job . setReducerClass(WordCountReducer. class ) ; return ( job . waitForCompletion( true ) ? 0 : −1); } public static void main( String [] args) throws Exception { int exitCode = ToolRunner . run(new WordCountDriver () , args) ; System. exit (exitCode) ; } } Hadoop 32/55
  • 37. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Writables Formato de serialización de objetos de Hadoop Transforma objetos en un flujo de bytes para transmisión o almacenamiento Gran número de clases que implementan el interfaz Writable: Objetos primitivos: BooleanWritable, ByteWritable, IntWritable, LongWritable, FloatWritable, DoubleWritable, Text (cadenas UTF-8) Objetos primitivos de longitud variable: VIntWritable, VLongWritable Colecciones: ArrayWritable, ArrayPrimitiveWritable, TwoDArrayWritable, MapWritable, SortedMapWritable Otros: NullWritable, BytesWritable, ObjectWritable, GenericWritable, Hadoop 33/55
  • 38. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Compresión Como vimos en el WordCount, Hadoop lee directamente ficheros comprimidos: Los ficheros se descomprimen automáticamente, usando la terminación del fichero para determinar que codec usar Formato Java/Nativo Splittable Codec zlib/DEFLATE Sí/Sí No DefaultCodec gzip Sí/Sí No GzipCodec bzip2 Sí/Sí Sí BZip2Codec LZO No/Sí No (Sí con preproceso) LzopCodec LZ4 No/Sí No Lz4Codec Snappy No/Sí No SnappyCodec Hadoop 34/55
  • 39. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Compresión Fuente: Kamat, G., Singh, S., “Compression Options in Hadoop - A Tale of Tradeoffs”, Hadoop Summit (San Jose), June 27, 2013 Hadoop 35/55
  • 40. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Compresión Recomendaciones: Usar contenedores binarios como Sequence File o Avro datafile (soportan compresión y splitting) Usar formatos splittables Dividir los ficheros en trozos y comprimirlos por separado (cada trozo comprimido debería ocupar un bloque HDFS) No usar compresión Hadoop 36/55
  • 41. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Índice 1 Arquitectura de Hadoop Almacenamiento con HDFS Gestión de recursos con YARN Programación MapReduce 2 Programación MapReduce con Java Compresión 3 Otros lenguajes con Hadoop Streaming 4 Tecnologías de alto nivel Pig Hive Hadoop
  • 42. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Hadoop Streaming API que permite crear códigos MapReduce en otros lenguajes Utiliza streams Unix como interfaz entre Hadoop y el código Permite usar cualquier lenguaje que pueda leer de la entrada estándar y escribir en la salida estándar (Python, Ruby, etc.) Más información hadoop.apache.org/docs/stable3/hadoop-streaming Hadoop Pipes Interfaz C++ a Hadoop MapReduce Usa sockets como canal de comunicación entre el tasktracker y el proceso C++ que ejecuta el map o el reduce Hadoop 37/55
  • 43. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Ejemplo de streaming WordCount Mapper en Python #! / usr / bin /env python3 import re , sys pattern = ’ b[a−zA−Zu00C0−uFFFF]+b ’ for line in sys . stdin : words = re . findall ( pattern , line . lower () ) for w in words: print ( "{0}t{1}" . format(w, 1) ) Hadoop 38/55
  • 44. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Ejemplo de streaming WordCount Reducer en Python #! / usr / bin /env python3 import sys ( last_key , total ) = (None, 0) for line in sys . stdin : (key, value) = line . strip () . split () i f last_key and last_key != key: print ( "{0}t{1}" . format( last_key , total ) ) ( last_key , total ) = (key, int (value) ) else : ( last_key , total ) = (key, total+int (value) ) i f last_key : print ( "{0}t{1}" . format( last_key , total ) ) Hadoop 39/55
  • 45. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Ejemplo de streaming Ejecución del código Python yarn jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar -files WordCountMapper.py,WordCountReducer.py -input indir -output outdir -mapper WordCountMapper.py -reducer WordCountReducer.py Nota: La opción -files sólo se necesita si se ejecuta en un cluster, para enviar los scripts a los nodos del cluster Hadoop 40/55
  • 46. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Índice 1 Arquitectura de Hadoop Almacenamiento con HDFS Gestión de recursos con YARN Programación MapReduce 2 Programación MapReduce con Java Compresión 3 Otros lenguajes con Hadoop Streaming 4 Tecnologías de alto nivel Pig Hive Hadoop
  • 47. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Tecnologías relacionadas (I) Diversas tecnologías relacionadas: Pig: lenguaje data-flow de alto nivel para facilitar la programación MapReduce Hive: infraestructura de data-warehouse construida sobre Hadoop Spark: motor de procesamiento de datos de caracter general compatible con datos Hadoop Oozie, Crunch, Cascading, Hamake: planificadores de workflows para gestionar trabajos Hadoop Tez: ejecución de DAGs de tareas complejos para queries interactivas Storm: procesamiento de flujos de datos (stream processing) Impala: queries en tiempo real para Hadoop Twill: abstracción sobre YARN que reduce la complejidad de desarrollar aplicaciones distribuidas Hadoop 41/55
  • 48. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Tecnologías relacionadas (II) HBase: base de datos distribuida no-relacional (NoSQL) que corre sobre HDFS (inspirado en Google BigTable) Sqoop: transferencia eficiente de datos eficiente entre Hadoop y bases de datos relacionales Parquet: formato de almacenamiento columnar para almacenamiento eficiente de datos anidados Ambari: herramienta basada en web para aprovisionar, gestionar y monitorizar clusters Hadoop Hue: interfaz web para simplificar el uso de Hadoop ZooKeeper: servicio centralizado de configuración, nombrado, sincronización distribuida y servicios de grupos para grandes sistemas distribuidos BigTop: empaquetamiento y tests para el ecosistema Hadoop Hadoop 42/55
  • 49. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Tecnologías relacionadas (III) HCatalog: interfaces para permitir el acceso al Hive metastore desde diversas herramientas WebHCat: API REST-like para HCatalog (antes Templeton) Falcon: solución para el procesamiento y gestión de datos para Hadoop (movimiento. coordinación, gestión del ciclo de vida, descubrimiento). Slider: aplicación para desplegar aplicaciones distribuidas existentes en YARN (aplicaciones long-running) Hama: framework de computación Bulk Synchronous Parallel sobre HDFS Flume: obtención, agregación y movimiento de grandes ficheros de log a HDFS NiFi: automatización del flujo de datos entre sistemas Hadoop 43/55
  • 50. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Tecnologías relacionadas (IV) Knox: REST API Gateway para interactuar con clusters Hadoop incorporando seguridad (autenticación/autorización/auditoría) Twister: aplicaciones MapReduce iterativas Mahout: algoritmos escalables de machine learning y minería de datos sobre Hadoop Chukwa: sistema de recogida de datos para monitorizar grandes sistemas distribuidos Flink: procesamiento in-memory y de streams (similar a Spark) Harp: abstracciones para datos y comunicaciones en el procesamiento Big Data Pydoop: Python API para Hadoop Perldoop: Traducción de códigos MR en Perl a Java Más ejemplos en https://hadoopecosystemtable.github.io/ Hadoop 44/55
  • 51. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Pig Iniciado en Yahoo! Research Eleva el nivel de abstracción para procesar grandes conjuntos de datos Facilita centrarse en el “qué” en vez de en el “cómo” Expresa secuencias de trabajos MapReduce Modelo de datos: “bags” anidadas de items “Pig bag”: colección de tuplas Proporciona operadores relacionales (JOIN, GROUP BY, etc.) Fácil definir y usar funciones definidas por el usuario (UDFs) escritas en Java Hadoop 45/55
  • 52. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Pig Dos elementos principales: Un lenguaje propio: Pig Latin Un entorno de ejecución: local o Hadoop Programas ejecutados como: Scripts en Pig Latin Grunt: shell interactivo para ejecutar comandos Pig Comandos Pig ejecutados desde Java PigPen: entorno de desarrollo para Eclipse Hadoop 46/55
  • 53. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Ejemplo en Pig Fichero con datos de usuarios Fichero con lista de páginas visitadas por los usuarios Buscamos: 5 páginas más visitadas por usuarios con edades entre 18 y 25 años Carga usuarios Filtra por edad Carga páginas Une por nombre Agrupa por URL Cuenta clicks Ordena por clicks Toma los 5 primeros Fuente http://wiki.apache.org/pig-data/attachments/PigTalksPapers/attachments/ApacheConEurope09.ppt Hadoop 47/55
  • 54. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel En Pig Latin Users = load ’users’ as (name, age); Filtered = filter Users by age >= 18 and age <= 25; Pages = load ’pages’ as (user, url); Joined = join Filtered by name, Pages by user; Grouped = group Joined by url; Summed = foreach Grouped generate group, count(Joined) as clicks; Sorted = order Summed by clicks desc; Top5 = limit Sorted 5; store Top5 into ’top5sites’; Hadoop 48/55
  • 55. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Traslación directa Los componentes del trabajo se trasladan de forma natural Carga usuarios Filtra por edad Carga páginas Une por nombre Agrupa por URL Cuenta clicks Ordena por clicks Toma los 5 primeros Users = load ... Filtered = filter … Pages = load … Joined = join … Grouped = group … Summed = … count()… Sorted = order … Top5 = limit … Hadoop 49/55
  • 56. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Traslación directa Los componentes del trabajo se trasladan de forma natural Carga usuarios Filtra por edad Carga páginas Une por nombre Agrupa por URL Cuenta clicks Ordena por clicks Toma los 5 primeros Users = load ... Filtered = filter … Pages = load … Joined = join … Grouped = group … Summed = … count()… Sorted = order … Top5 = limit … Job 1 Job 2 Job 3 Hadoop 49/55
  • 57. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Instalación de Pig La instalación de Pig es muy simple 1. Descargar el fichero pig-versión.tar.gz de pig.apache.org/releases.html en el front-end 2. Destareadlo en nuestro $HOME 3. Definir variables de entorno: export PIG_INSTALL=$HOME/pig-versión export PATH=$PATH:$PIG_INSTALL/bin Ejecución: pig o pig -x mapreduce: ejecución en Hadoop (usa la configuración de Hadoop del sistema) pig -x local: ejecución en local Hadoop 50/55
  • 58. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Hive Desarrollado en Facebook “Base de datos relacional” sobre Hadoop Soporta el análisis de grandes datasets en filesystems compatibles con Hadoop (HDFS, S3, ...) HiveQL: dialecto de SQL Peticiones HiveQL se convierten en un grafo dirigido acíclico de trabajos MapReduce Organiza los datos del filesystem en tablas Listas de metadatos (p.e. esquemas de tablas) almacenados en una base de datos (por defecto, Apache Derby) Soporta particionado de tablas, clustering, tipos de datos complejos, etc. Puede llamar a scripts de Hadoop Streaming desde HiveQL Hadoop 51/55
  • 59. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Ejemplo de particiones y buckets CREATE TABLE order ( username STRING, orderdate STRING, amount DOUBLE, ) PARTITIONED BY ( country STRING) CLUSTERED BY (username) INTO 25 BUCKETS; Se crea una partición por país Se crean 25 buckets Los datos de un usuario siempre al mismo bucket Un bucket puede tener datos de múltiples usuarios Se usa una función hash para determinar el bucket al que va cada usuario Hadoop 52/55
  • 60. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Ejemplo Hive Encontrar las 5 páginas más visitadas por usuarios entre 18-25 años SELECT p. url , COUNT(1) as clicks FROM users u JOIN page_views p ON (u.name = p. user) WHERE u.age >= 18 AND u.age <= 25 GROUP BY p. url ORDER BY clicks LIMIT 5; Filtra la vista de páginas usando un script Python SELECT TRANSFORM(p. user , p. date) USING ’map_script .py ’ AS dt , uid CLUSTER BY dt FROM page_views p; Hadoop 53/55
  • 61. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Instalación de Hive La instalación de Hive es sencilla 1. Descargar el fichero tar.gz con la versión estable de Hive de hive.apache.org/downloads.html 2. Destareadlo en nuestro $HOME 3. Definir variables de entorno: export HIVE_HOME=$HOME/hive-version export PATH=$PATH:$HIVE_HOME/bin Conectarse al NameNode, y como usuario hdmaster crear el siguiente directorio hdfs dfs -mkdir -p /user/hive/warehouse Dadle permisos para que todos los usuarios puedan usar hive hdfs dfs -chmod 1777 /user/hive/warehouse Para ejecutarlo, simplemente comando hive Hadoop 54/55
  • 62. Arquitectura de Hadoop Programación MapReduce con Java Otros lenguajes con Hadoop Streaming Tecnologías de alto nivel Ejecución Hive Igual que Pig, Hive tiene un shell para ejecución interactiva En el prompt de hive se pueden ir ejecutando una a una las instrucciones Hive También se pueden ejecutar scripts Con hive -f script.hive ejecutaríamos el script completo Además, con hive -e 'comando_hive' se puede ejecutar una orden simple Hadoop 55/55