Laboratorios prácticos BigData
Hadoop proporciona la infraestructura subyacente para almacenar y procesar grandes volúmenes de datos, Hive facilita la consulta y el análisis de datos utilizando SQL estándar, Sqoop permite la transferencia de datos entre Hadoop y sistemas externos, y Spark ofrece capacidades avanzadas para el procesamiento rápido y flexible de datos en clústeres de computadoras. Juntos, estos componentes forman un ecosistema poderoso para la gestión y el análisis de datos a gran escala.
Nuestro desarrollo comienza trabajando con GitSpace y dentro del mismo varios contenedores con imágenes de 1- Server Hadoop (HDFS), 2- Server de Hive, accederemos a ellos por medio de comandos desde la terminal
Primer escenario
Laboratorio práctico 1
Utilizaremos Docker como escenario para montar un ambiente donde: Sqoop para transferir datos desde MySQL a Hadoop, convirtiendo las tablas de MySQL en archivos de texto plano en Hadoop. Con esto vamos a simular tener archivos hdfs de un supuesto delta lake que no tenemos
Luego, con Hive leeremos esos archivos para definir una Base de Datos y para definir tablas sobre estos archivos de texto en Hadoop (también lo podríamos hacer con archivos con formato avro que nos brindan mucho mas ventajas).
Al final esto es lo que permite a los usuarios consultar y analizar los datos utilizando SQL estándar.
a) Ejecutar el siguiente comando para desplegar los contenedores
> docker-compose up
b) Accedemos por consola al servidor de hadoop que tenemos dockerizado
Podríamos haber abierto también una nueva terminal y ejecutar por línea de comandos: docker exec -it datanode bash
c) Cargaremos nuestro HDFS con datos de una Base de Datos (hay muchas formas de tener archivos pero para efectos de práctica procederemos asi).
Tenemos un script utiliza sqoop, este va ir a la Base de datos y exportara la información de cada tabla dejándola en un repositorio único según el nombre de la tabla y generando tantos archivos como este cargada cada tabla. En nuestro caso tenemos un script que nos permitirá generar los archivos en formato texto como avro.
Generando los archivos en formato Texto
Si vamos a HDFS en nuestro servidor de Hadoop y consultamos la ruta deberíamos de ver los archivos generados.
Generando los archivos en formato avro
Es similar al anterior pero cambia la forma en que se van a exportar los archivos .
El formato Avro en Hive ofrece ventajas en términos de eficiencia de almacenamiento, manejo de esquemas, evolución del esquema e interoperabilidad, lo que lo hace una opción popular para el almacenamiento y procesamiento de datos en entornos de Big Data.
La principal ventaja de los archivos Avro en comparación con los archivos TXT en Hive es la eficiencia. Avro es un formato de datos binario que permite una compresión y serialización eficiente, lo que reduce el espacio de almacenamiento y mejora la velocidad de lectura y escritura de los datos. Además, Avro incluye el esquema de los datos, facilitando la compatibilidad y el manejo de datos complejos, a diferencia de los archivos TXT, que son solo texto sin estructura ni compresión.
d) Cargando nuestras tablas de Hive
Hive Query Language (HQL) es un lenguaje de consulta utilizado para interactuar con Apache Hive, una infraestructura de data Waterhouse construida sobre Hadoop. HQL es similar a SQL en términos de sintaxis y estructura. HQL está diseñado para ser similar a SQL, lo que significa que si estás familiarizado con SQL, encontrarás que la mayoría de las consultas escritas en HQL son muy similares a las consultas SQL estándar. Esto hace que la transición de SQL a HQL sea bastante sencilla para la mayoría de las personas
Recuerde siempre que cada query que envias al CLI de avro debe terminar con ; esto le dad la orden a Hive de procesar la consulta.
Antes de ejecutar el script hive -f hive_avro.hql vamos a aplicar unos pasos previos que nos aseguren el buen proceder.
Movemos el script hive -f hive_avro.hql al server (contenedor de Hive) que se encuentra fuera de ellos. ( no viene con las imagenes que Docker Hub proovee). En una terminal aparte ejecutamos fuera de algun contenedor ejecutamos: docker cp datanode/scripts/hive/hive_avro.hql hive-server:/opt
Luego entramos al Hive-server (contenedor)
Y procedemos a eliminar la BD anterior retaild_db que usamos anteriormente
- Ingresamos al CLI de Hive
- Hive
- Show databases;
- Drop database retail_db CASCADE;
- Exit;
** fuera del intérprete de Hive ejecutamos el script:
hive -f hive_avro.hql
- El comando anterior debió de habernos generado las tablas, pero al parecer borro no solo la meta data sino también los archivos planos, para recomponer lo anterior volvemos a nuestro datanode [hdfs] y ejecutamos sqoop
- sh /datanode/scripts/script.sh
- sh /datanode/scripts/sqoop/script_sqoop_avro.sh
- sh /datanode/scripts/sqoop/script_sqoop_textfile.sh
- hdfs dfs -put *.avsc /user/datapath/datasets/avro/
- esto mueve todos los archivos con terminación *. avsc del contenedor hadoop {hdfs} a la ruta /user/datapath/datasets/avro/
El error anterior se debe a que ya teníamos una BD retail_db anteriormente creada. Para deshacer ese cambio y poder ver la BD retail_db y sus tablas,
- Eliminamos las BD
- Drop database retail_db cascade;
- No Debera existir
- Show databases
- Salimos del intereprete de Hive
- Exit;
- Ejecutamos
- hive -f hive_avro.hql
Hasta aquí ya tenemos nuestras tablas creadas las que nos servirán en el siguiente laboratorio el cual será corto.
Laboratorio práctico 2
Segundo escenario antecedentes
Antes debemos de comprender cómo Spark se comunica con Hive?
Descripción del Proceso
Consulta SQL desde Spark:
El usuario escribe una consulta SQL utilizando Spark SQL o a través de una Google Colab (por ejemplo, utilizando JDBC/ODBC).
Spark SQL recibe esta consulta.
Interacción con el Metastore de Hive:
Spark SQL se comunica con el Hive Metastore para obtener metadatos de las tablas involucradas en la consulta.
Esta comunicación permite a Spark conocer la estructura de las tablas, tipos de datos, ubicaciones de los archivos de datos, particiones, etc.
Acceso a los Datos:
Utilizando la información obtenida del Metastore, Spark accede a los datos almacenados en el sistema de almacenamiento distribuido (como HDFS, S3, etc.).
Spark lee los datos y realiza las operaciones necesarias para ejecutar la consulta (filtrado, agregación, unión, etc.).
Componentes Clave
Apache Spark: Plataforma de procesamiento de datos en tiempo real que permite realizar consultas SQL utilizando Spark SQL.
HiveServer2: Servicio que facilita la ejecución de consultas SQL sobre Hive.
Hive Metastore: Almacén de metadatos que contiene información sobre las bases de datos, tablas, esquemas y ubicaciones de los datos.
Distributed Storage (HDFS/S3/etc.): Sistema de almacenamiento distribuido donde los datos de Hive están realmente almacenados.
Veamos lo anterior a a nivel de usuario
Explicación
Usuario: Inicia una consulta SQL a través de Spark SQL o Google Colab (usando JDBC/ODBC).
Apache Spark: Recibe la consulta y se comunica con el Hive Metastore para obtener metadatos.
Apache Hive Metastore: Proporciona los metadatos necesarios a Spark.
Apache Hive (HiveServer2): Puede ser usado para ejecutar las consultas, aunque a menudo Spark se comunica directamente con el almacenamiento distribuido.
Hive Warehouse: Es el lugar donde se almacenan los datos, usualmente en un sistema de almacenamiento distribuido como HDFS o S3.
Esta representación gráfica ayuda a visualizar cómo las diferentes componentes interactúan en el proceso de comunicación entre Spark y Hive.
a) Desde Google Colab a Hadoop
Consultamos directamente a Hadoop
Si vamos a nuestro contenedor de hadoop [hdfs] podemos comprobar que en efecto esta leyendo nuestra data
root@14782b787e7f:/datanode# hdfs dfs -cat /user/datapath/datasets/customers/part-m-00000
b) Desde Google Colab a Hive por medio de Spark
si vamos a nuestro cli de hive en el contenedor de Hive y lanzamos este comando: hive> select *from retail_db.categories_avro limit 10;
La flexibilidad de Spark para consultar a Hive es similar a la que usamos en la mayoría de casos en SQL, veamos una consulta un poco mas completa, en este caso Spark genera la consulta y va a Hive y recupera la información.