Laboratorios prácticos BigData

Beginner to Expert Data Engineer
7 min readMay 16, 2024

--

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

Ambiente recreado

Primer escenario

Laboratorio práctico 1

Contexto Lab 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

Antes
Después

b) Accedemos por consola al servidor de hadoop que tenemos dockerizado

Attach Shell HDFS

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

Script sqoop en formato texto en detalle

Si vamos a HDFS en nuestro servidor de Hadoop y consultamos la ruta deberíamos de ver los archivos generados.

Resultados del script sqoop en formato texto

Generando los archivos en formato avro

Es similar al anterior pero cambia la forma en que se van a exportar los archivos .

Script sqoop en formato avro en detalle

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.

Los archivos .avsc contienen la definición del esquema de datos en Avro, mientras que los archivos .java contienen el código Java generado a partir de estos esquemas para permitir el manejo de datos Avro en aplicaciones Java.

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

Análisis del script en Hql para generar nuestra base de datos y tablas desde HDFS

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
Ejecución del Script hive -f hive_avro.hql
Deberíamos poder ver las tablas generadas

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?

Contexto

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

Detallado 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

Desde Google Colab vemos el HDFS

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

Corroboramos lo que Google Colab nos muestra

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;

Por cada tabla podríamos hacer lo mismo y corroborar los resultados

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.

--

--