Introducción
Bienvenido al mundo futurista de la Realidad Virtual (VR), donde la tecnología y la imaginación se fusionan para crear experiencias inmersivas como nunca antes. Eres un Anfitrión de Juegos de VR, responsable de diseñar y mantener entornos virtuales cautivadores que trasladan a los jugadores a reinos más allá de sus sueños más locos.
Tu último proyecto es crear un juego de VR que simule la vasta extensión del universo, permitiendo a los jugadores explorar galaxias lejanas, descubrir misterios cósmicos y desentrañar los secretos del cosmos. Sin embargo, para lograr este ambicioso emprendimiento, necesitas aprovechar el poder de los Datos Masivos y aprovechar las capacidades del ecosistema Hadoop.
En este laboratorio, te adentrarás en el mundo de las Funciones Definidas por el Usuario de Hadoop (UDFs), una característica poderosa que te permite extender la funcionalidad de Hive, el componente de almacén de datos de Hadoop. Al dominar las UDFs, puedes crear funciones personalizadas adaptadas a los requisitos únicos de tu juego, lo que te permite procesar y analizar datos astronómicos con una eficiencia y precisión sin precedentes.
Configura el entorno
En este paso, configurarás el entorno necesario para trabajar con Hadoop y Hive. Primero, asegúrate de haber cambiado al usuario hadoop ejecutando el siguiente comando en tu terminal:
su - hadoop
Luego, navega hasta el directorio /home/hadoop, que será tu directorio de trabajo predeterminado:
cd /home/hadoop
Crea un nuevo directorio llamado udfs para almacenar tus Funciones Definidas por el Usuario:
mkdir udfs
cd udfs
Crea una UDF simple
En este paso, crearás una función definida por el usuario (UDF) simple que calcule la distancia entre dos objetos celestes en base a sus coordenadas. Esta función será esencial para representar con precisión las posiciones y movimientos de los cuerpos celestes en tu juego de VR.
Primero, crea un nuevo archivo llamado DistanceCalculator.java en el directorio udfs:
nano DistanceCalculator.java
Copia y pega el siguiente código en el archivo:
import org.apache.hadoop.hive.ql.exec.UDF;
public class DistanceCalculator extends UDF {
public double evaluate(double x1, double y1, double z1,
double x2, double y2, double z2) {
double dx = x1 - x2;
double dy = y1 - y2;
double dz = z1 - z2;
double distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
return distance;
}
}
Este código de Java define una UDF llamada DistanceCalculator que toma seis parámetros DoubleWritable que representan las coordenadas de dos objetos celestes (x1, y1, z1 y x2, y2, z2). El método evaluate calcula la distancia euclidiana entre los dos objetos y devuelve el resultado como un DoubleWritable.
Guarda el archivo y sale del editor de texto.
Luego, compila el código Java con el siguiente comando:
javac -source 8 -target 8 -classpath /home/hadoop/hadoop/share/hadoop/common/*:/usr/local/hive/lib/* DistanceCalculator.java
Este comando compila el archivo DistanceCalculator.java y crea un archivo de bytecode DistanceCalculator.class.
Finalmente, crea un archivo JAR que contenga la clase compilada:
jar cf distance_calculator.jar DistanceCalculator.class
Este comando crea un archivo JAR llamado distance_calculator.jar que contiene el bytecode DistanceCalculator.class.
Registra la UDF en Hive
Ahora que has creado la UDF DistanceCalculator, debes registrarla en Hive para poder utilizarla para procesar datos astronómicos.
Primero, inicia la shell de Hive ejecutando el siguiente comando:
hive
Una vez en la shell de Hive, crea una función temporal utilizando la UDF DistanceCalculator:
ADD JAR /home/hadoop/udfs/distance_calculator.jar;
CREATE TEMPORARY FUNCTION distance_calculator AS 'DistanceCalculator';
El comando ADD JAR agrega el archivo JAR que contiene la UDF compilada al entorno de Hive, y el comando CREATE TEMPORARY FUNCTION crea una función temporal llamada distance_calculator que hace referencia a la clase DistanceCalculator.
Ahora puedes utilizar la función distance_calculator en tus consultas de Hive. Por ejemplo, creemos una tabla de muestra llamada celestial_objects y calculemos la distancia entre dos objetos:
CREATE TABLE celestial_objects (
name STRING,
x DOUBLE,
y DOUBLE,
z DOUBLE
);
Esta consulta crea una tabla celestial_objects con columnas para el nombre y las coordenadas de los objetos celestes.
INSERT INTO celestial_objects VALUES
('Tierra', 0.0, 0.0, 0.0),
('Luna', 384400.0, 0.0, 0.0),
('Marte', 227940000.0, 0.0, 0.0);
Luego inserta datos de muestra para la Tierra, la Luna y Marte.
SELECT
o1.name AS objeto1,
o2.name AS objeto2,
distance_calculator(o1.x, o1.y, o1.z, o2.x, o2.y, o2.z) AS distancia
FROM celestial_objects o1
CROSS JOIN celestial_objects o2
WHERE o1.name < o2.name;
Finalmente, realiza un cruce entre todos los pares de objetos y calcula la distancia entre ellos utilizando la UDF distance_calculator.
La salida debería verse similar a:
objeto1 objeto2 distancia
Tierra Luna 384400.0
Marte Luna 2.275556E8
Tierra Luna 384400.0
...
Crea una UDF permanente
Si bien las funciones temporales son útiles para pruebas y exploración, se pierden cuando sales de la shell de Hive. Para que tu UDF esté disponible permanentemente, debes crear una función permanente.
Primero, sale de la shell de Hive ejecutando el siguiente comando:
quit;
Luego, crea un nuevo archivo llamado create_udf.hql en el directorio udfs:
nano create_udf.hql
Copia y pega el siguiente código en el archivo:
CREATE FUNCTION distance_calculator AS 'DistanceCalculator' USING JAR 'hdfs:///home/hadoop/udfs/distance_calculator.jar';
Esta consulta de Hive crea una función permanente llamada distance_calculator que hace referencia a la clase DistanceCalculator en el archivo distance_calculator.jar almacenado en el Sistema de Archivos Distribuido de Hadoop (HDFS).
Guarda el archivo y sale del editor de texto.
Luego, crea el archivo distance_calculator.jar en HDFS ejecutando el siguiente comando:
hadoop fs -mkdir -p /home/hadoop/udfs
hadoop fs -put distance_calculator.jar /home/hadoop/udfs/
Este comando copia el archivo distance_calculator.jar desde el sistema de archivos local al directorio /home/hadoop/udfs/ en HDFS.
Finalmente, ejecuta el script create_udf.hql en Hive:
hive -f create_udf.hql
Este comando ejecuta el script de Hive, creando la función permanente distance_calculator.
Ahora puedes utilizar la función distance_calculator en tus consultas de Hive, incluso después de salir y reiniciar la shell de Hive.
Resumen
En este laboratorio, aprendiste cómo crear y utilizar Funciones Definidas por el Usuario (UDFs) en Hadoop Hive, una característica poderosa que te permite extender la funcionalidad del componente de almacén de datos de Hadoop. Al diseñar un juego de VR futurista que simula la exploración del cosmos, adquiriste experiencia práctica en la creación de una UDF personalizada para calcular la distancia entre objetos celestes en base a sus coordenadas.
A través de este laboratorio, no solo dominaste el proceso de desarrollo, compilación y registro de UDFs en Hive, sino que también obtuviste valiosos conocimientos sobre cómo se pueden aprovechar las UDFs para procesar y analizar datos astronómicos con una eficiencia y precisión sin precedentes. Las habilidades que adquiriste serán invaluable a medida que sigas expandiendo los límites de las experiencias de realidad virtual, sumergiendo a los jugadores en emocionantes y realistas aventuras cósmicas.



