--- 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:== ![](https://i.imgur.com/m6FIeFJ.png) ![](https://i.imgur.com/sAqHRrp.png) * Vamos instalando algunas cosas: ![](https://i.imgur.com/4Wnt3bc.png) ![](https://i.imgur.com/etcYSko.png) * Instalo: ``` sudo yum install telnet links htop ``` * Monitorizo con htop ![](https://i.imgur.com/BOSMD1m.png) --- * 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): ![](https://i.imgur.com/H9hmlh7.png) * Lanzo Cloudera (doble click). Al cabo de un rato: ![](https://i.imgur.com/pqlI9RQ.png) :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 ![](https://i.imgur.com/1qNNKDi.png) http://quickstart.cloudera:7180 User: cloudera Pass: cloudera ![](https://i.imgur.com/iBqR5LF.png) --- 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: ![](https://i.imgur.com/capLSek.png) * Servicios del nodo ![](https://i.imgur.com/THYCyFJ.png) * Número de equipos: ![](https://i.imgur.com/X3FReXT.png) * Estadísticas: ![](https://i.imgur.com/Mpt7IRN.png) * Avisos de configuración ![](https://i.imgur.com/i8n6fa3.png) * Un servicio que la plataforma cloudera manager destaca: ![](https://i.imgur.com/0lfOVqm.png) * Paseo. * Vemos hosts: ![](https://i.imgur.com/t1oZGP2.png) * Aquí vemos todos los roles (servicios) que hay instalados en los hosts ![](https://i.imgur.com/Gq9T2ER.png) * 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: ![](https://i.imgur.com/xqCFtAs.png) * Ejecutamos HDFS --> servicio encargado de arrancar ![](https://i.imgur.com/TzHRL9f.png) ![](https://i.imgur.com/us75ess.png) * Arrancamos también YARN. Diremos: "El servicio YARN se compone de varios roles" ![](https://i.imgur.com/fo7SCl0.png) * Podemos ver los últimos comando en: ![](https://i.imgur.com/EzgXyBt.png) * En cada servicio tenemos su propio panel: ![](https://i.imgur.com/YXHgP3J.png) * Cada panel tiene menús comunes. Por ejemplo, instancias de YARN: ![](https://i.imgur.com/l8ZcEHq.png) * 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 ![](https://i.imgur.com/Lht62UP.png) * Replicación: se guarda el dato por triblicado * Replication Factory y Block size --> parámetros importantes * Cambiamos la configuración ![](https://i.imgur.com/nQ25hmB.png) * Aparecen dos iconos: ![](https://i.imgur.com/tT10OWH.png) * 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: ![](https://i.imgur.com/smavQFa.png) * Indica todos los cambios que se deben realizar en los archivos de cambios * Como se escribe: ![](https://i.imgur.com/CPabKnA.png) * 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: ![](https://i.imgur.com/UD6mI7q.png) * 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 ![](https://i.imgur.com/XrAftSr.png) ![](https://i.imgur.com/jYikstj.png) * ¿Cuál es mi home? También creo un directorio: ![](https://i.imgur.com/zmvryxf.png) * También de forma abreviada ![](https://i.imgur.com/ByhxkPs.png) ![](https://i.imgur.com/U98iyt3.png) * ¿Qué pasa aquí? ![](https://i.imgur.com/hcGS4Ex.png) --> sudo no tiene permisos. Necesitas al administrador de hdfs. ¿Quién es? ==hdfs== * Si queremos ejecutar con el usuario hdfs: ![](https://i.imgur.com/9Yfu8Sg.png) --- ++Apache Ambari++: interfaz gráfica de Hadoop (alternativa a cloudera) Mirar documentación del profe --- * Ejercicios hdfs ![](https://i.imgur.com/WqJaIBD.png) No dan ningún problema * También podemos hacer todo esto desde: ![](https://i.imgur.com/RdZJmrh.png) * Hay un componente propio de Hadoo (lo genera el NameNode) Lo tienen todos los clústeres de Hadoop ![](https://i.imgur.com/9AwNn7g.png) * Tiene una utilidad para ver directorios ![](https://i.imgur.com/yo3mfIm.png) * También tenemos otras GUI. Por ejemplo, Hue: ![](https://i.imgur.com/pk4trmu.png) * Activamos el servicio Hue y nos vamos a su panel y de allí al portal ![](https://i.imgur.com/u7jXeJH.png) * Entramos con cloudera/cloudera (comenta que el primer usuario se convierte en admin) * Esto es la interfaz final; la que verá el usuario final ![](https://i.imgur.com/FljJ2jY.png) * Hay en Hue un navegador de ficheros: ![](https://i.imgur.com/vjDRKzL.png) ![](https://i.imgur.com/3hmT0Er.png) * Se puede interactuar con HDFS mediante API REST: hay dos escuchando (uno en el puerto 50070 y otro más moderno 14000) ![](https://i.imgur.com/VckoNhp.png) --- 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 ![](https://i.imgur.com/YcGFmzl.png) * Añadimos el Role nuevo. Clicamos "Add Role Instances": ![](https://i.imgur.com/0wTpJFK.png) ![](https://i.imgur.com/h3Vd6vf.png) ![](https://i.imgur.com/LkFXfIl.png) ![](https://i.imgur.com/nruRvFo.png) * Si miramos las instancias en HDFS vemos que tenemos un role más: ![](https://i.imgur.com/towbpk5.png) * ¿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 ![](https://i.imgur.com/QiaKlqa.png) * ¿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.