Descubriendo tesoros antiguos 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

Imagina un escenario en el que eres un arqueólogo marino que explora las profundidades de la "Bahía del Tesoro Hundido". Esta mítica bahía se rumorea que alberga los secretos de civilizaciones antiguas, sus tesoros y artefactos perdidos debajo de las olas. Tu objetivo es descubrir estos tesoros y reconstruir el rompecabezas histórico que se esconde bajo la superficie del océano.

A medida que embarques en tu expedición submarina, necesitarás analizar los diversos artefactos y reliquias que descubras, estudiando detenidamente sus características y patrones. Aquí es donde entra en juego el poder de las Funciones de Ventana de Hadoop, que te permite realizar un análisis de datos complejo y desentrañar los misterios del pasado.


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/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/basic_hiveql("Basic HiveQL Queries") hadoop/HadoopHiveGroup -.-> hadoop/group_by("group by Usage") hadoop/HadoopHiveGroup -.-> hadoop/math("Mathematical Operating Function") hadoop/HadoopHiveGroup -.-> hadoop/window("Window Function") subgraph Lab Skills hadoop/fs_mkdir -.-> lab-289008{{"Descubriendo tesoros antiguos con Hadoop"}} hadoop/manage_db -.-> lab-289008{{"Descubriendo tesoros antiguos con Hadoop"}} hadoop/create_tables -.-> lab-289008{{"Descubriendo tesoros antiguos con Hadoop"}} hadoop/load_insert_data -.-> lab-289008{{"Descubriendo tesoros antiguos con Hadoop"}} hadoop/basic_hiveql -.-> lab-289008{{"Descubriendo tesoros antiguos con Hadoop"}} hadoop/group_by -.-> lab-289008{{"Descubriendo tesoros antiguos con Hadoop"}} hadoop/math -.-> lab-289008{{"Descubriendo tesoros antiguos con Hadoop"}} hadoop/window -.-> lab-289008{{"Descubriendo tesoros antiguos con Hadoop"}} end

Configuración de los datos

En este paso, crearemos un conjunto de datos que simule los artefactos y reliquias que has descubierto durante tu exploración submarina. Este conjunto de datos servirá como base para nuestro análisis utilizando las Funciones de Ventana de Hadoop.

Primero, asegúrate de estar registrado como el usuario hadoop ejecutando el siguiente comando en la terminal:

su - hadoop

Luego, creemos un nuevo directorio llamado artefactos dentro del directorio /home/hadoop:

mkdir /home/hadoop/artifacts
cd artifacts/

A continuación, crea un nuevo archivo llamado artefactos.txt dentro del directorio artefactos con el siguiente contenido:

1,Gold,2500,15,A1
2,Silver,1800,20,B2
3,Bronze,3000,12,A1
4,Ceramic,1200,18,C3
5,Gold,2800,22,B2
6,Silver,2000,16,A1
7,Bronze,2500,25,C3
8,Ceramic,1500,14,A1
9,Gold,3200,21,B2
10,Silver,1700,19,C3

Este archivo representa una colección de artefactos con detalles como su material, edad, profundidad en la que se encontraron y coordenadas de ubicación.

Explorando los datos con Funciones de Ventana

Ahora que tenemos nuestro conjunto de datos listo, exploremoslo utilizando las Funciones de Ventana de Hadoop. Utilizaremos Apache Hive, un software de almacén de datos que facilita la consulta y el manejo de grandes conjuntos de datos almacenados en almacenamiento distribuido.

Primero, inicia la shell de Hive ejecutando el siguiente comando en tu terminal:

hive

A continuación, crea una nueva tabla llamada artefactos para almacenar nuestro conjunto de datos:

CREATE TABLE artifacts (
  artifact_id INT,
  material STRING,
  age INT,
  depth INT,
  location STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

Carga los datos del archivo artefactos.txt en la tabla artefactos:

LOAD DATA LOCAL INPATH '/home/hadoop/artifacts/artifacts.txt' INTO TABLE artifacts;

Comencemos explorando la columna age utilizando las funciones de ventana RANK() y DENSE_RANK(). Estas funciones nos ayudarán a identificar los rangos de edad relativos de los artefactos:

SELECT
  artifact_id,
  material,
  age,
  RANK() OVER (ORDER BY age DESC) AS rank_age,
  DENSE_RANK() OVER (ORDER BY age DESC) AS dense_rank_age
FROM
  artifacts;

Esta consulta devolverá los detalles del artefacto junto con sus rangos de edad basados en las funciones RANK() y DENSE_RANK().

A continuación, utilicemos las funciones LAG() y LEAD() para comparar las edades de artefactos consecutivos:

SELECT
  artifact_id,
  material,
  age,
  LAG(age, 1) OVER (ORDER BY age DESC) AS prev_age,
  LEAD(age, 1) OVER (ORDER BY age DESC) AS next_age
FROM
  artifacts;

Esta consulta mostrará los detalles del artefacto junto con las edades del artefacto anterior y siguiente en la secuencia ordenada.

Analizando los patrones de artefactos

En este paso, utilizaremos las funciones de ventana para analizar los patrones y identificar artefactos significativos basados en varios criterios.

Comencemos encontrando los artefactos más antiguos y más nuevos para cada tipo de material:

CREATE TABLE result_1
AS
SELECT
  material,
  artifact_id,
  age,
  FIRST_VALUE(artifact_id) OVER (PARTITION BY material ORDER BY age DESC) AS oldest_artifact,
  LAST_VALUE(artifact_id) OVER (PARTITION BY material ORDER BY age ASC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS newest_artifact
FROM
  artifacts;

SELECT * FROM result_1;

Esta consulta utiliza las funciones FIRST_VALUE() y LAST_VALUE() para identificar, respectivamente, los artefactos más antiguos y más nuevos para cada tipo de material.

A continuación, encontremos los artefactos que son significativamente más antiguos o más jóvenes en comparación con la edad promedio de su tipo de material:

CREATE TABLE result_2
AS
SELECT
  artifact_id,
  material,
  age,
  AVG(age) OVER (PARTITION BY material) AS avg_age_by_material,
  CASE
    WHEN age > AVG(age) OVER (PARTITION BY material) + 200 THEN 'Significantly Older'
    WHEN age < AVG(age) OVER (PARTITION BY material) - 200 THEN 'Significantly Younger'
    ELSE 'Average'
  END AS age_category
FROM
  artifacts;

SELECT * FROM result_2;

Esta consulta calcula la edad promedio para cada tipo de material utilizando la función de ventana AVG() y luego clasifica cada artefacto según sea significativamente más antiguo, significativamente más joven o de edad promedio en comparación con la edad promedio del material.

Resumen

En este laboratorio, exploramos el poder de las Funciones de Ventana de Hadoop en el contexto de una expedición arqueológica marina. Al simular un conjunto de datos de artefactos y reliquias, aprendimos cómo aprovechar varias funciones de ventana como RANK(), DENSE_RANK(), LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE() y AVG() para analizar y descubrir patrones dentro de los datos.

A través de ejercicios prácticos, obtuvimos información sobre cómo identificar rangos de edad, comparar las edades de artefactos consecutivos, encontrar los artefactos más antiguos y más nuevos para cada tipo de material y clasificar los artefactos según su edad en comparación con la edad promedio del material. Este laboratorio proporcionó una experiencia práctica y atractiva en el uso de las Funciones de Ventana de Hadoop para desentrañar los misterios de la "Bahía del Tesoro Hundido".

El diseño de este laboratorio tuvo como objetivo combinar un escenario cautivador con ejercicios de codificación prácticos, permitiendo a los aprendices desarrollar una comprensión más profunda de las Funciones de Ventana de Hadoop mientras exploran una aventura ficticia. Al sumergir a los aprendices en un contexto realista, el laboratorio fomentó una experiencia de aprendizaje más atractiva y memorable.