---
tags: Big Data y Apache Hadoop
---
# Big Data Curso
---
Datos Ángel García -- PUE
Administrador PUE del Curso
https://www.cloudera.com/developers/academic-partnership.html angel.garcia@pue.es
---
Laboratorios pue.es
Es un puente entre escritorio y html:
[guacamole](https://guacamole.apache.org/) La caña!
Guacamole
Navegador <==> Guacamole <==> VNC / Linux
Navegador <==> Guacamole <==> RDP / Windows
---
==Documentación del curso==
:speaker:
https://bit.ly/2DdHmlF
[Apuntes - Presentación](https://drive.google.com/drive/folders/1Lt-rOwte5r9VvgCphfsABIDyAykm2YSX?usp=sharing)
[Documentación Cloudera](https://docs.cloudera.com/documentation/enterprise/5-13-x.html)
---
(1er día)
# Intro
- ++Presentación:++ Introducción Big Data
- Muchos datos: IoT, Pb/s (petabits por segundo) (Peta 10^15^)
- Hay que almacenarlos y procesar en un tiempo razonable
- Muchas máquinas cooperando tanto en el almacenamiento como en el procesamiento
- ++Historia++
- 90's --> Yahoo, Altavista, buscadores con un servidor central
- ==Llega Google== --> Con un servidor NO hacemos nada. Deciden montar servidores con máquinas simples --> Trabajar en parelelo --> Sistema de ficheros distribuido : Google file system GFS!!!!
- Google inventa Map / Reduce --> Algoritmos fácilmente paralelizable
- Google inventa Big Table --> Más rápido que SQL
- Van montando el buscador --> Es escalable!!! Cada máquina aporta discos y capacidad de proceso.
- ==Replicar Google== --> Gente busca funcionalidades como la Google. Google empieza a publicar GFS y Map/Reduce --> Aparece ==Hadoop== Software libre --> Entran empresas (Yahoo--> compra)
- Facebook adopta hadoop (2005)
- Cloudera simplifica hadoop y da soporte (igual que linux). Es decir, crearon un producto basado en Hadoop
- Otras hacen lo mismo: MapR, Horton Works --> Distribuciones de Hadoop (software libre GPL --> Las empresas siguen aportando en Hadoop)
- ==soluciones cloud== AWS, Google Cloud, Azure etc --> soluciones que permiten crecer en un momento dado: on premise (en casa del cliente) vs cloud vs mixtas
- Soluciones cloud realmente se basan en Hadoop
- 2019: Cloudera y Horton Works se fusionan --> Defenderse de Cloud
- NOTA: S3 de amazon es también big data y no se basa en HDFS (Hadoop se basa en HDFS) y puede haber otros tipos de almacenamientos (Mongo, Google Cloud Storage)
- ++¿Por qué utilizar Hadoop?++
- Componentes:
- Almacenamiento: HDFS
- Yarn (proceso): Map/Reduce or Spark
- Suele haber muchos otros servicios (ecosistema)
- Cluster distribuido
- Los datos se guardan cerca de donde se procesan: cuando llegan datos se dividen en trozos, se envían a las máquinas. 1 máquina - 1 trozo --> El cluster se encarga.
- No hay cuellos de botella: los elementos trabajan de forma independiente. Por tanto: debe haber algún nodo master y algún nodo slave
- Hay un factor de replicación: se replican los "trozos" de datos. --> Lo mismo se recupera de un proceso
- Para programar: definir cómo se mapea, cómo se reduce --> el resto lo hace el clúster. NOTA: no sirve para todo ¿sé cómo mapear?
- Ejemplos donde Hadoop NO mola:
- ray tracing (efectos especiales) --> hay soluciones mejores que hadoop: sistemas paralelos (cada cluster calcula la escena)
- Folding at home -- proyectos: aportas tiempo de CPU
- Seti@home -- proyecto de procesado paralelo distribuido
- ==HADOOP viene bien cuando tenemos muchos datos==
++Montando Hadoop++
- Nodos maestro --> mejores máquinas: dos fuentes de alimentación, dos interfaces redes, discos fiables (mayores redundancias)
- Nodos workers --> estas tendrán más CPU (commodity hardware (no es necesario grandes máquinas)). No gastar hardware de calidad sino mucho hardware
- ¿Dónde invertir? Siempre invertir en cantidad que en calidad. Nunca en hardware especializado. No merece la pena gastar en SSD. Mejor discos pequeñas (cuantos más elementos más grados de paralelización)
- Todas las máquinas lo más parecidas posibles: Kickstart, Cobbler, Clonezilla, Fog
- Otras herramientas: chef, ansible, pupple, saltstack...
- Hadoop solo funciona sobre linux
---
:speaker:
https://bit.ly/2DdHmlF
---
# 2º Día
Para hoy: Cloudera Manager, HDFS, y si da tiempo comenzamos con M&R y YARN
==Yo voy haciendo en mi máquina lo que él hace:==


* Vamos instalando algunas cosas:


* Instalo:
```
sudo yum install telnet links htop
```
* Monitorizo con htop

---
* Cloudera:
Cloudera Express (gratuito sin algunas funcionalidades interesantes), Cloudera Enterprise (pago), Cloudera Enterprise Trial (prueba de 60 días <-- Esto es lo que normalmente se utiliza en educación)
* Para activar Cloudera tengo algo en el escritorio (se trata de una máquina proporcionada por cloudera):

* Lanzo Cloudera (doble click). Al cabo de un rato:

:warning: Es una máquina con 16G de Mem y 4 cores
* Este paso ya no será necesario próximos días --> La máquina tardará más en arrancar
* NOTA: Este cluster consta de un solo NODO
* Accedemos por navegador

http://quickstart.cloudera:7180
User: cloudera
Pass: cloudera

---
NOTA: duda
```
lsof -nPi | grep LISTEN --> Puertos a la escucha
sudo service cloudera-scm-server restart --> reiniciar el servicio
otros comandos: pgrep, pkill
otro: sudo jps | awk {print $1} | xargs sudo kill
```
* ¿Qué tenemos en cloudera manager *dashboard*? (Recuerda: cloudera es una versión comercial del clúster de Hadoop)
* Nodo:

* Servicios del nodo

* Número de equipos:

* Estadísticas:

* Avisos de configuración

* Un servicio que la plataforma cloudera manager destaca:

* Paseo.
* Vemos hosts:

* Aquí vemos todos los roles (servicios) que hay instalados en los hosts

* NOTA: host y nodo son equivalentes
* Los roles se distribuyen en función de lo yo quiera y de las máquinas. (Recordad: rol worker en máquinas más poderosas y rol master)
* Roles:

* Ejecutamos HDFS --> servicio encargado de arrancar


* Arrancamos también YARN. Diremos: "El servicio YARN se compone de varios roles"

* Podemos ver los últimos comando en:

* En cada servicio tenemos su propio panel:

* Cada panel tiene menús comunes. Por ejemplo, instancias de YARN:

* Aquí puedes "intuir" qué nodos son workers (NodeManager), el master (Server) y auxiliares
---
Demo que estamos utilizando:
NOTA: https://downloads.cloudera.com/demo_vm/virtualbox/cloudera-quickstart-vm-5.13.0-0-virtualbox.zip
Esta máquina necesita por lo menos 10G para funcionar de Mem
---
## HDFS
* Rollazo teórico mirar apuntes
* Escalabilidad
* Tamaños de ficheros. Está pensado para ficheros de 128M (linux está pensado para ficheros de 4k) NOTA: supongo que hablamos de tamaño de bloque
* Mejor pocos ficheros muy grandes
* Master: Instancia NameNode
* Alta disponibilidad: tienes varios master
* Worker: Instancia o Role Datanode

* Replicación: se guarda el dato por triblicado
* Replication Factory y Block size --> parámetros importantes
* Cambiamos la configuración

* Aparecen dos iconos:

* Estos iconos indican que hay dos cambios pendientes: distribución de los cambios (propagar cambios) y que requiere reiniciar el servicio
* Si clico en cualquiera de los dos iconos aparece:

* Indica todos los cambios que se deben realizar en los archivos de cambios
* Como se escribe:

* El cliente (programa) le pide al master ¿dónde escribo un bloque de datos (128Mb)? El master le dice: en 2, 5, 6. Cliente escribirá en 2. El nodo 2 escribirá en 5 y 5 escribirá en 6.
* Destaca que NameNode "casi no trabaja" lleva un control de qué ficheros hay y dónde están sus bloques. --> No hay cuello de botella (share nothing)
* Cuando alguien va a leer le dice a NameNode: "Dime dónde está el fichero con el índice x" Y NameNode le dice "está aquí y allí"
* Por eso para reducir el trabajo de NameNode y reducir el uso :
* Mejor pocos ficheros
* Mejor blocques grandes (reducir entradas)
* Deshacemos los cambios:

* Clico en Details y hacemos "revert" para revertir los cambios.
# 3º Día
## Encender máquinas
* Yo tengo problemas. Hago un restart
* Comenta diferencias entre Cloudera con licencia Enterprise y la Trial. Por ejemplo:
* Trial no dispone de rolling start
* No puedo asignarles un nombre a los cambios
## Comandos HDFS
`$hdfs dfs -ls /` --> listado de ficheros en raíz


* ¿Cuál es mi home? También creo un directorio:

* También de forma abreviada


* ¿Qué pasa aquí?

--> sudo no tiene permisos. Necesitas al administrador de hdfs. ¿Quién es? ==hdfs==
* Si queremos ejecutar con el usuario hdfs:

---
++Apache Ambari++: interfaz gráfica de Hadoop (alternativa a cloudera)
Mirar documentación del profe
---
* Ejercicios hdfs

No dan ningún problema
* También podemos hacer todo esto desde:

* Hay un componente propio de Hadoo (lo genera el NameNode) Lo tienen todos los clústeres de Hadoop

* Tiene una utilidad para ver directorios

* También tenemos otras GUI. Por ejemplo, Hue:

* Activamos el servicio Hue y nos vamos a su panel y de allí al portal

* Entramos con cloudera/cloudera (comenta que el primer usuario se convierte en admin)
* Esto es la interfaz final; la que verá el usuario final

* Hay en Hue un navegador de ficheros:


* Se puede interactuar con HDFS mediante API REST: hay dos escuchando (uno en el puerto 50070 y otro más moderno 14000)

---
Mirar cliente REST de una extensión de Chrome!
---
* Para que funcione tenemos que asignar la funcionalida webfds
* Mirar que el servicio está activado en la configuración

* Añadimos el Role nuevo. Clicamos "Add Role Instances":




* Si miramos las instancias en HDFS vemos que tenemos un role más:

* ¿Qué pasa cuando perdemos un nodo? --> Datos perdidos (pero están replicados) --> Hay que realizar una tercera réplica ya que ahora solo tenemos 2 réplicas --> NameNode decide dónde
* Rebalanceo: cuando añadimos nodos hay que rebalancear

* ¿Qué pasa con los ficheros corruptos? ++Bit-rot++
* Cada vez que se guarda un bloque se guarda un CRC de "confianza"
* Cada tres semanas o así (parámetros) se revisas todos los CRC
* Le podemos decir a HDFS cómo están distribuidos los nodos ++Rack-aware++. Es decir, la topologia física
* Distribuye datos en localizaciones distintas. Así copio un bloque en un rack y la réplica en otro rack (ojo! A mayor distribución menor velocidad)
## YARN
* Es un planificador de tareas
* Busca aprovechar bien los recursos
* Evita sobresuscripción: que no haya intercambios constantes con swap
* Roles:
* Master: resource manager --> Reparte el trabajo entre máquinas
* Application Master --> El que se pone en contacto con los workers. Se encarga de la ejecución
* Ejercicio: lanzar una tarea: contar número palabras
[Programa](https://github.com/caizkun/mapreduce-examples/blob/master/WordCount/src/main/java/WordCount.java)
* Map/reduce: fases: Map, Reduce, Shuffle, Sort
* Map: voy leyendo palabras. Se generan pares clave-valor --> palabra-NumDevecesQueAparece Ejemplo: [hola,1], [tonto,1], [hola, 1]
```
String[] words = value.toString().trim().split("\\s+");
// output (word, 1)
for (String word : words) {
context.write(new Text(word), new IntWritable(1));
}
```
* Reduce: recibe pares. Agrupa cada clave con sus valores. Ejemplo: (hola, [1,1]), (tonto,[1])
```
for (IntWritable value : values) {
sum += value.get();
}
```
* Programador:
* cómo voy a definir el mapeo
* como voy definir la reducción.