Big Data Fundamentals Carlos Roda & Bert Otte
Fundamentos Big Data & Ecosistema Hadoop
Big Data y La Transformación Digital de Empresas Transformación Digital de las Empresas
Variedad
Infraestructura Veracidad
Velocidad
BIG DATA
Cultura Roles (CDO?) Interno/Externo
Valor
Gestión Datos
Volumen
Toma Decisiones basada en Datos
Hadoop: HDFS + MapReduce H(adoop) D(istributed) F(ile) S(ystem)
1
Bloque 1
DATOS
MapReduce
Input (HDFS)
1 K1
Bloque 2
Name Node (Cliente)
Map
Name Node (Backup)
K1 K1
K2
Reduce
K1
Bloque 3 2 K1
“Latidos”
Datos Redundantes
Output (HDFS)
2 Map
K2 K2
K2
3
Reduce
K2
3 K1
Map K2
Data Node
Data Node
Data Node
1
2
3
Shuffle Uso de “Commodity Hardware”
Hadoop Job
Ecosistema (Zoológico) Hadoop
Pig
YARN (Core Hadoop)
HDFS (Core Hadoop) Workflow
Coordinación
Flume
Sqoop
Spark
Storm
Procesamiento
HBase
ZooKeeper
Oozie
MapReduce
Scripting
Impala
Hive
Gestión Recursos
Almacenamiento
Hoy tocaremos los siguientes componentes…
Pig
YARN (Core Hadoop)
HDFS (Core Hadoop) Workflow
Coordinación
Flume
Sqoop
Spark
Storm
Procesamiento
HBase
ZooKeeper
Oozie
MapReduce
Scripting
Impala
Hive
Gestión Recursos
Almacenamiento
Ejercicios
HUE – Hadoop User Experience Instalar una distribución de Hadoop para cada uno iba a ser excesivamente complejo. HUE es una aplicación web que permite acceder y usar Hadoop desde cualquier navegador. Permite explorar HDFS, los trabajos que están corriendo, lanzar consultas Hive, trabajos MapReduce, modificar Hive MetaStore, etc. Ofrece una Demo online que corre contra una distribución de Hadoop ya preinstalada en la nube, a la que podéis acceder si queréis para las preguntas que lo permitan. No obstante, para las prácticas de esta sesión usaremos preferentemente una distribución hospedada en el ordenador del profesor, ya que la anterior no permite escribir.
Petición Como vamos a compartir la instalación de Hadoop, os pido por favor que seáis prudentes y no ejecutéis nada más allá de lo que se indica en el guión de la práctica. Si tenéis dudas antes de hacer algo acerca de si puede sobrecargar el sistema o afectar a otros usuarios, por favor preguntad. Sed pacientes con la ejecución de las cosas, algunas consultas pueden tardar unos minutos. No obstante, si algo tarda demasiado, preguntad o cambiad a la otra plataforma.
Conexión a la plataforma Accesos: Consultar IP Puerto: 8888 Usuario: userXX * Password: userXX *XX se asignarán los números en la clase Página de ayuda: http://demo.gethue.com/help/
Alternativa online (sin escritura): http://demo.gethue.com/ Usuario: demo Password: demo
Explora la interfaz -Echa un vistazo a los diferentes elementos que conforman los menús y elementos de la barra superior (desplegando aquellos que lo permitan) y anota los que conozcas y/o creas que vas a tener que utilizar durante la práctica.
Explora los ficheros de HDFS Pista: no confundir con “Mis Documentos” de HUE, que tiene el símbolo de una casa y se utiliza para guardar ficheros especiales que no están en la distribución HDFS subyacente. -Anota la ruta en la que estás situado/a justo al acceder al explorador de archivos. El último trozo de dicha ruta debería corresponderse con tu nombre de usuario. En cualquier momento puedes volver a esta carpeta pulsando el botón “Inicio” que aparece justo a la izquierda de la ruta (y que también tiene un símbolo de casa pero no confundir con el de “Mis Documentos). -Ve al directorio raíz (/) y anota las carpetas que veas
-Utiliza el buscador dentro de la carpeta /user para filtrar y mostrar solamente la carpeta “hive”. Anota la ruta en la que se encuentra, así como el nombre del usuario propietario de la misma y el grupo al que pertenece. Dentro de dicha carpeta deberías ver otra carpeta llamada “warehouse”, aquí es donde se guardan las tablas de datos que Hive gestiona.
Ficheros en HDFS En HDFS existen diferentes formatos para codificar los datos: • Text: comprensible para humanos, sin compresión, por ejemplo CSV • Avro: orientado a filas, buena compresión • Parquet: orientado a columnas, eficiente en disco al consultar columnas concretas • Otros… En /user/hive/warehouse accede a la carpeta categories (si estás en “local”) o customers (si estás online) -Selecciona el fichero que hay dentro y pega un “pantallazo” del resumen (summary) del mismo. -Descarga el fichero a tu ordenador, ábrelo con un editor de texto (notepad++ o bloc de notas, por ejemplo). ¿Es completamente legible o aparecen caracteres raros? Anota los 4 primeros caracteres del fichero. ¿Qué significan? (En caso de duda, buscar en Internet…)
Listar tablas, descargar resultado Abre el panel Query Editors > Hive Ejecutando la consulta “show tables;” obtendrás un listado de todas las tablas existentes. En la pestaña de resultados podrás verlo en formato de tabla y justo a la izquierda verás varios símbolos, siendo el último de ellos para descargar dicho resultado. -Descarga el resultado de la consulta de listar tablas y cópialo aquí.
Obs: esta es una consulta muy sencilla y directa, por lo que no se genera ninguna traducción a un trabajo MapReduce. Si vas al Job Browser no debería aparecer ningún resultado (si estás en local) o de los que veas (si estás en la demo online) ninguno corresponderá a un “show tables;”
Consultar tabla Sigue en el panel Query Editors > Hive Vamos a trabajar ahora sobre la tabla customers. -Ejecuta la consulta “describe customers;”, que sirve para listar los campos de una tabla, y anota cuántos hay y cuál es el tipo de dato mayoritario (si lo hay).
-Ejecuta ahora la consulta “select * from customers;”, que nos devolverá el contenido completo de la tabla. -En la pestaña de resultados, pulsando el tercero de los botones de la izquierda aparece un panel que te permite filtrar por columnas. Selecciona únicamente las dos primeras (id y name). -El segundo de los botones de la izquierda permite representar un gráfico directamente sobre los resultados de una consulta. Elige el customers.name para el eje X y el customers.id para el eje Y y pega aquí un pantallazo del gráfico resultante.
Trabajo MapReduce asociado a una consulta I Sigue en el panel Query Editors > Hive -Ejecuta la consulta “select count(*) from customers;” y anota el resultado. Si estás en “local” seguramente te toque esperar unos dos minutos hasta que finalice. En la demo online, como seguramente ya esté “en caché” la consulta, te devolverá el resultado inmediatamente.
En cualquier caso, ve al panel de Job Browser. Aquí están todos los trabajos (principalmente MapReduce, aunque en la demo online quizá veas algún otro como Spark) que se están ejecutando, se han ejecutado o se han intentado ejecutar. -Pega un pantallazo de la barra que aparece en la parte superior derecha con los 4 posibles estados de un trabajo y sus correspondientes colores asociados.
Trabajo MapReduce asociado a una consulta II Sigue en el panel Job Browser Si estás en local, deberías ver una única entrada en la tabla, es tu única elección. Si estás online elige una que sea SELECT (de tipo MAPREDUCE) y que haya finalizado con éxito. -Anota el ID del Job elegido Ahora pincha en dicho ID, que te llevará a una pantalla donde hay información detallada del Job. -Explora las diferentes pestañas y anota cuántas tareas asociadas tiene y de qué tipo son.
Pincha en una de las tareas. Verás que tiene, a su vez, intentos de ejecución (sólo aparece uno si ha funcionado a la primera). Pincha en uno de los intentos. -Pega un pantallazo del detalle del intento con las pestaña “Logs” seleccionada y, dentro de ella “syslog” seleccionada. (Arriba a la izquierda deberías ver los IDs de intento, tarea y job, y el estado). Ahí está el máximo detalle de todo lo que ha ido haciendo el sistema para llevar a cabo los trabajos y tareas que respondían a la consulta que se lanzó.
Impala Ve a Query Editors > Impala
-Ejecuta la consulta “select count(*) from web_logs;” y anota el resultado.
-Ve al Job Browser. ¿Echas en falta algo? (Pista: aunque estés en la versión online, se produciría el mismo efecto en el Job Browser esté o no cacheada la consulta)
-Comenta brevemente las principales diferencias entre Hive e Impala y para qué tipo de usos crees que es más idóneo uno u otro.
Crear tabla I Obs: Este ejercicio solamente lo podrás hacer en “local” ya que requiere escritura. -Descarga el fichero /user/user0/example.csv -Crea una carpeta llamada “example” dentro del directorio de tu usuario: /user/userXX -Sube el fichero example a dicho directorio -En la siguiente transparencia encontrarás el código SQL para crear la tabla. Sustituye las XX por tu código de usuario (hay 3 apariciones, dos arriba en el nombre de la tabla y una abajo tras LOCATION) -Ve al editor de queries de Hive, haz un show tables en el que se vea el nombre de tu tabla recién creada y un describe de los campos de la misma y pega aquí los pantallazos: - Esta es para nota ;) - Independientemente de si pudiste crear o no la tabla example, ¿qué implicaciones tiene la palabra clave “EXTERNAL” que aparecía en el código SQL de creación de la tabla?
Crear tabla II DROP TABLE IF EXISTS example_userXX; CREATE EXTERNAL TABLE example_userXX ( street string, city string, zip int, state string, beds int, baths int, sq__ft int, sale_date string, type string, price int, latitude float, longitude float ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/user/userXX/example' tblproperties("skip.header.line.count"="1");
Extra*** Si te sobra tiempo, podemos intentar hacer un poco más de data mining… hay una tabla cuyo nombre es cycle_data y contiene datos de “bicing” de una ciudad a determinar. Desde el editor de queries de Impala os propongo explorar los datos con las siguientes queries: • DESCRIBE cycle_data; • SELECT * FROM cycle_data LIMIT 10; Luego, trata de hacer las queries necesarias para contestar las siguientes preguntas: 1. ¿Cual es la ruta entre dos estaciones (“beginstationid” y ”endstationid”) que aparece con más frecuencia? (La respuesta es curiosa…) Pista: proponemos usar “SELECT”, “AS”, ”FROM”, “GROUP BY” y “ORDER BY”… 2. ¿Una vez identificada esta ruta, cual es el tiempo medio de los viajes entre estas estaciones (”tripduration”)? ¿Además, como se compara este tiempo con el tiempo medio de todas las rutas juntas? Pista: proponemos usar “SELECT”, “AVG()”, ”FROM”, “WHERE” y “AND”…. 3. ¿De que ciudad estamos hablando?