SlideShare a Scribd company logo
1 of 147
Download to read offline
Apache Hadoop
Tomás Fernández Pena
VII Seminario de Invierno, Red CAPAP-H
29 de enero de 2016
Material bajo licencia Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
citius.usc.es
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Índice
1 Big Data
2 Apache Hadoop
3 HDFS
4 YARN
5 MapReduce
6 Programación MapReduce en Hadoop
Programación Java
Alternativas a Java
Apache Hadoop, VII Seminario de Invierno
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Índice
1 Big Data
2 Apache Hadoop
3 HDFS
4 YARN
5 MapReduce
6 Programación MapReduce en Hadoop
Programación Java
Alternativas a Java
Apache Hadoop, VII Seminario de Invierno
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
¿Qué es Big Data?
Wikipedia
In information technology, big data is a collection of data sets so large
and complex that it becomes difficult to process using on-hand database
management tools or traditional data processing applications. The
challenges include capture, curation, storage, search, sharing, analysis,
and visualization.
Apache Hadoop, VII Seminario de Invierno 1/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Características del Big Data
Las 5 Vs del BigData
Volume enorme cantidad de datos generados
Velocity rapidez con la que se generan y mueven esos datos
Variety datos de múltiples tipos, estructurados y
no-estructurados: texto, datos de sensores, audio, vídeo,
click streams, ficheros de log, etc.
Veracity datos correctos o incorrectos
Value capacidad de extraer valor de los datos
Apache Hadoop, VII Seminario de Invierno 2/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Aluvión de datos
El mundo está creando más bits que nunca: en 2013, se calcula unos 4,4
Zettabytes (4, 4 × 1021
), y se estiman unos 44 ZB en 2020
La cantidad de datos se dobla cada dos años
Apache Hadoop, VII Seminario de Invierno 3/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Fuentes de datos
Origen de los datos:
Redes sociales
Redes de sensores
Datos de GPS
Datos de genoma
Datos científicos
. . .
Apache Hadoop, VII Seminario de Invierno 4/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Retos tecnológicos (I)
Búsqueda y refinamiento (Lucene, Solr, Nutch, Elasticsearch,
OpenRefine, ScraperWiki, BloomReach)
Serialización (JSON, BSON, Apache Thrift, Apache Avro, Google
Protocol Buffers)
Sistemas de almacenamiento (HDFS, GFS, Lustre, Amazon S3)
Servidores (Amazon EC2, Google Cloud Platform, Azure, OpenShift,
Heroku, Pivotal, Ambari)
Procesamiento (Hadoop, Hive, Pig, Spark, Flink, Tez, Cascading,
Azkaban, Oozie, mrjob, Twister, Flume, Storm, Samza, Falcon,
Cloudera, MapR, Hortonworks, Platfora, Cask)
Apache Hadoop, VII Seminario de Invierno 5/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Retos tecnológicos (II)
Bases de datos (HBase, Cassandra, Accumulo, MongoDB, CouchDB,
Hypertable, Parquet, Riak, Amazon DynamoDB, Google BigTable,
Drill, Sqoop)
Análisis (R, IBM BigSheets, Greenplum, Splunk, Datameer,
WibiData)
Lenguaje natural (Natural Language Toolkit, Apache OpenNLP,
Perldoop, Boilerpipe, Open Calais)
Machine learning (aprendizaje automático) (Weka, Apache Mahout,
scikit-learn, Skytree)
Visualización (R, D3.js, Tableau, IBM Cognos Insight, Google Fusion
Tables)
Apache Hadoop, VII Seminario de Invierno 6/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
BigData Landscape
Apache Hadoop, VII Seminario de Invierno 7/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Programando para el Big Data: historia
Finales de los 90:
crecimiento explosivo de los datos
las empresas no pueden almacenarlos
Tendencia al escalado horizontal de clusters de commodity
hardware
Apache Hadoop, VII Seminario de Invierno 8/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Programando para el Big Data: historia
Circa 2002
Se busca mitigar el riesgo de pérdidas de grandes workloads
distribuidas debidas a fallos de los discos en commodity hardware
Google publica 2 papers:
Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung, “The
Google File System ”, 19th ACM Symposium on Operating Systems
Principles, Lake George, NY, October, 2003.
http://research.google.com/archive/gfs.html,
Jeffrey Dean and Sanjay Ghemawat, “MapReduce: Simplified Data
Processing on Large Clusters”, OSDI’04, San Francisco, CA,
December, 2004.
http://research.google.com/archive/mapreduce.html
Circa 2005
Doug Cutting y Mike Cafarella crean Hadoop
Apache Hadoop, VII Seminario de Invierno 9/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Procesamiento del Big Data
Necesitamos:
Escalabilidad con grandes
volúmenes de datos
1000’s de máquinas
10,000’s de discos
Equipos y redes de bajo coste
poco fiables
elevadas latencias
Facilidad de programación
Tolerancia a fallos automática
Apache Hadoop, VII Seminario de Invierno 10/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Problemas en la ejecución
Los nodos baratos fallan, sobre todo si hay muchos
Tiempo medio entre fallos para 1 nodo = 3 años
Tiempo medio entre fallos para 1000 nodos = 1 día
Solución: implementar tolerancia a fallos en el sistema
Red de bajo coste = elevada latencia
Solución: llevar la computación a los datos
- Minimizar el movimiento de los datos
Dificultad de programación
Solución: un modelo de programación paralelo intensivo en datos
- Los usuarios escriben funciones simples
- El sistema distribuye el trabajo y maneja los fallos
Apache Hadoop, VII Seminario de Invierno 11/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Índice
1 Big Data
2 Apache Hadoop
3 HDFS
4 YARN
5 MapReduce
6 Programación MapReduce en Hadoop
Programación Java
Alternativas a Java
Apache Hadoop, VII Seminario de Invierno
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Apache Hadoop
Framework para el almacenamiento y procesamiento distribuido
Manejo de enormes cantidades de datos en commodity clusters
Escala: petabytes de datos en miles de nodos
Apache Hadoop, VII Seminario de Invierno 12/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Ecosistema Hadoop (I)
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 carácter 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
S4, 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
Apache Hadoop, VII Seminario de Invierno 13/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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 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
Apache Hadoop, VII Seminario de Invierno 14/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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 de todo tipo
Apache Hadoop, VII Seminario de Invierno 15/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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/
Apache Hadoop, VII Seminario de Invierno 16/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Características de Hadoop
Incluye
Almacenamiento: HDFS
Gestor de recursos: YARN, (sólo MapReduce en Hadoop v1)
Modelo de programación: MapReduce
Ventajas
Bajo coste: clusters baratos o cloud
Facilidad de uso
Tolerancia a fallos
Apache Hadoop, VII Seminario de Invierno 17/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Instalación
Instalación relativamente simple: aplicación Java
Paquete fuente: hadoop.apache.org/releases.html
Sistemas preconfigurados proporcionados por empresas como
Cloudera (www.cloudera.com), MapR (www.mapr.com) o
Hortonworks (hortonworks.com), o más específicas como la
distribución de Intel o IBM InfoSphere BigInsight
Modos de funcionamiento:
Standalone: todo en un nodo, para pruebas
Pseudodistribuido: funciona como una instalación completa, pero en
un solo nodo
Totalmente distribuido
Apache Hadoop, VII Seminario de Invierno 18/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Arquitectura Hadoop v1
Apache Hadoop, VII Seminario de Invierno 19/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hadoop v2
Este esquema se ha modificado en Hadoop 2.0 con YARN (Yet Another
Resource Negociator) (HDFS se mantiene)
separa las dos funcionalidades del Jobtracker (gestión de recursos y
job-scheduling/monitorización) en demonios separados
Resource manager (RM): planificador general
Node managers (NM): monitorización, uno por nodo
Application masters (AM): gestión de aplicaciones, uno por aplicación
permite que diferentes tipos de aplicaciones (no solo MapReduce)
se ejecuten en el cluster
Apache Hadoop, VII Seminario de Invierno 20/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Arquitectura Hadoop v2
Apache Hadoop, VII Seminario de Invierno 21/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Modelo Hadoop v1
HDFS
Almacenamiento distribuido
MapReduce
Procesamiento distribuidoHBase
Basededatos
no-relacional
Pig
Scripts
Hive
Query
Otrosproyectos
Oozie,HCatalog,Sqoop,
ZooKeeper,Mahout,...
Apache Hadoop, VII Seminario de Invierno 22/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Modelo Hadoop v2
HDFS
Almacenamiento distribuido
MapReduce
Procesamiento distribuidoHBase
Basededatos
no-relacional
Pig
Scripts
Hive
Query
Otrosproyectos
Oozie,HCatalog,Sqoop,
ZooKeeper,Mahout,...
YARN
Planificador y negociador de recursos
Otrosproyectos
YARN
Apache Hadoop, VII Seminario de Invierno 23/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Índice
1 Big Data
2 Apache Hadoop
3 HDFS
4 YARN
5 MapReduce
6 Programación MapReduce en Hadoop
Programación Java
Alternativas a Java
Apache Hadoop, VII Seminario de Invierno
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
HDFS: Hadoop Distributed File System
Hadoop puede acceder a diferentes tipos de filesystems (local, HDFS,
KFS, S3,. . . )
Se recomienda 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
Apache Hadoop, VII Seminario de Invierno 24/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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 ocultan la latencia de búsqueda y reducen la
carga del NameNode
Apache Hadoop, VII Seminario de Invierno 25/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Conceptos de HDFS (cont.)
Checkpoint node
Mantienen checkpoints del Namenode
debería ejecutarse en un sistema con características similares al
Namenode
Apache Hadoop, VII Seminario de Invierno 26/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Filesystems
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:
hdfs dfs -ls file:///home/pepe
Más opciones:
hdfs dfs -help
Apache Hadoop, VII Seminario de Invierno 27/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Ayuda: hdfs dfs -help
2. Usando el interfaz web (solo lectura)
por defecto, puerto 50070 del Namenode
3. API Java
4. Mediante otras interfaces: WebHDFS, HFTP, HDFS NFS Gateway
Apache Hadoop, VII Seminario de Invierno 28/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 29/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 30/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Más información: http://hadoop.apache.org/docs/current/hadoop-project-
dist/hadoop-common/FileSystemShell.html
Apache Hadoop, VII Seminario de Invierno 31/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 32/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas HDFS (I)
Práctica 1
a) Conéctate al NameNode del cluster: ssh -X
studentXX@urraca.arcos.inf.uc3m.es (password:
.bigdata.2016!)
b) Comprueba si tienes ficheros en tu directorio HDFS
c) Copia el directorio local /home/tfernandez/datos al
directorio datos en tu directorio base en HDFS
d) Cambia a 4 el nivel de replicación del fichero
datos/libros/random_words.txt.bz2
e) Lanza el Firefox en el NameNode y úsalo para ver el interfaz web del
HDFS (http://urraca.arcos.inf.uc3m.es:50070)
- Usa la utilidad “Browse the filesystem” para ver el número de bloques
y la localización de los mismos para el fichero
datos/libros/random_words.txt.bz2
Apache Hadoop, VII Seminario de Invierno 33/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
API Java
API que permite interactuar con los filesystems soportados por Hadoop
Utiliza la clase abstracta
org.apache.hadoop.fs.FileSystem
Otras clases de interés en org.apache.hadoop.fs y
org.apache.hadoop.io
Path: representa a un fichero en un FileSystem
FileStatus: información del fichero
FSDataInputStream: stream de entrada de datos para un
fichero, con acceso aleatorio
FSDataOutputStream: stream de salida de datos para un
fichero
IOUtils: Funcionalidades para I/O
Apache Hadoop, VII Seminario de Invierno 34/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Lectura de ficheros
Método open(Path) de FileSystem
Devuelve un
FSDataInputStream
Interfaces implementadas por FSDataInputStream:
1. Seekable: permite movernos a una posición en el fichero
(método seek)
2. PositionedReadable: permite copiar a un buffer partes de un
fichero
Apache Hadoop, VII Seminario de Invierno 35/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Escritura de ficheros
Dos métodos de FileSystem para abrir los ficheros para escritura:
1. create: crea un fichero para escritura (crea los directorios padre,
si es preciso)
2. append: abre un fichero para añadir datos
Ambos métodos devuelven un FSDataOutputStream
FSDataOutputStream no permite seek (solo escritura al final
del fichero)
El método hflush() garantiza coherencia, pero supone un
overhead (en Hadoop v1 método sync())
El método hsync() garantiza que los datos se mandan a disco
(pero pueden estar en la caché del disco)
Apache Hadoop, VII Seminario de Invierno 36/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Otras operaciones con ficheros y directorios
Crear un directorio:
Método mkdirs de FileSystem
Información sobre ficheros y directorios:
Métodos getFileStatus y listStatus de FileSystem
Clase FileStatus
Patrones de nombres de ficheros (globbing)
Método globStatus de FileSystem
Interfaz PathFilter, para filtrar con expresiones regulares
Borrar ficheros o directorios, de forma recursiva o no:
Método delete de FileSystem
Apache Hadoop, VII Seminario de Invierno 37/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 38/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas HDFS (II)
Práctica 2:
a) En la máquina virtual, inicia el Eclipse y revisa el programa
FileSystemCat en el proyecto 01-hdfs
b) Utiliza FileSystemCat para ver el fichero un fichero de texto (por
ejemplo datos/quijote.txt)
$ cd ~/SeminarioInvierno/Hadoop-Practicas/
$ cd 01-hdfs/target/classes
$ export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:’.’
$ hdfs cursohadoop.hdfs.FileSystemCat 
> ~/SeminarioInvierno/datos/quijote.txt
c) Completa el programa CopyHalfFile para que copie la mitad
inferior del fichero anterior en el HDFS a otro fichero en otro directorio
del HDFS
Apache Hadoop, VII Seminario de Invierno 39/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas HDFS (II)
Práctica 2 (cont):
d) Llevar el código y probarlo en el cluster
$ scp -rp cursohadoop/ studentXX@urraca.arcos.inf.uc3m.es:~
$ ssh studentXX@urraca.arcos.inf.uc3m.es
...
$ export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:’.’
$ hdfs cursohadoop.hdfs.FileSystemCat datos/quijote.txt
Apache Hadoop, VII Seminario de Invierno 40/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Otras interfaces a HDFS
Otros modos de acceder a HDFS
WebHDFS: proporciona una API REST para acceder a HDFS
mediante HTTP
Activada mediante la propiedad dfs.webhdfs.enabled del
fichero hdfs-site.xml del Namenode (por defecto, true)
HFTP: acceso de solo lectura a HDFS a través de HTTP
HDFS NFS Gateway: soporta NFSv3 y permite que HDFS sea
montado como parte del sistema de ficheros local del cliente
Permite usar HDFS como un sistema de ficheros UNIX local
Permite copiar ficheros de HDFS al sistema de ficheros local y
viceversa
No todas las características están soportadas (p.e. no permite
random writes ni enlaces duros)
Apache Hadoop, VII Seminario de Invierno 41/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 42/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Práctica HDFS (III)
Práctica 3:
En el cluster, ejecuta la siguiente instrucción para leer un fichero
usando WebHDFS
$ curl -i -L 
"http://urraca.arcos.inf.uc3m.es:50070/webhdfs/v1/
user/studentXX/datos/quijote.txt?op=OPEN"
Apache Hadoop, VII Seminario de Invierno 43/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 44/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
sbin/start-balancer.sh: redistribuye bloques entre
datanodes
Apache Hadoop, VII Seminario de Invierno 45/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 46/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 47/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 48/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas HDFS (IV)
Práctica 4:
a) Haz un chequeo de tu directorio en HDFS
b) Haz un chequeo más detallado de los ficheros en el directorio
datos/patentes
Apache Hadoop, VII Seminario de Invierno 49/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Lectura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
1: open
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
Apache Hadoop, VII Seminario de Invierno 50/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Lectura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
InputStream
1: open
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: obtiene la
localización de
los bloques
Apache Hadoop, VII Seminario de Invierno 50/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Lectura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
InputStream
1: open
3: read
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: obtiene la
localización de
los bloques
Apache Hadoop, VII Seminario de Invierno 50/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Lectura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
InputStream
1: open
3: read
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: obtiene la
localización de
los bloques
4: read
Apache Hadoop, VII Seminario de Invierno 50/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Lectura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
InputStream
1: open
3: read
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: obtiene la
localización de
los bloques
4: read
5: read
Apache Hadoop, VII Seminario de Invierno 50/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Lectura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
InputStream
1: open
3: read
6: close
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: obtiene la
localización de
los bloques
4: read
5: read
Apache Hadoop, VII Seminario de Invierno 50/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Escritura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
1: create
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
Pipeline de
Datanodes
Apache Hadoop, VII Seminario de Invierno 51/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Escritura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
OutputStream
1: create
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: create
Pipeline de
Datanodes
Apache Hadoop, VII Seminario de Invierno 51/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Escritura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
OutputStream
1: create
3: write
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: create
Pipeline de
Datanodes
Apache Hadoop, VII Seminario de Invierno 51/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Escritura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
OutputStream
1: create
3: write
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: create
4: write packet
4 4
Pipeline de
Datanodes
Apache Hadoop, VII Seminario de Invierno 51/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Escritura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
OutputStream
1: create
3: write
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: create
4: write packet 5: ack packet
5 5
4 4
Pipeline de
Datanodes
Apache Hadoop, VII Seminario de Invierno 51/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Escritura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
OutputStream
1: create
3: write
6: close
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: create
4: write packet 5: ack packet
5 5
4 4
Pipeline de
Datanodes
Apache Hadoop, VII Seminario de Invierno 51/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Escritura de datos en HDFS
Cliente
HDFS
Distributed
FileSystem
FSData
OutputStream
1: create
3: write
6: close
Nodo cliente
JVM cliente Namenode
Namenode
Datanode
Datanode
Datanode
Datanode
Datanode
Datanode
2: create
4: write packet 5: ack packet
7: complete
5 5
4 4
Pipeline de
Datanodes
Apache Hadoop, VII Seminario de Invierno 51/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 52/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Modelo de coherencia
Para aumentar el rendimiento, HDFS no es POSIX compliant en la
escritura de ficheros
Después de crear un fichero, este es visible es el espacio de
nombres del filesystem,
pero, no se garantiza que sus datos sean visibles
Forzar la visibilidad
Cerrar el stream de salida con close()
Utilizar el método sync() en Hadoop v1, o hflush() en v2, de
la clase FSDataOutputStream
Apache Hadoop, VII Seminario de Invierno 53/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Propiedades configurables
Múltiples propiedades configurables (fichero hdfs-site.xml)
dfs.namenode.name.dir: lista (separada por comas) de
directorios donde el namenode guarda sus metadatos (una copia en
cada directorio), por defecto
file://$hadoop.tmp.dir/dfs/name
dfs.datanode.data.dir: lista (separada por comas) de
directorios donde los datanodes guarda los bloques de datos (cada
bloque en sólo uno de los directorios), por defecto
file://$hadoop.tmp.dir/dfs/data
dfs.namenode.checkpoint.dir: lista (separada por
comas) de directorios donde el CheckPoint node guarda los
checkpoints (una copia en cada directorio), por defecto
file://$hadoop.tmp.dir/dfs/namesecondary
dfs.blocksize: tamaño de bloque para nuevos ficheros (por
defecto, 128MB)
dfs.replication: nº de réplicas por bloque, por defecto 3
Apache Hadoop, VII Seminario de Invierno 54/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 55/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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/current/hadoop-project-
dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html,
hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-
hdfs/HDFSHighAvailabilityWithNFS.html
Apache Hadoop, VII Seminario de Invierno 56/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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/current/hadoop-project-
dist/hadoop-hdfs/Federation.html
Apache Hadoop, VII Seminario de Invierno 57/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Índice
1 Big Data
2 Apache Hadoop
3 HDFS
4 YARN
5 MapReduce
6 Programación MapReduce en Hadoop
Programación Java
Alternativas a Java
Apache Hadoop, VII Seminario de Invierno
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Terminología Hadoop v1 (MapReduce)
Jobtracker
Coordina todos los trabajos
Envía tareas a los tasktrackers
Mantiene información sobre el progreso de cada tarea
Tasktrackers
Realizan las tareas
Envían informes de progreso al Jobtracker
Splits
Trozos en los que se divide la entrada a una tarea MapReduce
Normalmente del tamaño de 1 bloque (64 MB)
Apache Hadoop, VII Seminario de Invierno 58/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Elementos de control Hadoop v1
Fuente: A. Murthy, V. Vavilapalli, “Apache Hadoop YARN”, Addison-Wesley, marzo 2014Apache Hadoop, VII Seminario de Invierno 59/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
YARN: the Data Operating System
Un único Jobtracker es un cuello de botella en grandes clusters (más de
4000 nodos)
YARN (Yet Another Resource Negociator): nueva arquitectura
Característica principal:
separa las dos funcionalidades del Jobtracker (gestión de recursos y
job-scheduling/monitorización) en demonios separados: resource
manager, node managers y application masters
MapReduce es uno de los tipos de aplicación que pueden correr
sobre YARN
Más información:
hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site
wiki.apache.org/hadoop/PoweredByYarn
Apache Hadoop, VII Seminario de Invierno 60/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
YARN
Fuente: www.slideshare.net/Hadoop_Summit/apache-hadoop-yarn-present-and-future
Apache Hadoop, VII Seminario de Invierno 61/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Elementos de control YARN
Fuente: A. Murthy, V. Vavilapalli, “Apache Hadoop YARN”, Addison-Wesley, marzo 2014
Apache Hadoop, VII Seminario de Invierno 62/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Demonios 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)
Apache Hadoop, VII Seminario de Invierno 63/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Demonios 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
Apache Hadoop, VII Seminario de Invierno 64/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Índice
1 Big Data
2 Apache Hadoop
3 HDFS
4 YARN
5 MapReduce
6 Programación MapReduce en Hadoop
Programación Java
Alternativas a Java
Apache Hadoop, VII Seminario de Invierno
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Modelo de programación MapReduce
Inspirado en la programación funcional
Operación Map:
square n = n * n
map op [] = []
map op (x: xs) = op x : map op xs
map (square) [1..5] => [1,4,9,16,25]
Operación Reduce:
reduce op (x : [ ] ) = x
reduce op (x: xs) = (op x (reduce op xs) )
reduce (+) (map (square) [1..5]) => 55
Apache Hadoop, VII Seminario de Invierno 65/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Modelo de programación
Entrada y salida: listas de pares clave/valor
El programador especifica las funciones map y reduce
Función Map: genera claves/valores intermedios
map(K1, V1) → list(K2, V2)
Para cada K1 y V1 se obtiene una lista intermedia
(K2, V2) es un par clave/valor intermedio
Funcion Reduce: combina los valores intermedios para cada clave
particular
reduce(K2, list(V2)) → (K3, list(V3))
Para cada clave de salida K3 se genera una lista de valores
- list(V3) suele tener un único valor
- A menudo, K3 = K2
Apache Hadoop, VII Seminario de Invierno 66/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Automatización del proceso
map map map
Entradas: (Ki
1,Vi
1) Entradas: (Kj
1,Vj
1) Entradas: (Kk
1,Vk
1)
(Ki
2,Vi
2) (Ki
2,Vi
2) (Ki
2,Vi
2) (Ki
2,Vi
2) (Ki
2,Vi
2) (Ki
2,Vi
2) (Ki
2,Vi
2) (Ki
2,Vi
2) (Ki
2,Vi
2)
Sistema de ficheros distribuido
Barajado y ordenación por valores de claves
reduce reduce
(Ka
2,list(Va
2)) (Kb
2,list(Vb
2)) (Kc
2,list(Vc
2)) (Kd
2,list(Vd
2))
(Ka
3,Va
3) (Kb
3,Vb
3) (Kc
3,Vc
3) (Kd
3,Vd
3)
Apache Hadoop, VII Seminario de Invierno 67/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Ejemplo: WordCount
Cuenta las ocurrencias de cada palabra en ficheros de texto
Entrada:
K1 = ∅, V1 = línea
Salida:
pares (palabra, nº de ocurrencias)
Pseudocódigo del Map
map(key, value):
// key: nada, value: línea de texto
for each word w in value emit(w, 1)
Pseudocódigo del Reduce
reduce(key, values):
// key: palabra; values: un iterador sobre los 1s
emit(key, sum(values))
Apache Hadoop, VII Seminario de Invierno 68/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Ejemplo: WordCount
map
En un lugar
de la Mancha
Más vale la pena
en el rostro que
la mancha en
el corazón
El amor es deseo
de belleza
map
map
reduce
reduce
en,1
la,1
mancha,1
vale,1
la,1
pena,1
un,1
lugar,1
de,1
más,1
Entrada Map Shuffle & Sort Reduce Salida
Apache Hadoop, VII Seminario de Invierno 69/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Ejemplo: WordCount
map
En un lugar
de la Mancha
Más vale la pena
en el rostro que
la mancha en
el corazón
El amor es deseo
de belleza
map
map
reduce
reduce
Entrada Map Shuffle & Sort Reduce Salida
en,1
rostro,1
la,1
mancha,1
en,1
el,1
que,1
Apache Hadoop, VII Seminario de Invierno 69/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Ejemplo: WordCount
map
En un lugar
de la Mancha
Más vale la pena
en el rostro que
la mancha en
el corazón
El amor es deseo
de belleza
map
map
reduce
reduce
Entrada Map Shuffle & Sort Reduce Salida
corazón,1
amor,1
deseo,1
el,1
el,1
es,1
de,1
belleza,1
Apache Hadoop, VII Seminario de Invierno 69/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Ejemplo: WordCount
map
En un lugar
de la Mancha
Más vale la pena
en el rostro que
la mancha en
el corazón
El amor es deseo
de belleza
amor, 1
corazón, 1
deseo, 1
en, 3
la, 3
mancha, 2
pena, 1
rostro, 1
vale, 1
belleza, 1
de, 2
el, 3
es, 1
lugar, 1
más, 1
que, 1
un, 1
map
map
reduce
reduce
Entrada Map Shuffle & Sort Reduce Salida
amor,1
corazón,1
deseo,1
en,1,1,1
la,1,1,1
mancha,1,1
pena,1
rostro,1
vale,1
belleza,1
de,1,1
el,1,1,1
es,1
lugar,1
más,1
que,1
un,1
Apache Hadoop, VII Seminario de Invierno 69/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Características de la ejecución
Sistema de ficheros distribuido para gestionar los datos
GFS (Google File System), HDFS (Hadoop Distributed FS)
Ficheros divididos en bloques (chunks o splits) grandes (64-128 MB
en HDFS), con replicación
Arquitectura master-worker
Los map workers se inician en el mismo nodo o rack que sus datos
de entrada
Minimiza el uso de la red
Los map workers graban su salida en el disco local antes de servirla
a los reduce workers
Permite recuperar una tarea reduce en caso de fallo
Los reduce workers graban su salida en el sistema distribuido
Replicación en los resultados
Un fichero de salida por cada reduce
Apache Hadoop, VII Seminario de Invierno 70/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Características de la ejecución
Programa de
usuario
master
worker
worker
worker
worker
worker
split 0
split 1
split 2
fichero de
salida 0
fichero de
salida 1
fork fork fork
asigna
maps asigna
reduces
DFS Local DFS
Read
Local
write
Write
Remote read,
sort & shuffle
Apache Hadoop, VII Seminario de Invierno 71/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Diferencia entre bloques y splits
Apache Hadoop, VII Seminario de Invierno 72/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Tolerancia a fallos
Mediante heartbeats, el Master detecta fallos en los workers
Si falla una tarea map o reduce
La tarea se reintenta en otro nodo
- Correcto para los maps porque no tienen dependencias
- Correcto para los reduces porque las salidas de los maps están en
disco
- Necesario que las tareas no tengas efectos colaterales
Si la misma tarea falla repetidamente, el trabajo MapReduce se
aborta y se notifica al usuario (ajustable)
Si falla un nodo completo
Relanzar sus tareas en curso en otros nodos
Reejecutar cualquier map que se hubiera ejecutado en el nodo
- Necesario pues las salidas de los maps se perdieron
Apache Hadoop, VII Seminario de Invierno 73/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Tolerancia a fallos
Si una tarea no progresa (straggler o rezagada)
Se lanza una segunda copia de la tarea en otro nodo (ejecución
especulativa)
Se toma la salida de la tarea que acabe antes, y se mata a la otra
Situación bastante común en clusters grandes
- Debidos a errores hardware, bugs software, fallos de configuración,
etc.
- Una tarea rezagada puede enlentecer de forma importante un trabajo
Si falla el Master
Se intenta relanzar de nuevo
- Las tareas en proceso o acabadas durante el reinicio, se relanzan
Si continua fallando, el trabajo se aborta y se le notifica al usuario
Apache Hadoop, VII Seminario de Invierno 74/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Número de Maps y Reduces
M tareas map y R tareas reduce
Hacer M+R mucho mayor que el número de PEs disponibles
Mejora la utilización del cluster
Habitualmente, M igual al número de splits de entrada
Mejora el balance de carga dinámico y acelera la recuperación
cuando falla un worker
R menor que M
Salida repartida en R ficheros
Valor ajustable por el usuario
Función del tipo de problema y los recursos disponibles (memoria, nº
cores,. . . )
Ver wiki.apache.org/hadoop/HowManyMapsAndReduces
Apache Hadoop, VII Seminario de Invierno 75/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Combinador
Un combinador (Combiner) es una función de agregación local para
las claves repetidas de cada map
Puede ahorrar ancho de banda al reducir el tamaño de los datos
intermedios del map
combiner(K
m
2 , list(V
m
2 )) → (K
m
3 , list(V
m
3 ))
Habitualmente, misma función que el reducer
Se ejecuta en el mismo nodo que el map
Solo puede utilizarse si la función reduce es commutativa y
asociativa
Apache Hadoop, VII Seminario de Invierno 76/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Combinador
map
En un lugar
de la Mancha
Más vale la pena
en el rostro que
la mancha en
el corazón
El amor es deseo
de belleza
map
map
reduce
reduce
Entrada Map Shuffle &
Sort
Reduce Salida
en,1
el,1
rostro,1
que,1
la,1
mancha,1
en,1 el,1
que,1
combiner
combiner
combiner
en,2
rostro,1
la,1
mancha,1
Combiner
Apache Hadoop, VII Seminario de Invierno 77/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Particionador
El particionador (shuffler) por defecto es un hash de las claves:
hash(K) mod R
Garantiza:
Claves iguales van al mismo reducer
Carga de los reducers relativamente bien balanceada (en muchos
casos)
Hay situaciones en las que puede interesar cambiarlo:
Ejemplo: hash(hostame(URL)) mod R
Todas las URLs de cada host se juntan en el mismo fichero de salida
Apache Hadoop, VII Seminario de Invierno 78/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Índice
1 Big Data
2 Apache Hadoop
3 HDFS
4 YARN
5 MapReduce
6 Programación MapReduce en Hadoop
Programación Java
Alternativas a Java
Apache Hadoop, VII Seminario de Invierno
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 79/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Nueva y vieja API
Los programas pueden usar la nueva API (recomendado) o la antigua
Ambas APIs son incompatibles
Utilizaremos siempre la API nueva
Disponible desde Hadoop 0.20.0
Definida en el paquete org.apache.hadoop.mapreduce
Algunas librerías presentes en la API vieja no han sido portadas
API vieja (desaconsejada)
Definida en el paquete org.apache.hadoop.mapred
Apache Hadoop, VII Seminario de Invierno 80/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
WordCount 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" ) ;
}
Apache Hadoop, VII Seminario de Invierno 81/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
WordCount Mapper
Extiende la clase
Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
Debe sobrescribir el método
map(KEYIN key, VALUEIN value, Mapper.Context
context)
Usa una instancia de Context en la que escribe los pares
clave/valor de salida
Debe utilizar tipos de datos que implementen la interfaz
Writable (como LongWritable o Text)
optimizados para serialización
Otros métodos que se pueden sobrescribir:
setup(Context context) Llamado una vez al comienzo de la
tarea
cleanup(Context context) Llamado una vez al final de la
tarea
Apache Hadoop, VII Seminario de Invierno 82/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
WordCount 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) ) ;
}
}
Apache Hadoop, VII Seminario de Invierno 83/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
WordCount Reducer
Extiende la clase
Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
Debe sobrescribir el método
reduce(KEYIN key, Iterable<VALUEIN> values,
Reducer.Context context)
Usa una instancia de Context en la que escribe los pares
clave/valor de salida
Debe utilizar tipos de datos que implementen la interfaz
Writable (como LongWritable o Text)
optimizados para serialización
Otros métodos que se pueden sobrescribir:
setup(Context context) Llamado una vez al comienzo de la
tarea
cleanup(Context context) Llamado una vez al final de la
tarea
Apache Hadoop, VII Seminario de Invierno 84/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
WordCount 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]) ) ;
Apache Hadoop, VII Seminario de Invierno 85/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
WordCount Driver (II)
job . setOutputKeyClass(Text . class ) ;
job . setOutputValueClass ( IntWritable . class ) ;
job .setNumReduceTasks(4) ;
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) ;
}
}
Apache Hadoop, VII Seminario de Invierno 86/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
WordCount Driver
Clase Configured: permite acceder a la configuración del
sistema
Método Configuration getConf(): devuelve la
configuración actual
Clase Configuration: proporciona acceso a la configuración
Clase Job: permite configurar, enviar y controlar la ejecución de un
trabajo
Clase FileInputFormat<K,V>: describe los ficheros de
entrada en un trabajo MapReduce
Clase FileOutputFormat<K,V>: describe los ficheros de
entrada en un trabajo MapReduce
Apache Hadoop, VII Seminario de Invierno 87/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
WordCount Driver
Interfaz Tool: interfaz estándar para aplicaciones MapReduce,
soporta el manejo de opciones en línea de comandos
Clase ToolRunner: ejecuta clases que implementan la interfaz
Tool
Clase Path: identifica a un fichero o directorio en el FileSystem
Apache Hadoop, VII Seminario de Invierno 88/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Compilación y ejecución
Preferiblemente, crear un jar con todas las clases y ejecutarlo con:
yarn jar fichero.jar [opciones]
Para gestionar las aplicaciones, utilizad:
en general, la opción application del comando yarn (yarn
application -help para ver las opciones)
para trabajos MapReduce, la opción job del comando mapred
(mapred job -help para ver las opciones)
Más información en
hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-
site/YarnCommands.html
hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-
mapreduce-client-core/MapredCommands.html
Apache Hadoop, VII Seminario de Invierno 89/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 90/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (I)
Práctica 5, programa wordcount (proyecto 02-wordcount)
En la máquina virtual
a) Inicia el Eclipse y revisa el código del WordCount
b) En un terminal, usa maven para crear el fichero jar
c) Prueba a lanzar el jar desde el terminal usando
datos/libros-mini como directorio de entrada
En el cluster:
a) Copia el jar en el cluster y ejecuta el WordCount usando
datos/libros como directorio de entrada
b) Mientras se ejecuta, utiliza el interfaz web de YARN
(http://urraca.arcos.inf.uc3m.es:8088) para analizar su ejecución
Apache Hadoop, VII Seminario de Invierno 91/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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,
Apache Hadoop, VII Seminario de Invierno 92/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Writables a medida
Es posible implementar writables a medida
Implementar la interfaz Writable
Implementar los métodos write(DataOutput out) y
readFields(DataInput in)
Un objeto que se quiera usar como clave debe implementar
WritableComparable
Apache Hadoop, VII Seminario de Invierno 93/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Clase abstracta FileInputFormat<K,V>
Define métodos para añadir uno o varios paths de entrada al trabajo
addInputPath(Job job, Path path), addInputPaths(Job
job, String commaSeparatedPaths)
Clase base para diferentes formatos de entrada concretos
El formato a usar se especifica mediante el método
setInputFormatClass del Job, por ejemplo:
job.setInputFormatClass(TextInputFormat.class)
Apache Hadoop, VII Seminario de Invierno 94/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Formatos de entrada
TextInputFormat: formato por defecto para ficheros de texto
KeyValueTextInputFormat: ficheros de texto con estructura
clave/valor
NLineInputFormat: permite que los mappers reciban un
número fijo de líneas de entrada
SequenceFileInputFormat: secuencias de datos binarios
clave/valor
CombineFileInputFormat: Permite empaquetar varios
ficheros pequeños en un split de entrada de un tamaño
determinado
FixedLengthInputFormat: Usado para leer ficheros con
registros de longitud fija
Apache Hadoop, VII Seminario de Invierno 95/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Formatos de entrada
TextInputFormat:
Formato por defecto
Cada mapper recibe un trozo (split) del fichero y lo procesa línea a
línea
Como clave, toma el offset en bytes en el fichero desde el comienzo
de la línea (LongWritable)
Como valor, toma toda la línea
KeyValueTextInputFormat:
Igual que el anterior, pero separa cada línea en clave/valor
Usa tabulado como separador por defecto
Para cambiar, modificar en el objeto Configuration la propiedad
mapreduce.input.keyvaluelinerecordreader.key.
value.separator
Nota: en la API vieja es key.value.separator.in.input.line
Apache Hadoop, VII Seminario de Invierno 96/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Salida de ficheros
Similar a la entrada: clase abstracta FileOutputFormat<K,V>
Clase base para diversos formatos de salida concretos
TextOutputFormat: formato por defecto para ficheros de texto
- Escribe líneas de texto en formato clave/valor separados por un
tabulado
- Carácter de separación modificable:
mapreduce.output.textoutputformat.separator
API vieja mapred.textoutputformat.separator
SequenceFileOutputFormat: secuencias de datos binarios
clave/valor
MapFileOutputFormat: Un formato de salida que escribe
MapFiles
El formato a usar se especifica mediante el método
setOutputFormatClass del Job
Apache Hadoop, VII Seminario de Invierno 97/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 98/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (II)
Datos de entrada
Fichero de citas de patentes (cite75_99.txt)
Formato: patente,patente_a_la_que_cita
Fichero de descripción de patentes (apat63_99.txt)
Práctica 6, programa citingpatents (proyecto
03-citingpatents)
Objetivo: Crear un programa MapReduce que, para cada patente de
cite75_99.txt, obtenga la lista de las que la citan
Formato salida: patente patente1,patente2...
Mapper:
3858245,3755824 → 3755824 3858245
Reducer:
3755824 {3858245 3858247. . . } → 3755824 3858245,3858247. . .
Utilizar como formato de entrada KeyValueTextInputFormat
Apache Hadoop, VII Seminario de Invierno 99/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (III)
Práctica 7, programa creasequencefile (proyecto
04-creasequencefile)
Hacer un programa MapReduce map-only que lea el fichero
apat63_99.txt, separe los campos y lo guarde como un fichero
Sequence con
clave: el país (Text)
valor: una cadena con la patente y el año separados por coma
(Text)
Se puede ver el contenido del fichero con
hdfs dfs -text dir_salida
Apache Hadoop, VII Seminario de Invierno 100/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 101/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Compresión
Fuente: Kamat, G., Singh, S., “Compression Options in Hadoop - A Tale of Tradeoffs”, Hadoop Summit (San Jose), June 27, 2013
Apache Hadoop, VII Seminario de Invierno 102/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
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
Apache Hadoop, VII Seminario de Invierno 103/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 104/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (IV)
Práctica 8 (proyecto 03-citingpatents)
Modificar el programa CitingPatents para que guarde la salida
comprimida en Gzip
Utilizad los métodos estáticos setCompressOutput y
setOutputCompressorClass de la clase
FileOutputFormat
Apache Hadoop, VII Seminario de Invierno 105/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Encadenamiento de trabajos MapReduce
Es posible encadenar trabajos MapReduce
Basta con definir varios jobs y lanzarlos unos detrás de otros
La salida a disco de un job es leída por el siguiente
Alternativa
Usar las clases ChainMapper y ChainReducer
Permiten encadenar varios mappers seguidos de un reducer y cero
o más mappers adicionales ([MAP+ / REDUCE MAP*])
Reduce los accesos a disco
Para workflows complejos, se puede usar Apache Oozie o Cascading
Apache Hadoop, VII Seminario de Invierno 106/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 107/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (V)
Práctica 9 (proyecto 05-citationnumberbypatent_chained):
para cada patente del fichero cite75_99.txt, obtener el número de
las que la citan
Encadenar CitingPatents con un mapper que cuenta el
número de patentes que citan
Mapper2: 3755824 3858245,3858247. . . → 3755824 9
Haz ese encadenamiento usando ChainMapper y ChainReducer
Ejecución:
$ export LIBJAR = path_a_citingpatents*.jar
$ export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$LIBJAR
$ yarn jar path_to_chained.jar -libjars $LIBJAR 
> path_to_cite75_99.txt path_to_out
Apache Hadoop, VII Seminario de Invierno 108/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Secondary Sort
La ordenación se hace sólo por la clave:
El orden en que aparecen los valores no está fijado
Es posible imponer un orden en el que aparecen los valores:
Hacer que la clave esté compuesta por la clave natural y el valor
natural (objeto WritableComparable)
El comparador de ordenación debe ordenar usando esa clave
compuesta
El particionador debe considerar sólo la clave natural
El comparador de agrupamiento usa una u otra según el caso
Apache Hadoop, VII Seminario de Invierno 109/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Secondary Sort
Ejemplo de clave compuesta
Clave compuesta
Clave Valor
{
{
{Particionar
Ordenar/Agrupar
Se ordena por la clave compuesta [clave, valor]
(job.setSortComparatorClass)
Se particiona por clave (job.setPartitionerClass,
garantiza que las mismas claves van al mismo reducer)
Se agrupa por la clave o la clave compuesta [clave, valor]
dependiendo del problema
(job.setGroupingComparatorClass)
Apache Hadoop, VII Seminario de Invierno 110/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 111/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (VI)
Objetivo
Partiendo del fichero cite75_99.seq, obtener un fichero de
texto con la siguiente información
país año -> nº de patentes ese año
La salida debe estar ordenada por países, y para cada país, por año
(sort secundario)
Debemos usar una clave compuesta [país, año]
Clave compuesta
País Año
{
{
{
Particionar
Ordenar/Agrupar
Apache Hadoop, VII Seminario de Invierno 112/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (VI)
Práctica 10, programa sort.SortSecundario (proyecto
06-sortsecundario)
Se ordena por la clave compuesta [país, año]
(job.setSortComparatorClass)
Se particiona por país (job.setPartitionerClass,
garantiza que los mismos países van al mismo reducer)
Se agrupa por la clave compuesta [país, año]
(job.setGroupingComparatorClass)
Apache Hadoop, VII Seminario de Invierno 113/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Joins de datos de diferentes fuentes
Hacer uniones de datos de diferentes fuentes es complejo en Hadoop
Preferible usar lenguajes de alto nivel como Pig o Hive
En Hadoop hay varias soluciones:
Si un conjunto de datos es grande y el otro pequeño, se puede
replicar el pequeño en todos los nodos usando Distributed Cache
Map-Side joins: el join se realiza antes de llegar a la función map
Los conjuntos de datos deben dividirse en el mismo número de
particiones y estar ordenados por la clave de unión
Reduce-side joins: el join se realiza en el reducer
El mapper etiqueta cada dato con su fuente y usa la clave de unión
como clave de salida
Apache Hadoop, VII Seminario de Invierno 114/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 115/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (VII)
Práctica 11, proyecto 07-simplereducersidejoin
Objetivo: unir datos de dos entradas
(a) Salida de CitingPatents (primera práctica)
(b) Fichero con información de las patentes (apat63_99.txt)
Salida:
patente, país, n_citas
Un mapper diferente para cada entrada
(a) Mapper-a (CNBPTaggedMapper)
3755824 3858245,3858247. . . → 3755824 ''cite'', 9
(b) Mapper-b (PBCMapper)
3755824,1973,4995,1971,''US'',''NY''. . . → 3755824 ''country'', US
Reducer: hace un join de los dos mappers por patente
3755824 ''cite'', 9
3755824 ''country'', US
→ 3755824 US, 9
Apache Hadoop, VII Seminario de Invierno 116/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Localización de dependencias
Mecanismo para copiar recursos (LocalResources) a los nodos del cluster
Hadoop (DistributedCache en Hadoop v1)
Los recursos (ficheros, archivos, librerías) se copian a todos los
nodos una vez por trabajo
Las aplicaciones pueden acceder directamente a estos recursos
Tipos de LocalResources:
FILE: Ficheros normales
ARCHIVE: Ficheros comprimidos (jar, tar, tar.gz, zip) que
descomprime el NodeManager
PATTERN: Híbrido de ARCHIVE y FILE (se mantiene el fichero y se
descomprime parte)
Visibilidad de los LocalResources
PUBLIC: accesibles por todos los usuarios
PRIVATE: compartidos por aplicaciones del mismo usuario en el nodo
APPLICATION: compartidos entre containers de la misma aplicación
Apache Hadoop, VII Seminario de Invierno 117/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Uso en línea de comandos
Si el código usa GenericOptionParser (o ToolRunner), los
ficheros a copiar se indican como parámetro:
-files + lista separada por comas de URIs de los ficheros
-archives + ficheros comprimidos (archivos)
-libjars + JARS para añadir al CLASSPATH
Ejemplo:
yarn jar mr.jar -files ~/fichero in out
Apache Hadoop, VII Seminario de Invierno 118/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Uso desde la aplicación
Métodos definidos en Job
addCacheFile(URI uri): añade un fichero a la cache
addCacheArchive(URI uri): añade un archivo a la cache
addFileToClassPath(Path file): añade un fichero al
CLASSPATH
addArchiveToClassPath(Path file): añade un archivo
al CLASSPATH
URI[] getCacheFiles(): obtiene los ficheros en la cache
URI[] getCacheArchives(): obtiene los archivos en la
cache
Apache Hadoop, VII Seminario de Invierno 119/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Contadores
Hadoop incorpora contadores para obtener datos del trabajo:
Contadores internos: informan sobre el comportamiento de la
ejecución
Contadores definidos por el usuario (interfaz Counter)
Permiten obtener información adicional sobre las tareas
Definidos mediante Java enums, que permiten agrupar contadores
relacionados
Se accede a ellos mediante el método getCounter() del
MapContext o el ReduceContext
Se modifican mediante los métodos del interfaz Counter
Apache Hadoop, VII Seminario de Invierno 120/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 121/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (VIII)
Práctica 12:
Analizar el programa WordCountPRO ()proyecto
08-wordcountpro)
Ejemplo de ejecución:
yarn -jar wordcountpro.jar 
-Dwordcount.case.sensitive=true indir outdir

-skip skipfile.txt
Apache Hadoop, VII Seminario de Invierno 122/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Alternativas a Java
Hadoop Streaming
API que permite crear códigos map-reduce 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/current/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
Apache Hadoop, VII Seminario de Invierno 123/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Hands-on
Apache Hadoop, VII Seminario de Invierno 124/125
Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop
Prácticas MapReduce (IX)
Práctica 13: WordCount en Python (directorio 09-wordcountpython)
$ yarn jar 
$HADOOP_PREFIX/share/hadoop/tools/lib/hadoop-streaming-*.j
-files WordCountMapper.py,WordCountReducer.py 
-input indir -output outdir 
-mapper WordCountMapper.py 
-reducer WordCountReducer.py 
-numReduceTasks 2
Nota: La opción -files sólo se necesita si se ejecuta en un cluster,
para copiar los scripts en los nodos del cluster
Apache Hadoop, VII Seminario de Invierno 125/125

More Related Content

What's hot

Learn Hadoop Administration
Learn Hadoop AdministrationLearn Hadoop Administration
Learn Hadoop AdministrationEdureka!
 
Technical Deck Delta Live Tables.pdf
Technical Deck Delta Live Tables.pdfTechnical Deck Delta Live Tables.pdf
Technical Deck Delta Live Tables.pdfIlham31574
 
Definitive Guide to Select Right Data Warehouse (2020)
Definitive Guide to Select Right Data Warehouse (2020)Definitive Guide to Select Right Data Warehouse (2020)
Definitive Guide to Select Right Data Warehouse (2020)Sprinkle Data Inc
 
Apache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep diveApache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep diveSachin Aggarwal
 
Architect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh ArchitectureArchitect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh ArchitectureDatabricks
 
Big Data Business Wins: Real-time Inventory Tracking with Hadoop
Big Data Business Wins: Real-time Inventory Tracking with HadoopBig Data Business Wins: Real-time Inventory Tracking with Hadoop
Big Data Business Wins: Real-time Inventory Tracking with HadoopDataWorks Summit
 
Time to Talk about Data Mesh
Time to Talk about Data MeshTime to Talk about Data Mesh
Time to Talk about Data MeshLibbySchulze
 
Data Catalog & ETL - Glue & Athena
Data Catalog & ETL - Glue & AthenaData Catalog & ETL - Glue & Athena
Data Catalog & ETL - Glue & AthenaAmazon Web Services
 
Data Lakehouse, Data Mesh, and Data Fabric (r2)
Data Lakehouse, Data Mesh, and Data Fabric (r2)Data Lakehouse, Data Mesh, and Data Fabric (r2)
Data Lakehouse, Data Mesh, and Data Fabric (r2)James Serra
 
Building Lakehouses on Delta Lake with SQL Analytics Primer
Building Lakehouses on Delta Lake with SQL Analytics PrimerBuilding Lakehouses on Delta Lake with SQL Analytics Primer
Building Lakehouses on Delta Lake with SQL Analytics PrimerDatabricks
 
Apache Spark overview
Apache Spark overviewApache Spark overview
Apache Spark overviewDataArt
 
Apache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsApache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsAnton Kirillov
 
Big data architectures and the data lake
Big data architectures and the data lakeBig data architectures and the data lake
Big data architectures and the data lakeJames Serra
 
Data Mesh Part 4 Monolith to Mesh
Data Mesh Part 4 Monolith to MeshData Mesh Part 4 Monolith to Mesh
Data Mesh Part 4 Monolith to MeshJeffrey T. Pollock
 
Security and Data Governance using Apache Ranger and Apache Atlas
Security and Data Governance using Apache Ranger and Apache AtlasSecurity and Data Governance using Apache Ranger and Apache Atlas
Security and Data Governance using Apache Ranger and Apache AtlasDataWorks Summit/Hadoop Summit
 
Hive+Tez: A performance deep dive
Hive+Tez: A performance deep diveHive+Tez: A performance deep dive
Hive+Tez: A performance deep divet3rmin4t0r
 

What's hot (20)

Learn Hadoop Administration
Learn Hadoop AdministrationLearn Hadoop Administration
Learn Hadoop Administration
 
Big data and Hadoop
Big data and HadoopBig data and Hadoop
Big data and Hadoop
 
Technical Deck Delta Live Tables.pdf
Technical Deck Delta Live Tables.pdfTechnical Deck Delta Live Tables.pdf
Technical Deck Delta Live Tables.pdf
 
Definitive Guide to Select Right Data Warehouse (2020)
Definitive Guide to Select Right Data Warehouse (2020)Definitive Guide to Select Right Data Warehouse (2020)
Definitive Guide to Select Right Data Warehouse (2020)
 
Apache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep diveApache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep dive
 
Architect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh ArchitectureArchitect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh Architecture
 
Big Data Business Wins: Real-time Inventory Tracking with Hadoop
Big Data Business Wins: Real-time Inventory Tracking with HadoopBig Data Business Wins: Real-time Inventory Tracking with Hadoop
Big Data Business Wins: Real-time Inventory Tracking with Hadoop
 
Time to Talk about Data Mesh
Time to Talk about Data MeshTime to Talk about Data Mesh
Time to Talk about Data Mesh
 
Data Catalog & ETL - Glue & Athena
Data Catalog & ETL - Glue & AthenaData Catalog & ETL - Glue & Athena
Data Catalog & ETL - Glue & Athena
 
Data Lakehouse, Data Mesh, and Data Fabric (r2)
Data Lakehouse, Data Mesh, and Data Fabric (r2)Data Lakehouse, Data Mesh, and Data Fabric (r2)
Data Lakehouse, Data Mesh, and Data Fabric (r2)
 
Building Lakehouses on Delta Lake with SQL Analytics Primer
Building Lakehouses on Delta Lake with SQL Analytics PrimerBuilding Lakehouses on Delta Lake with SQL Analytics Primer
Building Lakehouses on Delta Lake with SQL Analytics Primer
 
Introducción a hadoop
Introducción a hadoopIntroducción a hadoop
Introducción a hadoop
 
Hadoop
HadoopHadoop
Hadoop
 
Apache Spark overview
Apache Spark overviewApache Spark overview
Apache Spark overview
 
Apache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsApache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & Internals
 
Big data architectures and the data lake
Big data architectures and the data lakeBig data architectures and the data lake
Big data architectures and the data lake
 
Hadoop Overview kdd2011
Hadoop Overview kdd2011Hadoop Overview kdd2011
Hadoop Overview kdd2011
 
Data Mesh Part 4 Monolith to Mesh
Data Mesh Part 4 Monolith to MeshData Mesh Part 4 Monolith to Mesh
Data Mesh Part 4 Monolith to Mesh
 
Security and Data Governance using Apache Ranger and Apache Atlas
Security and Data Governance using Apache Ranger and Apache AtlasSecurity and Data Governance using Apache Ranger and Apache Atlas
Security and Data Governance using Apache Ranger and Apache Atlas
 
Hive+Tez: A performance deep dive
Hive+Tez: A performance deep diveHive+Tez: A performance deep dive
Hive+Tez: A performance deep dive
 

Viewers also liked

Monta una Infraestructura Big Data para tu Empresa - Sesión I
Monta una Infraestructura Big Data para tu Empresa - Sesión IMonta una Infraestructura Big Data para tu Empresa - Sesión I
Monta una Infraestructura Big Data para tu Empresa - Sesión IUrko Zurutuza
 
Hdfs ha using journal nodes
Hdfs ha using journal nodesHdfs ha using journal nodes
Hdfs ha using journal nodesEvans Ye
 
Ambari Meetup: NameNode HA
Ambari Meetup: NameNode HAAmbari Meetup: NameNode HA
Ambari Meetup: NameNode HAHortonworks
 
Introducción al BigData con Hadoop
Introducción al BigData con HadoopIntroducción al BigData con Hadoop
Introducción al BigData con HadoopSoftware Guru
 
Strata + Hadoop World 2012: HDFS: Now and Future
Strata + Hadoop World 2012: HDFS: Now and FutureStrata + Hadoop World 2012: HDFS: Now and Future
Strata + Hadoop World 2012: HDFS: Now and FutureCloudera, Inc.
 
Mallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation FrameworkMallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation FrameworkEmilio Torrens
 
Map reduce (from Google)
Map reduce (from Google)Map reduce (from Google)
Map reduce (from Google)Sri Prasanna
 
What's New and Upcoming in HDFS - the Hadoop Distributed File System
What's New and Upcoming in HDFS - the Hadoop Distributed File SystemWhat's New and Upcoming in HDFS - the Hadoop Distributed File System
What's New and Upcoming in HDFS - the Hadoop Distributed File SystemCloudera, Inc.
 
5. metodos geofísicos pdf
5. metodos geofísicos pdf5. metodos geofísicos pdf
5. metodos geofísicos pdfingcivilgarcia
 
BigDataSummitPeru - Big Data y Hadoop
BigDataSummitPeru - Big Data y HadoopBigDataSummitPeru - Big Data y Hadoop
BigDataSummitPeru - Big Data y HadoopDMC Perú
 
Big table
Big tableBig table
Big tablePSIT
 
Hadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datosHadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datosRaul Ochoa
 

Viewers also liked (20)

HDFS
HDFSHDFS
HDFS
 
Hadoop: tecnologias relacionadas
Hadoop: tecnologias relacionadasHadoop: tecnologias relacionadas
Hadoop: tecnologias relacionadas
 
Monta una Infraestructura Big Data para tu Empresa - Sesión I
Monta una Infraestructura Big Data para tu Empresa - Sesión IMonta una Infraestructura Big Data para tu Empresa - Sesión I
Monta una Infraestructura Big Data para tu Empresa - Sesión I
 
Casos big data
Casos big dataCasos big data
Casos big data
 
Hdfs ha using journal nodes
Hdfs ha using journal nodesHdfs ha using journal nodes
Hdfs ha using journal nodes
 
Ambari Meetup: NameNode HA
Ambari Meetup: NameNode HAAmbari Meetup: NameNode HA
Ambari Meetup: NameNode HA
 
Introducción al BigData con Hadoop
Introducción al BigData con HadoopIntroducción al BigData con Hadoop
Introducción al BigData con Hadoop
 
Spark
SparkSpark
Spark
 
Strata + Hadoop World 2012: HDFS: Now and Future
Strata + Hadoop World 2012: HDFS: Now and FutureStrata + Hadoop World 2012: HDFS: Now and Future
Strata + Hadoop World 2012: HDFS: Now and Future
 
Mallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation FrameworkMallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation Framework
 
Map reduce (from Google)
Map reduce (from Google)Map reduce (from Google)
Map reduce (from Google)
 
MapReduce en Hadoop
MapReduce en HadoopMapReduce en Hadoop
MapReduce en Hadoop
 
What's New and Upcoming in HDFS - the Hadoop Distributed File System
What's New and Upcoming in HDFS - the Hadoop Distributed File SystemWhat's New and Upcoming in HDFS - the Hadoop Distributed File System
What's New and Upcoming in HDFS - the Hadoop Distributed File System
 
5. metodos geofísicos pdf
5. metodos geofísicos pdf5. metodos geofísicos pdf
5. metodos geofísicos pdf
 
The google MapReduce
The google MapReduceThe google MapReduce
The google MapReduce
 
Hadoop
HadoopHadoop
Hadoop
 
BigDataSummitPeru - Big Data y Hadoop
BigDataSummitPeru - Big Data y HadoopBigDataSummitPeru - Big Data y Hadoop
BigDataSummitPeru - Big Data y Hadoop
 
Aula virtual apache_hadoop_v3 1
Aula virtual apache_hadoop_v3 1Aula virtual apache_hadoop_v3 1
Aula virtual apache_hadoop_v3 1
 
Big table
Big tableBig table
Big table
 
Hadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datosHadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datos
 

Similar to Apache Hadoop introducción

Conociendo los servicios adicionales en big data
Conociendo los servicios adicionales en big dataConociendo los servicios adicionales en big data
Conociendo los servicios adicionales en big dataSpanishPASSVC
 
Hadoop, Cloud y Spring
Hadoop, Cloud y Spring Hadoop, Cloud y Spring
Hadoop, Cloud y Spring Miguel Pastor
 
Herramientas para computación distribuida. De Hadoop a Spark
Herramientas para computación distribuida. De Hadoop a SparkHerramientas para computación distribuida. De Hadoop a Spark
Herramientas para computación distribuida. De Hadoop a SparkJose Manuel Ortega Candel
 
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...Joseph Lopez
 
Big Data a traves de una implementación
Big Data a traves de una implementaciónBig Data a traves de una implementación
Big Data a traves de una implementaciónDiego Krauthamer
 
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...Joseph Lopez
 
OpenAnalytics 04/2015 - Data Analytics con Hadoop
OpenAnalytics 04/2015 - Data Analytics con HadoopOpenAnalytics 04/2015 - Data Analytics con Hadoop
OpenAnalytics 04/2015 - Data Analytics con HadoopOpenAnalytics Spain
 
Como de grandes son tus datos
Como de grandes son tus datosComo de grandes son tus datos
Como de grandes son tus datosAntonio Rodriguez
 
SolidQ Business Analytics Day | Como de grandes son tus datos
SolidQ Business Analytics Day | Como de grandes son tus datosSolidQ Business Analytics Day | Como de grandes son tus datos
SolidQ Business Analytics Day | Como de grandes son tus datosSolidQ
 
Exposicion big data
Exposicion big dataExposicion big data
Exposicion big datamateo luquez
 
An evening with... Apache hadoop Meetup
An evening with...  Apache hadoop MeetupAn evening with...  Apache hadoop Meetup
An evening with... Apache hadoop MeetupArkhotech
 
Whitepaper – Qué es y cómo utilizar Hadoop
Whitepaper – Qué es y cómo utilizar HadoopWhitepaper – Qué es y cómo utilizar Hadoop
Whitepaper – Qué es y cómo utilizar HadoopArsys
 
Azure Spark - Big Data - Coresic 2016
Azure Spark - Big Data - Coresic 2016Azure Spark - Big Data - Coresic 2016
Azure Spark - Big Data - Coresic 2016nnakasone
 

Similar to Apache Hadoop introducción (20)

Conociendo los servicios adicionales en big data
Conociendo los servicios adicionales en big dataConociendo los servicios adicionales en big data
Conociendo los servicios adicionales en big data
 
Hadoop, Cloud y Spring
Hadoop, Cloud y Spring Hadoop, Cloud y Spring
Hadoop, Cloud y Spring
 
Herramientas para computación distribuida. De Hadoop a Spark
Herramientas para computación distribuida. De Hadoop a SparkHerramientas para computación distribuida. De Hadoop a Spark
Herramientas para computación distribuida. De Hadoop a Spark
 
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
 
Big Data a traves de una implementación
Big Data a traves de una implementaciónBig Data a traves de una implementación
Big Data a traves de una implementación
 
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
 
Open analytics. data analytics con hadoop
Open analytics. data analytics con hadoopOpen analytics. data analytics con hadoop
Open analytics. data analytics con hadoop
 
OpenAnalytics 04/2015 - Data Analytics con Hadoop
OpenAnalytics 04/2015 - Data Analytics con HadoopOpenAnalytics 04/2015 - Data Analytics con Hadoop
OpenAnalytics 04/2015 - Data Analytics con Hadoop
 
Como de grandes son tus datos
Como de grandes son tus datosComo de grandes son tus datos
Como de grandes son tus datos
 
Presentacion
PresentacionPresentacion
Presentacion
 
SolidQ Business Analytics Day | Como de grandes son tus datos
SolidQ Business Analytics Day | Como de grandes son tus datosSolidQ Business Analytics Day | Como de grandes son tus datos
SolidQ Business Analytics Day | Como de grandes son tus datos
 
Introducción a Hadoop
Introducción a HadoopIntroducción a Hadoop
Introducción a Hadoop
 
Big data2
Big data2Big data2
Big data2
 
3. Hadoop
3.  Hadoop3.  Hadoop
3. Hadoop
 
Exposicion big data
Exposicion big dataExposicion big data
Exposicion big data
 
Hadoop
HadoopHadoop
Hadoop
 
An evening with... Apache hadoop Meetup
An evening with...  Apache hadoop MeetupAn evening with...  Apache hadoop Meetup
An evening with... Apache hadoop Meetup
 
Introduccion big data
Introduccion  big dataIntroduccion  big data
Introduccion big data
 
Whitepaper – Qué es y cómo utilizar Hadoop
Whitepaper – Qué es y cómo utilizar HadoopWhitepaper – Qué es y cómo utilizar Hadoop
Whitepaper – Qué es y cómo utilizar Hadoop
 
Azure Spark - Big Data - Coresic 2016
Azure Spark - Big Data - Coresic 2016Azure Spark - Big Data - Coresic 2016
Azure Spark - Big Data - Coresic 2016
 

Recently uploaded

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 

Recently uploaded (20)

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 

Apache Hadoop introducción

  • 1. Apache Hadoop Tomás Fernández Pena VII Seminario de Invierno, Red CAPAP-H 29 de enero de 2016 Material bajo licencia Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) citius.usc.es
  • 2. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  • 3. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  • 4. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop ¿Qué es Big Data? Wikipedia In information technology, big data is a collection of data sets so large and complex that it becomes difficult to process using on-hand database management tools or traditional data processing applications. The challenges include capture, curation, storage, search, sharing, analysis, and visualization. Apache Hadoop, VII Seminario de Invierno 1/125
  • 5. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Características del Big Data Las 5 Vs del BigData Volume enorme cantidad de datos generados Velocity rapidez con la que se generan y mueven esos datos Variety datos de múltiples tipos, estructurados y no-estructurados: texto, datos de sensores, audio, vídeo, click streams, ficheros de log, etc. Veracity datos correctos o incorrectos Value capacidad de extraer valor de los datos Apache Hadoop, VII Seminario de Invierno 2/125
  • 6. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Aluvión de datos El mundo está creando más bits que nunca: en 2013, se calcula unos 4,4 Zettabytes (4, 4 × 1021 ), y se estiman unos 44 ZB en 2020 La cantidad de datos se dobla cada dos años Apache Hadoop, VII Seminario de Invierno 3/125
  • 7. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Fuentes de datos Origen de los datos: Redes sociales Redes de sensores Datos de GPS Datos de genoma Datos científicos . . . Apache Hadoop, VII Seminario de Invierno 4/125
  • 8. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Retos tecnológicos (I) Búsqueda y refinamiento (Lucene, Solr, Nutch, Elasticsearch, OpenRefine, ScraperWiki, BloomReach) Serialización (JSON, BSON, Apache Thrift, Apache Avro, Google Protocol Buffers) Sistemas de almacenamiento (HDFS, GFS, Lustre, Amazon S3) Servidores (Amazon EC2, Google Cloud Platform, Azure, OpenShift, Heroku, Pivotal, Ambari) Procesamiento (Hadoop, Hive, Pig, Spark, Flink, Tez, Cascading, Azkaban, Oozie, mrjob, Twister, Flume, Storm, Samza, Falcon, Cloudera, MapR, Hortonworks, Platfora, Cask) Apache Hadoop, VII Seminario de Invierno 5/125
  • 9. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Retos tecnológicos (II) Bases de datos (HBase, Cassandra, Accumulo, MongoDB, CouchDB, Hypertable, Parquet, Riak, Amazon DynamoDB, Google BigTable, Drill, Sqoop) Análisis (R, IBM BigSheets, Greenplum, Splunk, Datameer, WibiData) Lenguaje natural (Natural Language Toolkit, Apache OpenNLP, Perldoop, Boilerpipe, Open Calais) Machine learning (aprendizaje automático) (Weka, Apache Mahout, scikit-learn, Skytree) Visualización (R, D3.js, Tableau, IBM Cognos Insight, Google Fusion Tables) Apache Hadoop, VII Seminario de Invierno 6/125
  • 10. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop BigData Landscape Apache Hadoop, VII Seminario de Invierno 7/125
  • 11. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Programando para el Big Data: historia Finales de los 90: crecimiento explosivo de los datos las empresas no pueden almacenarlos Tendencia al escalado horizontal de clusters de commodity hardware Apache Hadoop, VII Seminario de Invierno 8/125
  • 12. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Programando para el Big Data: historia Circa 2002 Se busca mitigar el riesgo de pérdidas de grandes workloads distribuidas debidas a fallos de los discos en commodity hardware Google publica 2 papers: Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung, “The Google File System ”, 19th ACM Symposium on Operating Systems Principles, Lake George, NY, October, 2003. http://research.google.com/archive/gfs.html, Jeffrey Dean and Sanjay Ghemawat, “MapReduce: Simplified Data Processing on Large Clusters”, OSDI’04, San Francisco, CA, December, 2004. http://research.google.com/archive/mapreduce.html Circa 2005 Doug Cutting y Mike Cafarella crean Hadoop Apache Hadoop, VII Seminario de Invierno 9/125
  • 13. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Procesamiento del Big Data Necesitamos: Escalabilidad con grandes volúmenes de datos 1000’s de máquinas 10,000’s de discos Equipos y redes de bajo coste poco fiables elevadas latencias Facilidad de programación Tolerancia a fallos automática Apache Hadoop, VII Seminario de Invierno 10/125
  • 14. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Problemas en la ejecución Los nodos baratos fallan, sobre todo si hay muchos Tiempo medio entre fallos para 1 nodo = 3 años Tiempo medio entre fallos para 1000 nodos = 1 día Solución: implementar tolerancia a fallos en el sistema Red de bajo coste = elevada latencia Solución: llevar la computación a los datos - Minimizar el movimiento de los datos Dificultad de programación Solución: un modelo de programación paralelo intensivo en datos - Los usuarios escriben funciones simples - El sistema distribuye el trabajo y maneja los fallos Apache Hadoop, VII Seminario de Invierno 11/125
  • 15. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  • 16. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Apache Hadoop Framework para el almacenamiento y procesamiento distribuido Manejo de enormes cantidades de datos en commodity clusters Escala: petabytes de datos en miles de nodos Apache Hadoop, VII Seminario de Invierno 12/125
  • 17. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ecosistema Hadoop (I) 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 carácter 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 S4, 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 Apache Hadoop, VII Seminario de Invierno 13/125
  • 18. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 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 Apache Hadoop, VII Seminario de Invierno 14/125
  • 19. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 de todo tipo Apache Hadoop, VII Seminario de Invierno 15/125
  • 20. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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/ Apache Hadoop, VII Seminario de Invierno 16/125
  • 21. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Características de Hadoop Incluye Almacenamiento: HDFS Gestor de recursos: YARN, (sólo MapReduce en Hadoop v1) Modelo de programación: MapReduce Ventajas Bajo coste: clusters baratos o cloud Facilidad de uso Tolerancia a fallos Apache Hadoop, VII Seminario de Invierno 17/125
  • 22. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Instalación Instalación relativamente simple: aplicación Java Paquete fuente: hadoop.apache.org/releases.html Sistemas preconfigurados proporcionados por empresas como Cloudera (www.cloudera.com), MapR (www.mapr.com) o Hortonworks (hortonworks.com), o más específicas como la distribución de Intel o IBM InfoSphere BigInsight Modos de funcionamiento: Standalone: todo en un nodo, para pruebas Pseudodistribuido: funciona como una instalación completa, pero en un solo nodo Totalmente distribuido Apache Hadoop, VII Seminario de Invierno 18/125
  • 23. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Arquitectura Hadoop v1 Apache Hadoop, VII Seminario de Invierno 19/125
  • 24. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hadoop v2 Este esquema se ha modificado en Hadoop 2.0 con YARN (Yet Another Resource Negociator) (HDFS se mantiene) separa las dos funcionalidades del Jobtracker (gestión de recursos y job-scheduling/monitorización) en demonios separados Resource manager (RM): planificador general Node managers (NM): monitorización, uno por nodo Application masters (AM): gestión de aplicaciones, uno por aplicación permite que diferentes tipos de aplicaciones (no solo MapReduce) se ejecuten en el cluster Apache Hadoop, VII Seminario de Invierno 20/125
  • 25. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Arquitectura Hadoop v2 Apache Hadoop, VII Seminario de Invierno 21/125
  • 26. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo Hadoop v1 HDFS Almacenamiento distribuido MapReduce Procesamiento distribuidoHBase Basededatos no-relacional Pig Scripts Hive Query Otrosproyectos Oozie,HCatalog,Sqoop, ZooKeeper,Mahout,... Apache Hadoop, VII Seminario de Invierno 22/125
  • 27. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo Hadoop v2 HDFS Almacenamiento distribuido MapReduce Procesamiento distribuidoHBase Basededatos no-relacional Pig Scripts Hive Query Otrosproyectos Oozie,HCatalog,Sqoop, ZooKeeper,Mahout,... YARN Planificador y negociador de recursos Otrosproyectos YARN Apache Hadoop, VII Seminario de Invierno 23/125
  • 28. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  • 29. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop HDFS: Hadoop Distributed File System Hadoop puede acceder a diferentes tipos de filesystems (local, HDFS, KFS, S3,. . . ) Se recomienda 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 Apache Hadoop, VII Seminario de Invierno 24/125
  • 30. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 ocultan la latencia de búsqueda y reducen la carga del NameNode Apache Hadoop, VII Seminario de Invierno 25/125
  • 31. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Conceptos de HDFS (cont.) Checkpoint node Mantienen checkpoints del Namenode debería ejecutarse en un sistema con características similares al Namenode Apache Hadoop, VII Seminario de Invierno 26/125
  • 32. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Filesystems 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: hdfs dfs -ls file:///home/pepe Más opciones: hdfs dfs -help Apache Hadoop, VII Seminario de Invierno 27/125
  • 33. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Ayuda: hdfs dfs -help 2. Usando el interfaz web (solo lectura) por defecto, puerto 50070 del Namenode 3. API Java 4. Mediante otras interfaces: WebHDFS, HFTP, HDFS NFS Gateway Apache Hadoop, VII Seminario de Invierno 28/125
  • 34. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 29/125
  • 35. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 30/125
  • 36. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Más información: http://hadoop.apache.org/docs/current/hadoop-project- dist/hadoop-common/FileSystemShell.html Apache Hadoop, VII Seminario de Invierno 31/125
  • 37. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 32/125
  • 38. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas HDFS (I) Práctica 1 a) Conéctate al NameNode del cluster: ssh -X studentXX@urraca.arcos.inf.uc3m.es (password: .bigdata.2016!) b) Comprueba si tienes ficheros en tu directorio HDFS c) Copia el directorio local /home/tfernandez/datos al directorio datos en tu directorio base en HDFS d) Cambia a 4 el nivel de replicación del fichero datos/libros/random_words.txt.bz2 e) Lanza el Firefox en el NameNode y úsalo para ver el interfaz web del HDFS (http://urraca.arcos.inf.uc3m.es:50070) - Usa la utilidad “Browse the filesystem” para ver el número de bloques y la localización de los mismos para el fichero datos/libros/random_words.txt.bz2 Apache Hadoop, VII Seminario de Invierno 33/125
  • 39. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop API Java API que permite interactuar con los filesystems soportados por Hadoop Utiliza la clase abstracta org.apache.hadoop.fs.FileSystem Otras clases de interés en org.apache.hadoop.fs y org.apache.hadoop.io Path: representa a un fichero en un FileSystem FileStatus: información del fichero FSDataInputStream: stream de entrada de datos para un fichero, con acceso aleatorio FSDataOutputStream: stream de salida de datos para un fichero IOUtils: Funcionalidades para I/O Apache Hadoop, VII Seminario de Invierno 34/125
  • 40. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de ficheros Método open(Path) de FileSystem Devuelve un FSDataInputStream Interfaces implementadas por FSDataInputStream: 1. Seekable: permite movernos a una posición en el fichero (método seek) 2. PositionedReadable: permite copiar a un buffer partes de un fichero Apache Hadoop, VII Seminario de Invierno 35/125
  • 41. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de ficheros Dos métodos de FileSystem para abrir los ficheros para escritura: 1. create: crea un fichero para escritura (crea los directorios padre, si es preciso) 2. append: abre un fichero para añadir datos Ambos métodos devuelven un FSDataOutputStream FSDataOutputStream no permite seek (solo escritura al final del fichero) El método hflush() garantiza coherencia, pero supone un overhead (en Hadoop v1 método sync()) El método hsync() garantiza que los datos se mandan a disco (pero pueden estar en la caché del disco) Apache Hadoop, VII Seminario de Invierno 36/125
  • 42. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Otras operaciones con ficheros y directorios Crear un directorio: Método mkdirs de FileSystem Información sobre ficheros y directorios: Métodos getFileStatus y listStatus de FileSystem Clase FileStatus Patrones de nombres de ficheros (globbing) Método globStatus de FileSystem Interfaz PathFilter, para filtrar con expresiones regulares Borrar ficheros o directorios, de forma recursiva o no: Método delete de FileSystem Apache Hadoop, VII Seminario de Invierno 37/125
  • 43. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 38/125
  • 44. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas HDFS (II) Práctica 2: a) En la máquina virtual, inicia el Eclipse y revisa el programa FileSystemCat en el proyecto 01-hdfs b) Utiliza FileSystemCat para ver el fichero un fichero de texto (por ejemplo datos/quijote.txt) $ cd ~/SeminarioInvierno/Hadoop-Practicas/ $ cd 01-hdfs/target/classes $ export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:’.’ $ hdfs cursohadoop.hdfs.FileSystemCat > ~/SeminarioInvierno/datos/quijote.txt c) Completa el programa CopyHalfFile para que copie la mitad inferior del fichero anterior en el HDFS a otro fichero en otro directorio del HDFS Apache Hadoop, VII Seminario de Invierno 39/125
  • 45. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas HDFS (II) Práctica 2 (cont): d) Llevar el código y probarlo en el cluster $ scp -rp cursohadoop/ studentXX@urraca.arcos.inf.uc3m.es:~ $ ssh studentXX@urraca.arcos.inf.uc3m.es ... $ export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:’.’ $ hdfs cursohadoop.hdfs.FileSystemCat datos/quijote.txt Apache Hadoop, VII Seminario de Invierno 40/125
  • 46. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Otras interfaces a HDFS Otros modos de acceder a HDFS WebHDFS: proporciona una API REST para acceder a HDFS mediante HTTP Activada mediante la propiedad dfs.webhdfs.enabled del fichero hdfs-site.xml del Namenode (por defecto, true) HFTP: acceso de solo lectura a HDFS a través de HTTP HDFS NFS Gateway: soporta NFSv3 y permite que HDFS sea montado como parte del sistema de ficheros local del cliente Permite usar HDFS como un sistema de ficheros UNIX local Permite copiar ficheros de HDFS al sistema de ficheros local y viceversa No todas las características están soportadas (p.e. no permite random writes ni enlaces duros) Apache Hadoop, VII Seminario de Invierno 41/125
  • 47. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 42/125
  • 48. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Práctica HDFS (III) Práctica 3: En el cluster, ejecuta la siguiente instrucción para leer un fichero usando WebHDFS $ curl -i -L "http://urraca.arcos.inf.uc3m.es:50070/webhdfs/v1/ user/studentXX/datos/quijote.txt?op=OPEN" Apache Hadoop, VII Seminario de Invierno 43/125
  • 49. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 44/125
  • 50. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 sbin/start-balancer.sh: redistribuye bloques entre datanodes Apache Hadoop, VII Seminario de Invierno 45/125
  • 51. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 46/125
  • 52. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 47/125
  • 53. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 48/125
  • 54. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas HDFS (IV) Práctica 4: a) Haz un chequeo de tu directorio en HDFS b) Haz un chequeo más detallado de los ficheros en el directorio datos/patentes Apache Hadoop, VII Seminario de Invierno 49/125
  • 55. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem 1: open Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode Apache Hadoop, VII Seminario de Invierno 50/125
  • 56. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques Apache Hadoop, VII Seminario de Invierno 50/125
  • 57. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open 3: read Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques Apache Hadoop, VII Seminario de Invierno 50/125
  • 58. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open 3: read Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques 4: read Apache Hadoop, VII Seminario de Invierno 50/125
  • 59. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open 3: read Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques 4: read 5: read Apache Hadoop, VII Seminario de Invierno 50/125
  • 60. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open 3: read 6: close Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques 4: read 5: read Apache Hadoop, VII Seminario de Invierno 50/125
  • 61. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem 1: create Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  • 62. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  • 63. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  • 64. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create 4: write packet 4 4 Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  • 65. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create 4: write packet 5: ack packet 5 5 4 4 Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  • 66. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write 6: close Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create 4: write packet 5: ack packet 5 5 4 4 Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  • 67. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write 6: close Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create 4: write packet 5: ack packet 7: complete 5 5 4 4 Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  • 68. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 52/125
  • 69. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo de coherencia Para aumentar el rendimiento, HDFS no es POSIX compliant en la escritura de ficheros Después de crear un fichero, este es visible es el espacio de nombres del filesystem, pero, no se garantiza que sus datos sean visibles Forzar la visibilidad Cerrar el stream de salida con close() Utilizar el método sync() en Hadoop v1, o hflush() en v2, de la clase FSDataOutputStream Apache Hadoop, VII Seminario de Invierno 53/125
  • 70. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Propiedades configurables Múltiples propiedades configurables (fichero hdfs-site.xml) dfs.namenode.name.dir: lista (separada por comas) de directorios donde el namenode guarda sus metadatos (una copia en cada directorio), por defecto file://$hadoop.tmp.dir/dfs/name dfs.datanode.data.dir: lista (separada por comas) de directorios donde los datanodes guarda los bloques de datos (cada bloque en sólo uno de los directorios), por defecto file://$hadoop.tmp.dir/dfs/data dfs.namenode.checkpoint.dir: lista (separada por comas) de directorios donde el CheckPoint node guarda los checkpoints (una copia en cada directorio), por defecto file://$hadoop.tmp.dir/dfs/namesecondary dfs.blocksize: tamaño de bloque para nuevos ficheros (por defecto, 128MB) dfs.replication: nº de réplicas por bloque, por defecto 3 Apache Hadoop, VII Seminario de Invierno 54/125
  • 71. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 55/125
  • 72. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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/current/hadoop-project- dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html, hadoop.apache.org/docs/current/hadoop-project-dist/hadoop- hdfs/HDFSHighAvailabilityWithNFS.html Apache Hadoop, VII Seminario de Invierno 56/125
  • 73. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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/current/hadoop-project- dist/hadoop-hdfs/Federation.html Apache Hadoop, VII Seminario de Invierno 57/125
  • 74. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  • 75. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Terminología Hadoop v1 (MapReduce) Jobtracker Coordina todos los trabajos Envía tareas a los tasktrackers Mantiene información sobre el progreso de cada tarea Tasktrackers Realizan las tareas Envían informes de progreso al Jobtracker Splits Trozos en los que se divide la entrada a una tarea MapReduce Normalmente del tamaño de 1 bloque (64 MB) Apache Hadoop, VII Seminario de Invierno 58/125
  • 76. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Elementos de control Hadoop v1 Fuente: A. Murthy, V. Vavilapalli, “Apache Hadoop YARN”, Addison-Wesley, marzo 2014Apache Hadoop, VII Seminario de Invierno 59/125
  • 77. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop YARN: the Data Operating System Un único Jobtracker es un cuello de botella en grandes clusters (más de 4000 nodos) YARN (Yet Another Resource Negociator): nueva arquitectura Característica principal: separa las dos funcionalidades del Jobtracker (gestión de recursos y job-scheduling/monitorización) en demonios separados: resource manager, node managers y application masters MapReduce es uno de los tipos de aplicación que pueden correr sobre YARN Más información: hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site wiki.apache.org/hadoop/PoweredByYarn Apache Hadoop, VII Seminario de Invierno 60/125
  • 78. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop YARN Fuente: www.slideshare.net/Hadoop_Summit/apache-hadoop-yarn-present-and-future Apache Hadoop, VII Seminario de Invierno 61/125
  • 79. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Elementos de control YARN Fuente: A. Murthy, V. Vavilapalli, “Apache Hadoop YARN”, Addison-Wesley, marzo 2014 Apache Hadoop, VII Seminario de Invierno 62/125
  • 80. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Demonios 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) Apache Hadoop, VII Seminario de Invierno 63/125
  • 81. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Demonios 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 Apache Hadoop, VII Seminario de Invierno 64/125
  • 82. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  • 83. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo de programación MapReduce Inspirado en la programación funcional Operación Map: square n = n * n map op [] = [] map op (x: xs) = op x : map op xs map (square) [1..5] => [1,4,9,16,25] Operación Reduce: reduce op (x : [ ] ) = x reduce op (x: xs) = (op x (reduce op xs) ) reduce (+) (map (square) [1..5]) => 55 Apache Hadoop, VII Seminario de Invierno 65/125
  • 84. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo de programación Entrada y salida: listas de pares clave/valor El programador especifica las funciones map y reduce Función Map: genera claves/valores intermedios map(K1, V1) → list(K2, V2) Para cada K1 y V1 se obtiene una lista intermedia (K2, V2) es un par clave/valor intermedio Funcion Reduce: combina los valores intermedios para cada clave particular reduce(K2, list(V2)) → (K3, list(V3)) Para cada clave de salida K3 se genera una lista de valores - list(V3) suele tener un único valor - A menudo, K3 = K2 Apache Hadoop, VII Seminario de Invierno 66/125
  • 85. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Automatización del proceso map map map Entradas: (Ki 1,Vi 1) Entradas: (Kj 1,Vj 1) Entradas: (Kk 1,Vk 1) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) Sistema de ficheros distribuido Barajado y ordenación por valores de claves reduce reduce (Ka 2,list(Va 2)) (Kb 2,list(Vb 2)) (Kc 2,list(Vc 2)) (Kd 2,list(Vd 2)) (Ka 3,Va 3) (Kb 3,Vb 3) (Kc 3,Vc 3) (Kd 3,Vd 3) Apache Hadoop, VII Seminario de Invierno 67/125
  • 86. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount Cuenta las ocurrencias de cada palabra en ficheros de texto Entrada: K1 = ∅, V1 = línea Salida: pares (palabra, nº de ocurrencias) Pseudocódigo del Map map(key, value): // key: nada, value: línea de texto for each word w in value emit(w, 1) Pseudocódigo del Reduce reduce(key, values): // key: palabra; values: un iterador sobre los 1s emit(key, sum(values)) Apache Hadoop, VII Seminario de Invierno 68/125
  • 87. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza map map reduce reduce en,1 la,1 mancha,1 vale,1 la,1 pena,1 un,1 lugar,1 de,1 más,1 Entrada Map Shuffle & Sort Reduce Salida Apache Hadoop, VII Seminario de Invierno 69/125
  • 88. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza map map reduce reduce Entrada Map Shuffle & Sort Reduce Salida en,1 rostro,1 la,1 mancha,1 en,1 el,1 que,1 Apache Hadoop, VII Seminario de Invierno 69/125
  • 89. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza map map reduce reduce Entrada Map Shuffle & Sort Reduce Salida corazón,1 amor,1 deseo,1 el,1 el,1 es,1 de,1 belleza,1 Apache Hadoop, VII Seminario de Invierno 69/125
  • 90. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza amor, 1 corazón, 1 deseo, 1 en, 3 la, 3 mancha, 2 pena, 1 rostro, 1 vale, 1 belleza, 1 de, 2 el, 3 es, 1 lugar, 1 más, 1 que, 1 un, 1 map map reduce reduce Entrada Map Shuffle & Sort Reduce Salida amor,1 corazón,1 deseo,1 en,1,1,1 la,1,1,1 mancha,1,1 pena,1 rostro,1 vale,1 belleza,1 de,1,1 el,1,1,1 es,1 lugar,1 más,1 que,1 un,1 Apache Hadoop, VII Seminario de Invierno 69/125
  • 91. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Características de la ejecución Sistema de ficheros distribuido para gestionar los datos GFS (Google File System), HDFS (Hadoop Distributed FS) Ficheros divididos en bloques (chunks o splits) grandes (64-128 MB en HDFS), con replicación Arquitectura master-worker Los map workers se inician en el mismo nodo o rack que sus datos de entrada Minimiza el uso de la red Los map workers graban su salida en el disco local antes de servirla a los reduce workers Permite recuperar una tarea reduce en caso de fallo Los reduce workers graban su salida en el sistema distribuido Replicación en los resultados Un fichero de salida por cada reduce Apache Hadoop, VII Seminario de Invierno 70/125
  • 92. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Características de la ejecución Programa de usuario master worker worker worker worker worker split 0 split 1 split 2 fichero de salida 0 fichero de salida 1 fork fork fork asigna maps asigna reduces DFS Local DFS Read Local write Write Remote read, sort & shuffle Apache Hadoop, VII Seminario de Invierno 71/125
  • 93. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Diferencia entre bloques y splits Apache Hadoop, VII Seminario de Invierno 72/125
  • 94. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Tolerancia a fallos Mediante heartbeats, el Master detecta fallos en los workers Si falla una tarea map o reduce La tarea se reintenta en otro nodo - Correcto para los maps porque no tienen dependencias - Correcto para los reduces porque las salidas de los maps están en disco - Necesario que las tareas no tengas efectos colaterales Si la misma tarea falla repetidamente, el trabajo MapReduce se aborta y se notifica al usuario (ajustable) Si falla un nodo completo Relanzar sus tareas en curso en otros nodos Reejecutar cualquier map que se hubiera ejecutado en el nodo - Necesario pues las salidas de los maps se perdieron Apache Hadoop, VII Seminario de Invierno 73/125
  • 95. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Tolerancia a fallos Si una tarea no progresa (straggler o rezagada) Se lanza una segunda copia de la tarea en otro nodo (ejecución especulativa) Se toma la salida de la tarea que acabe antes, y se mata a la otra Situación bastante común en clusters grandes - Debidos a errores hardware, bugs software, fallos de configuración, etc. - Una tarea rezagada puede enlentecer de forma importante un trabajo Si falla el Master Se intenta relanzar de nuevo - Las tareas en proceso o acabadas durante el reinicio, se relanzan Si continua fallando, el trabajo se aborta y se le notifica al usuario Apache Hadoop, VII Seminario de Invierno 74/125
  • 96. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Número de Maps y Reduces M tareas map y R tareas reduce Hacer M+R mucho mayor que el número de PEs disponibles Mejora la utilización del cluster Habitualmente, M igual al número de splits de entrada Mejora el balance de carga dinámico y acelera la recuperación cuando falla un worker R menor que M Salida repartida en R ficheros Valor ajustable por el usuario Función del tipo de problema y los recursos disponibles (memoria, nº cores,. . . ) Ver wiki.apache.org/hadoop/HowManyMapsAndReduces Apache Hadoop, VII Seminario de Invierno 75/125
  • 97. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Combinador Un combinador (Combiner) es una función de agregación local para las claves repetidas de cada map Puede ahorrar ancho de banda al reducir el tamaño de los datos intermedios del map combiner(K m 2 , list(V m 2 )) → (K m 3 , list(V m 3 )) Habitualmente, misma función que el reducer Se ejecuta en el mismo nodo que el map Solo puede utilizarse si la función reduce es commutativa y asociativa Apache Hadoop, VII Seminario de Invierno 76/125
  • 98. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Combinador map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza map map reduce reduce Entrada Map Shuffle & Sort Reduce Salida en,1 el,1 rostro,1 que,1 la,1 mancha,1 en,1 el,1 que,1 combiner combiner combiner en,2 rostro,1 la,1 mancha,1 Combiner Apache Hadoop, VII Seminario de Invierno 77/125
  • 99. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Particionador El particionador (shuffler) por defecto es un hash de las claves: hash(K) mod R Garantiza: Claves iguales van al mismo reducer Carga de los reducers relativamente bien balanceada (en muchos casos) Hay situaciones en las que puede interesar cambiarlo: Ejemplo: hash(hostame(URL)) mod R Todas las URLs de cada host se juntan en el mismo fichero de salida Apache Hadoop, VII Seminario de Invierno 78/125
  • 100. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  • 101. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 79/125
  • 102. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Nueva y vieja API Los programas pueden usar la nueva API (recomendado) o la antigua Ambas APIs son incompatibles Utilizaremos siempre la API nueva Disponible desde Hadoop 0.20.0 Definida en el paquete org.apache.hadoop.mapreduce Algunas librerías presentes en la API vieja no han sido portadas API vieja (desaconsejada) Definida en el paquete org.apache.hadoop.mapred Apache Hadoop, VII Seminario de Invierno 80/125
  • 103. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount 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" ) ; } Apache Hadoop, VII Seminario de Invierno 81/125
  • 104. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Mapper Extiende la clase Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT> Debe sobrescribir el método map(KEYIN key, VALUEIN value, Mapper.Context context) Usa una instancia de Context en la que escribe los pares clave/valor de salida Debe utilizar tipos de datos que implementen la interfaz Writable (como LongWritable o Text) optimizados para serialización Otros métodos que se pueden sobrescribir: setup(Context context) Llamado una vez al comienzo de la tarea cleanup(Context context) Llamado una vez al final de la tarea Apache Hadoop, VII Seminario de Invierno 82/125
  • 105. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount 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) ) ; } } Apache Hadoop, VII Seminario de Invierno 83/125
  • 106. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Reducer Extiende la clase Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> Debe sobrescribir el método reduce(KEYIN key, Iterable<VALUEIN> values, Reducer.Context context) Usa una instancia de Context en la que escribe los pares clave/valor de salida Debe utilizar tipos de datos que implementen la interfaz Writable (como LongWritable o Text) optimizados para serialización Otros métodos que se pueden sobrescribir: setup(Context context) Llamado una vez al comienzo de la tarea cleanup(Context context) Llamado una vez al final de la tarea Apache Hadoop, VII Seminario de Invierno 84/125
  • 107. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount 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]) ) ; Apache Hadoop, VII Seminario de Invierno 85/125
  • 108. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Driver (II) job . setOutputKeyClass(Text . class ) ; job . setOutputValueClass ( IntWritable . class ) ; job .setNumReduceTasks(4) ; 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) ; } } Apache Hadoop, VII Seminario de Invierno 86/125
  • 109. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Driver Clase Configured: permite acceder a la configuración del sistema Método Configuration getConf(): devuelve la configuración actual Clase Configuration: proporciona acceso a la configuración Clase Job: permite configurar, enviar y controlar la ejecución de un trabajo Clase FileInputFormat<K,V>: describe los ficheros de entrada en un trabajo MapReduce Clase FileOutputFormat<K,V>: describe los ficheros de entrada en un trabajo MapReduce Apache Hadoop, VII Seminario de Invierno 87/125
  • 110. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Driver Interfaz Tool: interfaz estándar para aplicaciones MapReduce, soporta el manejo de opciones en línea de comandos Clase ToolRunner: ejecuta clases que implementan la interfaz Tool Clase Path: identifica a un fichero o directorio en el FileSystem Apache Hadoop, VII Seminario de Invierno 88/125
  • 111. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Compilación y ejecución Preferiblemente, crear un jar con todas las clases y ejecutarlo con: yarn jar fichero.jar [opciones] Para gestionar las aplicaciones, utilizad: en general, la opción application del comando yarn (yarn application -help para ver las opciones) para trabajos MapReduce, la opción job del comando mapred (mapred job -help para ver las opciones) Más información en hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn- site/YarnCommands.html hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop- mapreduce-client-core/MapredCommands.html Apache Hadoop, VII Seminario de Invierno 89/125
  • 112. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 90/125
  • 113. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (I) Práctica 5, programa wordcount (proyecto 02-wordcount) En la máquina virtual a) Inicia el Eclipse y revisa el código del WordCount b) En un terminal, usa maven para crear el fichero jar c) Prueba a lanzar el jar desde el terminal usando datos/libros-mini como directorio de entrada En el cluster: a) Copia el jar en el cluster y ejecuta el WordCount usando datos/libros como directorio de entrada b) Mientras se ejecuta, utiliza el interfaz web de YARN (http://urraca.arcos.inf.uc3m.es:8088) para analizar su ejecución Apache Hadoop, VII Seminario de Invierno 91/125
  • 114. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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, Apache Hadoop, VII Seminario de Invierno 92/125
  • 115. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Writables a medida Es posible implementar writables a medida Implementar la interfaz Writable Implementar los métodos write(DataOutput out) y readFields(DataInput in) Un objeto que se quiera usar como clave debe implementar WritableComparable Apache Hadoop, VII Seminario de Invierno 93/125
  • 116. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Clase abstracta FileInputFormat<K,V> Define métodos para añadir uno o varios paths de entrada al trabajo addInputPath(Job job, Path path), addInputPaths(Job job, String commaSeparatedPaths) Clase base para diferentes formatos de entrada concretos El formato a usar se especifica mediante el método setInputFormatClass del Job, por ejemplo: job.setInputFormatClass(TextInputFormat.class) Apache Hadoop, VII Seminario de Invierno 94/125
  • 117. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Formatos de entrada TextInputFormat: formato por defecto para ficheros de texto KeyValueTextInputFormat: ficheros de texto con estructura clave/valor NLineInputFormat: permite que los mappers reciban un número fijo de líneas de entrada SequenceFileInputFormat: secuencias de datos binarios clave/valor CombineFileInputFormat: Permite empaquetar varios ficheros pequeños en un split de entrada de un tamaño determinado FixedLengthInputFormat: Usado para leer ficheros con registros de longitud fija Apache Hadoop, VII Seminario de Invierno 95/125
  • 118. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Formatos de entrada TextInputFormat: Formato por defecto Cada mapper recibe un trozo (split) del fichero y lo procesa línea a línea Como clave, toma el offset en bytes en el fichero desde el comienzo de la línea (LongWritable) Como valor, toma toda la línea KeyValueTextInputFormat: Igual que el anterior, pero separa cada línea en clave/valor Usa tabulado como separador por defecto Para cambiar, modificar en el objeto Configuration la propiedad mapreduce.input.keyvaluelinerecordreader.key. value.separator Nota: en la API vieja es key.value.separator.in.input.line Apache Hadoop, VII Seminario de Invierno 96/125
  • 119. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Salida de ficheros Similar a la entrada: clase abstracta FileOutputFormat<K,V> Clase base para diversos formatos de salida concretos TextOutputFormat: formato por defecto para ficheros de texto - Escribe líneas de texto en formato clave/valor separados por un tabulado - Carácter de separación modificable: mapreduce.output.textoutputformat.separator API vieja mapred.textoutputformat.separator SequenceFileOutputFormat: secuencias de datos binarios clave/valor MapFileOutputFormat: Un formato de salida que escribe MapFiles El formato a usar se especifica mediante el método setOutputFormatClass del Job Apache Hadoop, VII Seminario de Invierno 97/125
  • 120. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 98/125
  • 121. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (II) Datos de entrada Fichero de citas de patentes (cite75_99.txt) Formato: patente,patente_a_la_que_cita Fichero de descripción de patentes (apat63_99.txt) Práctica 6, programa citingpatents (proyecto 03-citingpatents) Objetivo: Crear un programa MapReduce que, para cada patente de cite75_99.txt, obtenga la lista de las que la citan Formato salida: patente patente1,patente2... Mapper: 3858245,3755824 → 3755824 3858245 Reducer: 3755824 {3858245 3858247. . . } → 3755824 3858245,3858247. . . Utilizar como formato de entrada KeyValueTextInputFormat Apache Hadoop, VII Seminario de Invierno 99/125
  • 122. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (III) Práctica 7, programa creasequencefile (proyecto 04-creasequencefile) Hacer un programa MapReduce map-only que lea el fichero apat63_99.txt, separe los campos y lo guarde como un fichero Sequence con clave: el país (Text) valor: una cadena con la patente y el año separados por coma (Text) Se puede ver el contenido del fichero con hdfs dfs -text dir_salida Apache Hadoop, VII Seminario de Invierno 100/125
  • 123. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 101/125
  • 124. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Compresión Fuente: Kamat, G., Singh, S., “Compression Options in Hadoop - A Tale of Tradeoffs”, Hadoop Summit (San Jose), June 27, 2013 Apache Hadoop, VII Seminario de Invierno 102/125
  • 125. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop 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 Apache Hadoop, VII Seminario de Invierno 103/125
  • 126. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 104/125
  • 127. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (IV) Práctica 8 (proyecto 03-citingpatents) Modificar el programa CitingPatents para que guarde la salida comprimida en Gzip Utilizad los métodos estáticos setCompressOutput y setOutputCompressorClass de la clase FileOutputFormat Apache Hadoop, VII Seminario de Invierno 105/125
  • 128. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Encadenamiento de trabajos MapReduce Es posible encadenar trabajos MapReduce Basta con definir varios jobs y lanzarlos unos detrás de otros La salida a disco de un job es leída por el siguiente Alternativa Usar las clases ChainMapper y ChainReducer Permiten encadenar varios mappers seguidos de un reducer y cero o más mappers adicionales ([MAP+ / REDUCE MAP*]) Reduce los accesos a disco Para workflows complejos, se puede usar Apache Oozie o Cascading Apache Hadoop, VII Seminario de Invierno 106/125
  • 129. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 107/125
  • 130. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (V) Práctica 9 (proyecto 05-citationnumberbypatent_chained): para cada patente del fichero cite75_99.txt, obtener el número de las que la citan Encadenar CitingPatents con un mapper que cuenta el número de patentes que citan Mapper2: 3755824 3858245,3858247. . . → 3755824 9 Haz ese encadenamiento usando ChainMapper y ChainReducer Ejecución: $ export LIBJAR = path_a_citingpatents*.jar $ export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$LIBJAR $ yarn jar path_to_chained.jar -libjars $LIBJAR > path_to_cite75_99.txt path_to_out Apache Hadoop, VII Seminario de Invierno 108/125
  • 131. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Secondary Sort La ordenación se hace sólo por la clave: El orden en que aparecen los valores no está fijado Es posible imponer un orden en el que aparecen los valores: Hacer que la clave esté compuesta por la clave natural y el valor natural (objeto WritableComparable) El comparador de ordenación debe ordenar usando esa clave compuesta El particionador debe considerar sólo la clave natural El comparador de agrupamiento usa una u otra según el caso Apache Hadoop, VII Seminario de Invierno 109/125
  • 132. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Secondary Sort Ejemplo de clave compuesta Clave compuesta Clave Valor { { {Particionar Ordenar/Agrupar Se ordena por la clave compuesta [clave, valor] (job.setSortComparatorClass) Se particiona por clave (job.setPartitionerClass, garantiza que las mismas claves van al mismo reducer) Se agrupa por la clave o la clave compuesta [clave, valor] dependiendo del problema (job.setGroupingComparatorClass) Apache Hadoop, VII Seminario de Invierno 110/125
  • 133. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 111/125
  • 134. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (VI) Objetivo Partiendo del fichero cite75_99.seq, obtener un fichero de texto con la siguiente información país año -> nº de patentes ese año La salida debe estar ordenada por países, y para cada país, por año (sort secundario) Debemos usar una clave compuesta [país, año] Clave compuesta País Año { { { Particionar Ordenar/Agrupar Apache Hadoop, VII Seminario de Invierno 112/125
  • 135. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (VI) Práctica 10, programa sort.SortSecundario (proyecto 06-sortsecundario) Se ordena por la clave compuesta [país, año] (job.setSortComparatorClass) Se particiona por país (job.setPartitionerClass, garantiza que los mismos países van al mismo reducer) Se agrupa por la clave compuesta [país, año] (job.setGroupingComparatorClass) Apache Hadoop, VII Seminario de Invierno 113/125
  • 136. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Joins de datos de diferentes fuentes Hacer uniones de datos de diferentes fuentes es complejo en Hadoop Preferible usar lenguajes de alto nivel como Pig o Hive En Hadoop hay varias soluciones: Si un conjunto de datos es grande y el otro pequeño, se puede replicar el pequeño en todos los nodos usando Distributed Cache Map-Side joins: el join se realiza antes de llegar a la función map Los conjuntos de datos deben dividirse en el mismo número de particiones y estar ordenados por la clave de unión Reduce-side joins: el join se realiza en el reducer El mapper etiqueta cada dato con su fuente y usa la clave de unión como clave de salida Apache Hadoop, VII Seminario de Invierno 114/125
  • 137. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 115/125
  • 138. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (VII) Práctica 11, proyecto 07-simplereducersidejoin Objetivo: unir datos de dos entradas (a) Salida de CitingPatents (primera práctica) (b) Fichero con información de las patentes (apat63_99.txt) Salida: patente, país, n_citas Un mapper diferente para cada entrada (a) Mapper-a (CNBPTaggedMapper) 3755824 3858245,3858247. . . → 3755824 ''cite'', 9 (b) Mapper-b (PBCMapper) 3755824,1973,4995,1971,''US'',''NY''. . . → 3755824 ''country'', US Reducer: hace un join de los dos mappers por patente 3755824 ''cite'', 9 3755824 ''country'', US → 3755824 US, 9 Apache Hadoop, VII Seminario de Invierno 116/125
  • 139. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Localización de dependencias Mecanismo para copiar recursos (LocalResources) a los nodos del cluster Hadoop (DistributedCache en Hadoop v1) Los recursos (ficheros, archivos, librerías) se copian a todos los nodos una vez por trabajo Las aplicaciones pueden acceder directamente a estos recursos Tipos de LocalResources: FILE: Ficheros normales ARCHIVE: Ficheros comprimidos (jar, tar, tar.gz, zip) que descomprime el NodeManager PATTERN: Híbrido de ARCHIVE y FILE (se mantiene el fichero y se descomprime parte) Visibilidad de los LocalResources PUBLIC: accesibles por todos los usuarios PRIVATE: compartidos por aplicaciones del mismo usuario en el nodo APPLICATION: compartidos entre containers de la misma aplicación Apache Hadoop, VII Seminario de Invierno 117/125
  • 140. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Uso en línea de comandos Si el código usa GenericOptionParser (o ToolRunner), los ficheros a copiar se indican como parámetro: -files + lista separada por comas de URIs de los ficheros -archives + ficheros comprimidos (archivos) -libjars + JARS para añadir al CLASSPATH Ejemplo: yarn jar mr.jar -files ~/fichero in out Apache Hadoop, VII Seminario de Invierno 118/125
  • 141. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Uso desde la aplicación Métodos definidos en Job addCacheFile(URI uri): añade un fichero a la cache addCacheArchive(URI uri): añade un archivo a la cache addFileToClassPath(Path file): añade un fichero al CLASSPATH addArchiveToClassPath(Path file): añade un archivo al CLASSPATH URI[] getCacheFiles(): obtiene los ficheros en la cache URI[] getCacheArchives(): obtiene los archivos en la cache Apache Hadoop, VII Seminario de Invierno 119/125
  • 142. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Contadores Hadoop incorpora contadores para obtener datos del trabajo: Contadores internos: informan sobre el comportamiento de la ejecución Contadores definidos por el usuario (interfaz Counter) Permiten obtener información adicional sobre las tareas Definidos mediante Java enums, que permiten agrupar contadores relacionados Se accede a ellos mediante el método getCounter() del MapContext o el ReduceContext Se modifican mediante los métodos del interfaz Counter Apache Hadoop, VII Seminario de Invierno 120/125
  • 143. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 121/125
  • 144. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (VIII) Práctica 12: Analizar el programa WordCountPRO ()proyecto 08-wordcountpro) Ejemplo de ejecución: yarn -jar wordcountpro.jar -Dwordcount.case.sensitive=true indir outdir -skip skipfile.txt Apache Hadoop, VII Seminario de Invierno 122/125
  • 145. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Alternativas a Java Hadoop Streaming API que permite crear códigos map-reduce 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/current/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 Apache Hadoop, VII Seminario de Invierno 123/125
  • 146. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 124/125
  • 147. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (IX) Práctica 13: WordCount en Python (directorio 09-wordcountpython) $ yarn jar $HADOOP_PREFIX/share/hadoop/tools/lib/hadoop-streaming-*.j -files WordCountMapper.py,WordCountReducer.py -input indir -output outdir -mapper WordCountMapper.py -reducer WordCountReducer.py -numReduceTasks 2 Nota: La opción -files sólo se necesita si se ejecuta en un cluster, para copiar los scripts en los nodos del cluster Apache Hadoop, VII Seminario de Invierno 125/125