VR-Universumserforschung mit Hadoop-UDFs

HadoopBeginner
Jetzt üben

Einführung

Willkommen in der futuristischen Welt der Virtual Reality (VR), in der Technik und Vorstellungskraft zusammenkommen, um bisher unbekannte immersive Erfahrungen zu schaffen. Sie sind ein VR-Spielmoderator und sind für das Design und die Wartung fesselnder virtueller Umgebungen verantwortlich, die die Spieler in Welten transportieren, die über ihre wildesten Träume hinausgehen.

Ihr aktuelles Projekt ist es, ein VR-Spiel zu erstellen, das die weite Entfernung des Universums simuliert und den Spielern ermöglicht, entfernte Galaxien zu erkunden, kosmische Geheimnisse zu entdecken und die Geheimnisse des Kosmos aufzulösen. Um dieses ehrgeizige Vorhaben zu verwirklichen, müssen Sie jedoch die Macht von Big Data nutzen und die Möglichkeiten der Hadoop-Ekosysteme ausnutzen.

In diesem Lab werden Sie in die Welt der Hadoop User Defined Functions (UDFs) eintauchen, eine leistungsstarke Funktion, die Ihnen ermöglicht, die Funktionalität von Hive, der Datenbankkomponente von Hadoop, zu erweitern. Indem Sie die UDFs beherrschen, können Sie benutzerdefinierte Funktionen erstellen, die auf die speziellen Anforderungen Ihres Spiels zugeschnitten sind, was Ihnen ermöglicht, astronomische Daten mit bisher nie dagewesener Effizienz und Genauigkeit zu verarbeiten und zu analysieren.

Stellen Sie die Umgebung ein

In diesem Schritt werden Sie die erforderliche Umgebung einrichten, um mit Hadoop und Hive zu arbeiten. Stellen Sie zunächst sicher, dass Sie als Benutzer hadoop angemeldet sind, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:

su - hadoop

Navigieren Sie anschließend zum Verzeichnis /home/hadoop, das Ihr Standardarbeitsverzeichnis sein wird:

cd /home/hadoop

Erstellen Sie ein neues Verzeichnis namens udfs, um Ihre User Defined Functions zu speichern:

mkdir udfs
cd udfs

Erstellen Sie eine einfache UDF

In diesem Schritt werden Sie eine einfache User Defined Function (UDF) erstellen, die die Entfernung zwischen zwei Himmelskörpern anhand ihrer Koordinaten berechnet. Diese Funktion wird unerlässlich sein, um die Positionen und Bewegungen von Himmelskörpern in Ihrem VR-Spiel genau zu rendern.

Erstellen Sie zunächst eine neue Datei namens DistanceCalculator.java im Verzeichnis udfs:

nano DistanceCalculator.java

Kopieren Sie den folgenden Code in die Datei:

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;
    }
}

Dieser Java-Code definiert eine UDF namens DistanceCalculator, die sechs DoubleWritable-Parameter akzeptiert, die die Koordinaten von zwei Himmelskörpern (x1, y1, z1 und x2, y2, z2) repräsentieren. Die evaluate-Methode berechnet die euklidische Entfernung zwischen den beiden Objekten und gibt das Ergebnis als DoubleWritable zurück.

Speichern Sie die Datei und beenden Sie den Texteditor.

Als Nächstes kompilieren Sie den Java-Code mit dem folgenden Befehl:

javac -source 8 -target 8 -classpath /home/hadoop/hadoop/share/hadoop/common/*:/usr/local/hive/lib/* DistanceCalculator.java

Dieser Befehl kompiliert die Datei DistanceCalculator.java und erstellt eine Bytecode-Datei DistanceCalculator.class.

Schließlich erstellen Sie eine JAR-Datei, die die kompilierte Klasse enthält:

jar cf distance_calculator.jar DistanceCalculator.class

Dieser Befehl erstellt eine JAR-Datei namens distance_calculator.jar, die die Bytecode-Datei DistanceCalculator.class enthält.

Registrieren Sie die UDF in Hive

Jetzt, nachdem Sie die DistanceCalculator-UDF erstellt haben, müssen Sie sie in Hive registrieren, damit Sie sie verwenden können, um astronomische Daten zu verarbeiten.

Starten Sie zunächst die Hive-Shell, indem Sie den folgenden Befehl ausführen:

hive

Sobald Sie in der Hive-Shell sind, erstellen Sie eine temporäre Funktion mit der DistanceCalculator-UDF:

ADD JAR /home/hadoop/udfs/distance_calculator.jar;
CREATE TEMPORARY FUNCTION distance_calculator AS 'DistanceCalculator';

Der ADD JAR-Befehl fügt die JAR-Datei, die die kompilierte UDF enthält, der Hive-Umgebung hinzu, und der CREATE TEMPORARY FUNCTION-Befehl erstellt eine temporäre Funktion namens distance_calculator, die auf die DistanceCalculator-Klasse verweist.

Sie können jetzt die distance_calculator-Funktion in Ihren Hive-Abfragen verwenden. Beispielsweise erstellen wir eine Beispieltabelle namens celestial_objects und berechnen die Entfernung zwischen zwei Objekten:

CREATE TABLE celestial_objects (
  name STRING,
  x DOUBLE,
  y DOUBLE,
  z DOUBLE
);

Diese Abfrage erstellt eine Tabelle celestial_objects mit Spalten für den Namen und die Koordinaten von Himmelskörpern.

INSERT INTO celestial_objects VALUES
  ('Earth', 0.0, 0.0, 0.0),
  ('Moon', 384400.0, 0.0, 0.0),
  ('Mars', 227940000.0, 0.0, 0.0);

Dann werden Beispiel-Daten für die Erde, den Mond und Mars eingefügt.

SELECT
  o1.name AS object1,
  o2.name AS object2,
  distance_calculator(o1.x, o1.y, o1.z, o2.x, o2.y, o2.z) AS distance
FROM celestial_objects o1
CROSS JOIN celestial_objects o2
WHERE o1.name < o2.name;

Schließlich wird eine Kreuzverknüpfung zwischen allen Paaren von Objekten durchgeführt und die Entfernung zwischen ihnen mit der distance_calculator-UDF berechnet.

Die Ausgabe sollte ähnlich wie folgt aussehen:

object1 object2 distance
Earth   Moon    384400.0
Mars    Moon    2.275556E8
Earth   Moon    384400.0
...

Erstellen Sie eine permanente UDF

Während temporäre Funktionen für das Testen und Erkunden nützlich sind, gehen sie verloren, wenn Sie die Hive-Shell verlassen. Um Ihre UDF permanent verfügbar zu machen, müssen Sie eine permanente Funktion erstellen.

Beenden Sie zunächst die Hive-Shell, indem Sie den folgenden Befehl ausführen:

quit;

Als Nächstes erstellen Sie eine neue Datei namens create_udf.hql im Verzeichnis udfs:

nano create_udf.hql

Kopieren Sie den folgenden Code in die Datei:

CREATE FUNCTION distance_calculator AS 'DistanceCalculator' USING JAR 'hdfs:///home/hadoop/udfs/distance_calculator.jar';

Diese Hive-Abfrage erstellt eine permanente Funktion namens distance_calculator, die auf die DistanceCalculator-Klasse in der distance_calculator.jar-Datei verweist, die im Hadoop Distributed File System (HDFS) gespeichert ist.

Speichern Sie die Datei und beenden Sie den Texteditor.

Als Nächstes erstellen Sie die distance_calculator.jar-Datei in HDFS, indem Sie den folgenden Befehl ausführen:

hadoop fs -mkdir -p /home/hadoop/udfs
hadoop fs -put distance_calculator.jar /home/hadoop/udfs/

Dieser Befehl kopiert die distance_calculator.jar-Datei von der lokalen Dateisystem in das Verzeichnis /home/hadoop/udfs/ in HDFS.

Schließlich führen Sie das create_udf.hql-Skript in Hive aus:

hive -f create_udf.hql

Dieser Befehl führt das Hive-Skript aus und erstellt die permanente distance_calculator-Funktion.

Sie können jetzt die distance_calculator-Funktion in Ihren Hive-Abfragen verwenden, auch nachdem Sie die Hive-Shell verlassen und neu starten.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie User Defined Functions (UDFs) in Hadoop Hive erstellen und verwenden, eine leistungsstarke Funktion, die Ihnen ermöglicht, die Funktionalität der Datenbankkomponente von Hadoop zu erweitern. Indem Sie ein futuristisches VR-Spiel entwerfen, das die Kosmosforschung simuliert, haben Sie praktische Erfahrungen bei der Erstellung einer benutzerdefinierten UDF gewonnen, um die Entfernung zwischen Himmelskörpern anhand ihrer Koordinaten zu berechnen.

Durch dieses Lab haben Sie nicht nur den Prozess der Entwicklung, Kompilierung und Registrierung von UDFs in Hive beherrscht, sondern auch wertvolle Erkenntnisse darüber gewonnen, wie UDFs genutzt werden können, um astronomische Daten mit bisher nie dagewesener Effizienz und Genauigkeit zu verarbeiten und zu analysieren. Die Fähigkeiten, die Sie erworben haben, werden unschätzbare Hilfe sein, wenn Sie weiterhin die Grenzen von VR-Erfahrungen erweitern und Spieler in faszinierende und realistische kosmische Abenteuer stürzen.