3. hadoop
TRANSCRIPT
1
Hadoop
Cristian González García v 1.2.2 Noviembre 2015
Índice Introducción
Arquitectura
Configuración Básica
Standalone Mode
Pseudo-Distributed Mode
Ejemplo: Word Count
Ejemplo: Hipotecas
Errores Comunes
Comandos y otros
Bibliografía
2
Introducción
3
¿Qué es? http://hadoop.apache.org/
Proyecto Open Source Licencia Apache License 2.0
Mantenido por Apache Foundation
Framework Sistema de archivos distribuidos
Volúmenes grandes de datos
Escalable, detección de fallos, alta disponibilidad
Ejecución de computación paralela
Desarrollado en Java
Multiplataforma
Yahoo! Es su mayor contribuyente
4
Nacimiento Creado por Doug Cutting y Mike Cafarella
Coincidieron en Yahoo!
Nutch, Hadoop
Se basaron en el artículo sobre MapReduce de Google [1]
Doug Cutting
El nombre proviene del elefante de juguete de su hijo
Desarrolló también Lucene (API)
Ahora forma parte de Cloudera
Se desarrolló para Nutch, un motor de búsqueda basado en Lucene
5
Artículo de Google
Se inspiró en el artículo [1] de Google sobre
MapReduce y Google File System (GFS)
Computación distribuida
6
¿Qué ofrece?
Computación distribuida
Para cualquier tarea que pueda ejecutarse
por lotes
Análisis de datos, procesamiento de imagen
y video, estadísticas, búsquedas, paralelizar
servicios, publicidad, almacenaje y
búsqueda, …
Gran capacidad de cómputo
7
Es utilizado por … I Adobe
Desarrollo de software Almacenamiento y procesamiento de datos desde 2008 30 nodos y próximamente 80 Hadoop, Hbase y trabajos MapReduce
Alibaba Comercio electrónico Procesamiento de datos para su motor de búsqueda 15 nodos de 8 cores, 16GB Ram y 1.4TB (10^12)
Ebay Subastas Optimización de búsquedas 532 nodos de 8 cores y 5.3PB (10^15)
MapReduce, Pig, Hive y HBase
Facebook Red Social Almacenar copias de los logs, análisis y Machine Learning 1100 nodos con 8800 cores y 12PB (10^15) 300 nodos con 2400 cores y 3PB (10^15)
8
Es utilizado por … II Last.fm
Red Social y Radio por Internet
Cálculo de gráficas, informes, análisis de datos, …
100 nodos (Dual quad-core Xeon L5520 @ 2.27GHz & L5630 @ 2.13GHz , 24GB RAM, 8TB(4x2TB)/node storage)
LinkedIn Red Social
Gente que puedas conocer, tablón, skills, …
~4100 nodos ~800 Westmere-based HP SL 170x, with 2x4 cores, 24GB RAM, 6x2TB SATA ~1900 Westmere-based SuperMicro X8DTT-H, with 2x6 cores, 24GB RAM, 6x2TB SATA ~1400 Sandy Bridge-based SuperMicro with 2x6 cores, 32GB RAM, 6x2TB SATA
Pig
Twitter Red Social
Almacenaje y procesamiento de Tweets, logs, etc…
Pig, Avro, Hive y Cassandra
Yahoo! Empresa global
Más de 100.000 cpu. El mayor clúster es de 4500 nodos
Pig
9
Es utilizado por … III
Amazon
Spotify
Universidades
Telefónica
Y decenas de empresas más…
http://wiki.apache.org/hadoop/PoweredBy
10
Arquitectura
11
Componentes de un Clúster I Componentes
Nodo Maestro MapReduce: Procesamiento
JobTracker
TaskTracker
HDFS: Almacenamiento NameNode
DataNode
Nodos esclavo MapReduce
TaskTracker
HDFS DataNode
JRE 1.6+, JRE 1.7+ (A partir de Hadoop 2.7.1)
SSH: Para conectar los nodos
12
JobTracker Gestiona los trabajos y recursos del clúster Funcionamiento
1. Recibe el trabajo de la aplicación cliente
2. Se comunica con el NameNode para localizar los datos
3. Localiza nodos TaskTracker con ranuras disponibles o cercanas a los datos
4. Envía el trabajo a los nodos TaskTracker elegidos
5. Monitoriza los nodos TaskTracker Si no recibe “noticias” de un nodo TaskTracker, lo dará
por fallido y reprogramará ese trabajo para otro nodo TaskTracker
6. Actualiza el estado cuando se completó el trabajo
7. La aplicación cliente puede preguntar al JobTracker por el estado del proceso
13
TaskTracker Son los nodos que aceptan tareas del nodo
JobTracker
Sus operaciones son Map, Reduce y Shuffle
Tienen configurados un número de slots que se corresponden con el número de trabajos que pueden aceptar Tienen preferencia los nodos con un DataNode que
contenga datos de ese trabajo Si no, busca una slot en un nodo del mismo rack
Para realizar el trabajo, crea un proceso separado. Así evita que se caiga el TaskTracker si el proceso falla
Cuando el proceso termina, notifica el JobTracker
Envía señales cada poco minutos al JobTracker para que este sepa que el nodo sigue vivo Adjunta el número de slots libres
14
NameNode Es el nodo principal del sistema de ficheros HDFS
Guarda el árbol del directorio de ficheros y su localización
No almacena datos de ficheros
Recibe las peticiones de ficheros y responde con los nodos que los poseen
Si se cae, se cae todo el sistema de ficheros
Puede existir un nodo secundario (SecondaryNameNode) en otro nodo para evitar perder el sistema si se cae el principal
Se recomienda que no comparta el nodo con ninguno de los otros 3: JobTracker, TaskTracker y DataNode
15
DataNode Almacena datos en el sistema HDFS
Se conectan con el NameNode
Responde a las peticiones del NameNode
Las aplicaciones cliente y los trabajos MapReducehablan directamente con los DataNode una vez estas recibieron la localización del NameNode
Deberían de compartir nodo con los TaskTracker, para estar cerca de las operaciones MapReduce, por rendimiento
Los DataNodes pueden hablar entre ellos para replicar datos No se necesitan discos RAID
Configuración ideal 1 disco físico por CPU 1 TaskTracker por CPU. Así usan el 100% de la CPU
16
Componentes de un Clúster II
17
Almacena los datos
Gestión de datos
Gestión de componentes
Envía las tareas Map y reduce
Obedece al JobTracker
Ejecuta tareas Map y Reduce
Componentes de Hadoop HDFS MapReduce
Hadoop Streaming
Hive
Hue
Pig
Sqoop
Oozie
HBase
FlumeNG
Mahout
Fuse
Zookeeper
18
Hadoop Distributed File System
(HDFS) http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-
hdfs/HdfsUserGuide.html
Sistema de ficheros distribuidos y escalable de Hadoop
Escrito en Java
Soporta comandos de Shell http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-
common/FileSystemShell.html
Altamente configurable
Distribuye los ficheros por los diferentes nodos Permite trabajar con URL: Amazon con S3
Tiene interfaz web en: http://namenode-ip:50070/
Se compone de NameNode
Gestiona el sistema de ficheros
DataNode Almacena los datos y sirve los datos
Soporta otros tipos de trabajo además de MapReduce Aprendizaje automático, procesamiento de imágenes, análisis de
marketing, …
19
MapReduce I http://hadoop.apache.org/docs/r2.7.1/hadoop-mapreduce-client/hadoop-
mapreduce-client-core/MapReduceTutorial.html
Framework para facilitar la programación de aplicaciones para procesar grandes volúmenes de datos de manera paralela usando clústeres
Dos fases Map: Trata los elementos ya divididos de la entrada y los transforman en un conjunto
clave-valor Reduce: Ordena y junta los elementos clave-valor para crear el resultado
Componentes Job
Programa MapReduce que divide en trozos los datos
JobTracker Gestiona los trabajos y recursos del clúster
Gestiona los TaskTracker y su situación
TaskTracker Toma las órdenes del JobTracker y realiza los trabajos MapReduce
Se obtiene un fichero por cada “reduce task” configurado
Soporta varios lenguajes de programación Java, Python, Ruby, C++
20
MapReduce II
21
MapReduce III
22
MapReduce IV –
Programación I
Se compone de 3 partes
Map
Reduce
Main
Se puede modificar también el “Combiner”
Todo va dentro de una clase (En Java)
http://hadoop.apache.org/docs/r2.7.1/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html
23
MapReduce IV –
Programación II
24
Clave-Valor generado por el Map
Contexto de la aplicación
Valor recibido. Es una línea
Iteramos para obtener todas las palabras
Indicamos que el Map va a ser<Text, Int>
Recibe un objeto genérico
MapReduce IV –
Programación II
La salida no se reordena
25
Indicamos la entrada del ReduceEs la misma que la salida del Map<Text, Int>
Valor recibido. <Text, Int>
Agrupa sólo los valores por la misma Clave
Al estar agrupados por Clave,sumamos para ver cuantos hay iguales
Clave
Metemos al contexto el resultado del Reducer
MapReduce IV –
Programación III
Contiene las llamadas y configuraciones Configuración
Job
Clase principal Clase del Map
Clase del Combiner
Clase del Reducer
Salida
Ruta de entrada
Ruta de salida
Salida
https://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/Job.html
26
MapReduce IV –
Programación IV
En el Map debemos hacer las operaciones necesarias para preparar nuestros datos En vez de iterar, tal vez obtener una columna
determinada, extraer una etiqueta, etc…
Si se quiere enviar dos datos en el Map, hay que crear una clase que permita instanciar un objeto que guarde dos valores y usar esa. Heredad de “Writable” y sobrescribid sus métodos
Si queréis leer un tipo de dato diferente, como XML, tenéis que crear una clase que herede de “TextInputFormat” y sobrescribir sus métodos
Si tenéis varias entradas, tenéis que especificar todas en el “main”
27
YARN http://hadoop.apache.org/docs/current/hadoo
p-yarn/hadoop-yarn-site/YARN.html
YARN (Yet Another Resource Negotiator)
MapReduce 2.0, conocido como YARN o NextGen MapReduce
Separación del JobTracker ResourceManager: Gestión de recursos
Application Master: Negociación de recursos
Desacoplamiento de las dos tareas
Ofrecer más gama de procesamientos y aplicaciones Streaming interactivos simultáneos
Acceso Web
28
Hadoop Streaming
Parte de Hadoop
http://hadoop.apache.org/docs/r2.6.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/HadoopStreaming.html (última versión)
https://wiki.apache.org/hadoop/HadoopStreaming
Librería que permite crear trabajos MapReduce en otros lenguajes de programación
C, C++, Python, Perl, Bash, …
30
Hive
Proyecto de la Apache Foundation
http://hive.apache.org/
Inicialmente desarrollado por Facebook
HiveQL es un lenguaje similar a SQL para crear trabajos MapReduce
Permite incluir Map y Reduce propios cuando sea ineficiente usar HiveQL
Está escrito en Java
Tiene interfaces JDBC/ODBC
31
Hue
Proyecto Open Source
http://gethue.com/
Interfaz web gráfica para desarrollar con
utilidades para Hadoop
Hive, Pig, Sqoop, Oozie, gráficas,
monitorización, …
Escrita en Python
32
Apache Pig Proyecto de la Apache Foundation
http://pig.apache.org/
Inicialmente desarrollado por Yahoo! El 40% de los trabajos de Yahoo! Están hechos con Pig
PIG Al igual que los cerdos comen de todo, Pig está pensado
para poder trabajar con cualquier tipo de datos
Plataforma para análisis de grandes conjuntos de datos
Componentes Lenguaje de alto nivel Lenguaje “Pig Latin”
Sintaxis parecida a SQL
Compilador que crea programas MapReduce
33
Apache Sqoop
Proyecto de la Apache Foundation
http://sqoop.apache.org/
Sqoop <- Sql-to-Hadoop
Transferencia de datos bidireccional entre
Hadoop y BBDD relacionales
Tablas o BBDD
Interfaz por línea de comandos
34
Oozie
Proyecto de la Apache Foundation
http://oozie.apache.org/
Aplicación web REST en Java
Orquestador de procesos
Creador de flujos de trabajos MapReduce
Similar a BPM
Permite acumular acciones
Coordinador de procesos
Definición de aplicaciones
Monitorización de sus aplicaciones
35
HBase
Proyecto de la Apache Foundation
http://hbase.apache.org/
Almacenamiento clave-valor
BBDD no relacional
Open Source
Escrita en Java
Funciona sobre el HDFS de Hadoop
No lo sustituye
36
Apache FlumeNG
Proyecto de la Apache Foundation
http://flume.apache.org/
Cargador en tiempo real para transmitir
datos a Hadoop
Almacena datos en HDFS y HBase
Captura, agregación y movimiento de
forma eficiente de datos log de diferentes
orígenes a un repositorio
37
Apache Mahout
Proyecto de la Apache Foundation
http://mahout.apache.org/
Librería de aprendizaje de máquinas y
minería de datos utilizando Hadoop
Utilizado para análisis predictivos y
avanzados
Descubrimiento de patrones
Posee algoritmos de recomendación,
clustering y clasificación
39
Fuse
http://fuse.sourceforge.net/
Permite utilizar el sistema de ficheros HDFS
como un sistema normal
Permite el uso de comandos como ls, rm, cd,
…
Soporta GNU/Linux, Mac OS, Windows, …
40
Apache Zookeeper Proyecto de la Apache Foundation
http://zookeeper.apache.org/
Provee de una estructura centralizada para la sincronización y coordinación de servicios de las aplicaciones distribuidas Configuración, jerarquía de nombres, …
Soporta alta disponibilidad al tener redundancia de servicios
Se encarga de almacenar toda la información necesaria para distribuir aplicaciones
Coordina los servicios para aplicaciones distribuidas
41
Modos de funcionamiento Standalone
Modo por defecto
No distribuido
Un solo proceso Java
Útil para depurar
Pseudo-distributed
Modo distribuido en una sola máquina
Varios procesos Java a la vez
Fully-Distributed
Modo distribuido en varios nodos
43
Configuración básica
44
Actualizar
Actualizamos el servidor
Actualizamos la lista de paquetes y versiones
Actualizamos los paquetes disponibles
Instalamos el OpenJDK 7
45
Descargar Hadoop
Descargamos Hadoop 2.5.1 (no el -src)
http://apache.rediris.es/hadoop/common/h
adoop-2.7.1/
Utilizaremos WGET
Esperamos…
46
Descomprimir Hadoop
Nos situamos en la carpeta de la descarga
y comprobamos que está
Descomprimimos el archivo en una carpeta
47
Preparar Hadoop
Movemos Hadoop a /usr/local
Vamos a la carpeta /usr/local
Creamos un enlace para mejorar el
mantenimiento
Comprobamos que esta todo correcto
48
Variables de entorno I
Vamos a la carpeta del usuario
ó
Establecemos paths y directorios
Hadoop, Java y JavaTools
49
Variables de entorno II
Cargamos el nuevo fichero .bashrc para
cargar las variables sin tener que iniciar un
nuevo Shell
50
Clave público-privada
51
La renombramos a id_rsa
Subimos este fichero, el .pem
Standalone Mode
52
Ejemplo I
Creamos una carpeta
Insertamos datos en ella
Ejecutamos un ejemplo de Hadoop
bin/hadoop jar /example.jar grep “carpetaDatos”
“carpetaResultado” ‘expresión regular’
Si la carpeta “carpetaResultado” existe, dará error
Buscamos las cadenas que comiencen por dfs
53
Obtención de resultados
Si todo fue bien, creará los archivos en la
carpeta
En el fichero encontraremos los resultados
54
Ejemplo II
Borramos la carpeta del resultado
Cambiamos la expresión regular
Buscamos las cadenas que comiencen por conf
Resultado
55
Pseudo-Distributed Mode
56
Configuraciones
Vamos a la carpeta de configuraciones
Ficheros de configuración
57
Core-Site I
Modificamos “core-site.xml”
Configuración del sistema de ficheros
Contiene
La configuración del HDFS, del MapReduce y de seguridad
Otras configuraciones
http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/core-default.xml
58
Core-Site II
Añadimos nuestro servidor
59
HDFS-Site I
Modificamos el fichero “hdfs-site.xml”
Contiene
Otras configuraciones las configuraciones de
los NameNode y DataNode
https://hadoop.apache.org/docs/r2.7.1/hado
op-project-dist/hadoop-hdfs/hdfs-default.xml
60
HDFS-Site II
Configuración de la replicación de los
bloques de los ficheros por los nodos
Solo usamos 1
Con 1, tendremos sólo una copia
61
OpenSSH I
AWS viene con OpenSSH pre-instalado
ssh-agent
Programa que maneja las contraseñas
para claves privadas
ssh-add
Programa que solicita al usuario la clave
privada y la añade a una lista
mantenida por “ssh-agent”. Una vez
añadida, no se solicitará más la clave al
usar SSH
62
OpenSSH II
Posible Error VII y VIII (Mirar soluciones)
Debemos activar el acceso mediante clave
privada
Vamos a la carpeta “~/.ssh”
Cambiamos los permisos
authorized_keys: lectura a todos
id_rsa: lectura solo el dueño
63
OpenSSH III Iniciamos el “ssh-agent”
-s: genera la salida comandos Bourne Shell en la salida estándar
Añadimos la identificación al repositorio del agente. El parámetro es la clave Por defecto cogería “id_rsa” si no ponemos nada
Si no funcionase el último paso…
O…
64
OpenSSH IV
Comprobamos que esto funcione sin pedir
la passphrase
65
Hadoop-env
Abrimos el fichero “hadoop-env.sh”
Contiene las variables de entorno usadas
por Hadoop
Establecemos la variable “JAVA_HOME”
66
Arrancado Hadoop I
En el primer arranque de Hadoop hay que
formatear su sistema de ficheros
Nunca más hacer esto, pues si no, perderéis
vuestro datos, salvo que deseéis esto
Con esto, está todo listo para iniciar
Hadoop
67
Arrancado Hadoop II
Si todo fue bien, debería de funcionar
Si ya estuviesen arrancados, nos manda
que primero los detengamos
68
Arrancado Hadoop III
Accedemos a la interfaz del “NameNode”
http://nuestraIpEc2:50070/dfshealth.html
69
Directorios HDFS
Creamos los directorios HDFS para ejecutar
los trabajos con MapReduce
bin/hdfs dfs –mkdir “nombreDeLaCarpeta”
Si existen nos dará error
Copiamos los datos al sistema de ficheros
distribuidos de Hadoop
bin/hdfs –put “datos” “carpetaDestino”
70
Ejecución de Hadoop
Ejecutamos un ejemplo de Hadoop
bin/hadoop jar /example.jar grep
“carpetaDatos” “carpetaResultado”
‘expresión regular’
Si la carpeta “carpetaResultado” existe, dará
error
Buscamos las cadenas que comiencen por
“dfs”
71
Resultados I
Los resultados se crearon en el sistema HDFS
Copiamos estos resultados a un directorio
local desde el HDFS
72
Resultados II
Vemos los resultados (Forma 2)
Vemos los resultados que bajamos del sistema
HDFS
73
Resultados III
Vemos los resultados (Forma 3)
Vemos los resultados que están en el HDFS sin
traerlos a nuestro sistema
74
Parando Hadoop
Paramos los demonios
75
Ejemplo: Word Count
77
Compilación y Jar
WordCount.java
https://gist.github.com/gonzalezgarciacristian
/8295237c46d233459160
Lo subimos al servidor
Lo compilamos
Generamos el jar
78
Datos de entrada Iniciar Hadoop, ver carpetas existentes,
borrarlas, crearlas, …
Creamos el directorio con los datos de entrada
Creamos el directorio de salida
Subimos los ficheros a utilizar Obtenidos de
https://wiki.skullsecurity.org/Passwords
Pasamos los ficheros al HDFS
79
Ejecución y Resultado
Ejecutamos el proceso
Sacamos el resultado del sistema HDFS
Obtendremos una lista con las palabras más
repetidas
80
Ejemplo: Hipotecas
81
Obtención de datos
Bajamos un CSV
http://catalog.data.gov/dataset
https://mega.nz/#!S4ITzL4S!V-
dFdNCW0Q6hLGeDDyk8RBs9XM2Q2Koe52fZu
WnpbHA
Bajamos el MapReduce
https://gist.github.com/gonzalezgarciacristian
/721e7dd6e87557955b2d
82
Pasos Subimos los datos al servidor
Metemos los datos al HDFS
Compilamos el .java
Creamos el .jar
Ejecutamos el trabajo
Obtenemos los resultados (Posible Error XI)
83
Resultado
84
Errores por estar mal el CSV
Usa “,” en vez de “;”
Clave - Valor
Errores Comunes
85
Error I
org.apache.hadoop.mapred.FileAlreadyExis
tsException or 'Output directory output
already exists'. Cause: Output directory
already exists
Hadoop requiere que el directorio destino
no exista
Borrarlo o poner un directorio no existente
en la orden
86
Error II
…could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation…
El DataNode no esta funcionando
Parar los demonios
Borrar la caché: /tmp/hadoop-<username>
Formatear el nodo
87
Error III
java.lang.RuntimeException:
java.lang.NoSuchMethodException: …
Las clases map y reduce deben de ser
estáticas (static)
88
Error IV
Type mismatch in value from map:
expected org.apache.hadoop.io.Text,
received org.apache.hadoop.io.IntWritable
Comprobar el tipo de los “job”
89
Error V
Al hacer –put al sistema HDFS, da error de
conexión
Solución
Formatear el nodo
Reiniciarlo
90
Error VI
No encuentra las JavaTools al compilar
Añadir en el .bashrc las JavaTools
Reiniciar el .bashrc
91
Error VII
Open SSH
Fichero id_rsa abierto
Este fichero tiene no puede ser público: 644
Sus permisos deben de ser: 400
92
Error VIII
Open SSH
Pide la “passphrase” al añadir (ssh-add) el
“id_rsa” o da error de conexión
Comprobar que se haya subido el archivo
.pem y no .ppk
93
Error IX
Java
Si tenemos problemas con el path de Java
al compilar o con Hadoop
Comprobar que el path de JAVA_HOME
este bien puesto en el fichero .bashrc
94
Error X
Java
Si tenemos problemas con el path de Java
con Hadoop
Ir a la carpeta de configuración de
Hadoop: cd $CONF
Abrir fichero “hadoop-env.sh”
Comprobar que el JAVA_HOME sea el
correcto
95
Original
Posible ruta
Error XI
Hadoop: -get
Warning
Está solucionado para la 2.7.2
https://issues.apache.org/jira/browse/HDFS-
8099
96
Error XII
Hadoop: Ejecución
Unsupported major.nimor versión X.0
Posible compilación con la versión
incorrecta de Java respecto al Hadoop en
el que se desea ejecutar
97
Comandos útiles
98
HDFS
Listar directorios
hdfs dfs –ls
Crea directorios
hdfs dfs –mkdir
Borrar directorio
hdfs dfs –rm –R “directorio” (sin comillas)
99
Herramientas
101
Eclipse y Debug Eclipse
https://wiki.apache.org/hadoop/EclipseEnvironment
IntelliJ Idea
https://www.jetbrains.com/idea/download/
Bajar Hadoop (no el SRC)
Seguir pasos 10 a 16
http://vichargrave.com/intellij-project-for-building-hadoop-the-definitive-guide-examples/
Debug
Modo Standalone
http://wiki.apache.org/hadoop/HowToDebugMapReducePrograms
102
Bibliografía
104
Bibliografía
105
107
Hadoop
Cristian González García v 1.2.2 Noviembre 2015