Análisis de Gemas con Hadoop

HadoopHadoopBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En el encantador reino de la Real Academia de Magia, un equipo de habilidosos gemólogos se dedicó a desentrañar los misterios de las gemas místicas que alimentaban el mundo mágico. Entre ellos estaba una prodigiosa investigadora, Aria, cuya curiosidad inquebrantable y aguda inteligencia la convertían en una fuerza a tener en cuenta.

Recientemente, la academia adquirió una vasta cantidad de datos relacionados con las propiedades y aplicaciones de estas gemas, una riqueza de conocimiento que prometía abrir nuevos caminos de innovación mágica. Sin embargo, la gran cantidad de información planteó un desafío intimidante, uno que requirió la ayuda de herramientas analíticas poderosas.

Aria, sin desanimarse, recurrió al venerable ecosistema Hadoop, reconociendo su potencial para domar la vasta extensión de datos. Su objetivo era doble: profundizar en las complejidades del comportamiento de las gemas y descubrir patrones ocultos que podrían revolucionar la forma en que se aprovecha y utiliza la magia.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHDFSGroup(["Hadoop HDFS"]) hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHDFSGroup -.-> hadoop/fs_mkdir("FS Shell mkdir") hadoop/HadoopHDFSGroup -.-> hadoop/fs_cp("FS Shell cp") hadoop/HadoopHiveGroup -.-> hadoop/manage_db("Managing Database") hadoop/HadoopHiveGroup -.-> hadoop/create_tables("Creating Tables") hadoop/HadoopHiveGroup -.-> hadoop/load_insert_data("Loading and Inserting Data") hadoop/HadoopHiveGroup -.-> hadoop/group_by("group by Usage") hadoop/HadoopHiveGroup -.-> hadoop/distribute_by("distribute by Usage") hadoop/HadoopHiveGroup -.-> hadoop/partitions_buckets("Implementing Partitions and Buckets") subgraph Lab Skills hadoop/fs_mkdir -.-> lab-288967{{"Análisis de Gemas con Hadoop"}} hadoop/fs_cp -.-> lab-288967{{"Análisis de Gemas con Hadoop"}} hadoop/manage_db -.-> lab-288967{{"Análisis de Gemas con Hadoop"}} hadoop/create_tables -.-> lab-288967{{"Análisis de Gemas con Hadoop"}} hadoop/load_insert_data -.-> lab-288967{{"Análisis de Gemas con Hadoop"}} hadoop/group_by -.-> lab-288967{{"Análisis de Gemas con Hadoop"}} hadoop/distribute_by -.-> lab-288967{{"Análisis de Gemas con Hadoop"}} hadoop/partitions_buckets -.-> lab-288967{{"Análisis de Gemas con Hadoop"}} end

Explorando el Conjunto de Datos de Gemas

En este paso, nos familiarizaremos con el conjunto de datos de gemas y su estructura, sentando las bases para nuestro análisis posterior.
Primero, asegúrese de estar registrado como el usuario hadoop ejecutando el siguiente comando en la terminal:

su - hadoop

Ahora comencemos creando un ejemplo. Copie la siguiente línea de comando en la terminal para crear nuestro archivo de muestra.

mkdir -p hadoop/gemstone_data
cd hadoop/gemstone_data
echo "gem_id,gem_name,color,hardness,density,refractive_index" > gem_properties.csv
echo "1,Ruby   ,Red     ,9.0,4.0,1.77" >> gem_properties.csv
echo "2,Emerald,Green   ,8.0,3.1,1.58" >> gem_properties.csv
echo "3,Sapphire,Blue    ,9.0,4.0,1.76" >> gem_properties.csv
echo "4,Diamond,Colorless,10.0,3.5,2.42" >> gem_properties.csv
echo "5,Amethyst,Purple  ,7.0,2.6,1.54" >> gem_properties.csv
echo "6,Topaz  ,Yellow  ,8.0,3.5,1.63" >> gem_properties.csv
echo "7,Pearl  ,White   ,2.5,2.7,1.53" >> gem_properties.csv
echo "8,Agate  ,Multi   ,7.0,2.6,1.53" >> gem_properties.csv
echo "9,Rose   ,Pink    ,7.0,2.7,1.54" >> gem_properties.csv
echo "10,CatsEye,Green   ,6.5,3.2,1.54" >> gem_properties.csv
echo "gem_id,application" > gem_applications.csv
echo "1,Fire Magic       " >> gem_applications.csv
echo "2,Earth Magic      " >> gem_applications.csv
echo "3,Water Magic      " >> gem_applications.csv
echo "4,Enhancement Magic" >> gem_applications.csv
echo "5,Psychic Magic    " >> gem_applications.csv
echo "6,Lightning Magic  " >> gem_applications.csv
echo "7,Illusion Magic   " >> gem_applications.csv
echo "8,Strength Magic   " >> gem_applications.csv
echo "9,Love Magic       " >> gem_applications.csv
echo "10,Stealth Magic   " >> gem_applications.csv

Ahora ya estamos en el directorio gemstone_data, tomemos un momento para revisar el contenido de este directorio:

ls

A medida que navegue por el directorio, verá estos dos archivos, cada uno dedicado a un aspecto distinto de los datos de las gemas. gem_properties.csv profundiza en las características físicas de las gemas, mientras que gem_applications.csv proporciona información sobre sus variadas aplicaciones mágicas.

Para obtener una comprensión más profunda de nuestro conjunto de datos, echemos un vistazo a las primeras líneas de uno de estos archivos:

head -n 5 gem_properties.csv

El resultado debería ser el siguiente:

gem_id,gem_name,color,hardness,density,refractive_index
1,Ruby,Red,9.0,4.0,1.77
2,Emerald,Green,8.0,3.1,1.58
3,Sapphire,Blue,9.0,4.0,1.76
4,Diamond,Colorless,10.0,3.5,2.42

Este comando mostró las primeras cinco líneas del archivo gem_properties.csv, brindándole una idea de su estructura y contenido.

Creando una Tabla en Hive

Ahora que nos hemos familiarizado con el conjunto de datos, pasemos a crear una tabla en Hive para almacenar y consultar los datos de las propiedades de las gemas.

Primero, lance la interfaz de línea de comandos de Hive:

hive

Una vez dentro de la interfaz de línea de comandos de Hive, cree una nueva base de datos llamada gemstone_analysis para almacenar nuestros datos de gemas:

CREATE DATABASE gemstone_analysis;

A continuación, cambie a la base de datos recién creada:

USE gemstone_analysis;

Con la base de datos configurada, procedamos a crear una tabla llamada gem_properties para almacenar los datos del archivo gem_properties.csv. Esta tabla contendrá información sobre el ID de la gema, nombre, color, dureza, densidad e índice de refracción:

CREATE TABLE gem_properties (
  gem_id INT COMMENT 'ID único de la gema',
  gem_name STRING COMMENT 'Nombre de la gema',
  color STRING COMMENT 'Color de la gema',
  hardness FLOAT COMMENT 'Dureza de la gema',
  density FLOAT COMMENT 'Densidad de la gema',
  refractive_index FLOAT COMMENT 'Índice de refracción de la gema'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count'='1');

Esta declaración define la estructura de la tabla gem_properties, especificando los nombres de las columnas y los tipos de datos. La cláusula ROW FORMAT indica que los datos están delimitados por comas, y la cláusula STORED AS TEXTFILE especifica que los datos deben ser almacenados como un archivo de texto plano.

Ahora, carguemos los datos del archivo gem_properties.csv en la tabla recién creada gem_properties:

LOAD DATA LOCAL INPATH '/home/hadoop/hadoop/gemstone_data/gem_properties.csv'
INTO TABLE gem_properties;

Este comando carga los datos de la ruta de archivo especificada en la tabla gem_properties.

Una vez que se han cargado los datos, verifiquemos que se cargaron correctamente ejecutando una consulta SELECT simple para mostrar las primeras cinco filas de la tabla gem_properties:

SELECT * FROM gem_properties LIMIT 5;

Esta consulta mostrará las primeras cinco filas de la tabla gem_properties, lo que nos permitirá confirmar que los datos se cargaron correctamente. El resultado debería ser el siguiente:

OK
1	Ruby    	Red      	9.0	4.0	1.77
2	Emerald 	Green    	8.0	3.1	1.58
3	Sapphire	Blue     	9.0	4.0	1.76
4	Diamond 	Colorless	10.0	3.5	2.42
5	Amethyst	Purple   	7.0	2.6	1.54
Time taken: 1.234 seconds, Fetched: 5 row(s)

Analizando las Propiedades de las Gemas

En este paso, aprovecharemos el poder de la cláusula DISTRIBUTE BY en Hive para analizar eficientemente los datos de las propiedades de las gemas.

Para comenzar, creemos una nueva tabla llamada distributed_gem_properties para particionar los datos por la columna gem_name:

(Puede tardar un poco, por favor tenga paciencia)

CREATE TABLE distributed_gem_properties
AS
SELECT * FROM gem_properties
DISTRIBUTE BY gem_id;

Esta tabla refleja la estructura de la tabla original gem_properties pero incorpora cláusulas adicionales para organizar y distribuir los datos de manera efectiva:

AS SELECT * FROM gem_properties: Esta parte de la declaración selecciona todas las columnas y filas de la tabla existente gem_properties. Esencialmente, estamos copiando los datos de la tabla original a nuestra nueva tabla distribuida.

DISTRIBUTE BY gem_id: Esta cláusula especifica la distribución de los datos entre los reducers basados en la columna gem_id. Al distribuir los datos de esta manera, podemos aprovechar el procesamiento paralelo para analizar las propiedades de las gemas de manera más eficiente.

Ahora que tenemos nuestra tabla distribuida configurada, podemos proceder a realizar varios análisis en los datos de las propiedades de las gemas con mayor eficiencia.

Ejecutemos una consulta para encontrar gemas con una dureza entre 8.0 y 9.0, copie y pegue este código en la terminal para ejecutarlo.

SELECT * FROM distributed_gem_properties WHERE hardness BETWEEN 8.0 AND 9.0;

Esta consulta recuperará los datos de las gemas de la tabla distribuida donde la dureza se encuentra dentro del rango especificado. El resultado debería ser el siguiente:

OK
6	Topaz   	Yellow   	8.0	3.5	1.63
3	Sapphire	Blue     	9.0	4.0	1.76
2	Emerald 	Green    	8.0	3.1	1.58
1	Ruby    	Red      	9.0	4.0	1.77
Time taken: 0.388 seconds, Fetched: 4 row(s)

A continuación, probemos el siguiente fragmento de código, que utiliza GROUP BY.

SELECT color, COUNT(*) AS count FROM distributed_gem_properties GROUP BY color;

Este código es una declaración de consulta utilizada para contar el número de gemas para cada color en la tabla distribuida distributed_gem_properties. El resultado debería ser el siguiente:

OK
Blue     	1
Colorless	1
Green    	2
Multi    	1
Pink     	1
Purple   	1
Red      	1
White    	1
Yellow   	1
Time taken: 18.566 seconds, Fetched: 9 row(s)

Aquí hay otro ejemplo de consulta que utiliza PARTITION BY:

SELECT gem_name, color, COUNT(*) OVER(PARTITION BY color) AS color_count
FROM distributed_gem_properties;

Esta consulta selecciona el gem_name y el color de la tabla distributed_gem_properties y cuenta el número de gemas para cada color. La cláusula PARTITION BY especifica por qué columna se debe particionar el recuento, en este caso, la columna color. Esto generará un recuento separado para cada color de gemas. El resultado debería ser el siguiente:

OK
Sapphire	Blue     	1
Diamond 	Colorless	1
Emerald 	Green    	2
CatsEye	Green    	2
Agate   	Multi    	1
Rose    	Pink     	1
Amethyst	Purple   	1
Ruby    	Red      	1
Pearl   	White    	1
Topaz   	Yellow   	1
Time taken: 20.865 seconds, Fetched: 10 row(s)

Estos son solo dos ejemplos simples para ayudarnos a obtener una comprensión preliminar del análisis y la aplicación de tablas distribuidas por DISTRIBUTE BY, incorporando comandos como PARTITION BY y GROUP BY. Con esto concluye esta lección, y creo que ahora tienes una cierta comprensión.

Resumen

En este laboratorio, emprendimos un cautivador viaje al mundo del análisis de gemas, guiados por la talentosa gemóloga del mundo mágico, Aria. Aprovechando el poder de Hadoop y Hive, profundizamos en una vasta cantidad de datos, descubriendo los secretos ocultos dentro de las gemas místicas que alimentan la magia de este encantador reino.

A través de una serie de pasos cuidadosamente diseñados, exploramos las complejidades del conjunto de datos de gemas, creamos una robusta tabla en Hive para almacenar y consultar los datos y, finalmente, aprovechamos la cláusula DISTRIBUTE BY para optimizar nuestro análisis. Esta poderosa técnica nos permitió particionar y distribuir los datos de manera eficiente, abriendo el camino a consultas más rápidas y enfocadas, descubriendo valiosos conocimientos sobre las propiedades y aplicaciones de estas extraordinarias gemas.

A lo largo de este laboratorio, no solo adquirimos experiencia práctica con Hadoop y Hive, sino que también presenciamos el potencial transformador de la analítica de grandes datos en la resolución de los misterios del mundo mágico. Al dominar estas herramientas, nos hemos equipado con el conocimiento y las habilidades necesarias para emprender nuevas aventuras, donde los datos son la clave para desbloquear infinitas posibilidades y empujar los límites de la innovación mágica.