HadoopUDFs を使った VR 宇宙探索

HadoopHadoopBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

ここは、技術と想像力が融合してこれまでにない没入感のある体験を生み出す、未来派の仮想現実(VR)の世界です。あなたはVRゲームホストで、プレイヤーを彼らの最狂的な夢を超える世界に運ぶ魅力的な仮想環境の設計と保守を担当しています。

あなたの最新プロジェクトは、宇宙の広大な広がりをシミュレートし、プレイヤーに遠い銀河を探索させ、宇宙の謎を解き明かし、宇宙の秘密を解き明かすVRゲームを作成することです。ただし、この野心的な取り組みを達成するには、ビッグデータの力を活用し、Hadoopエコシステムの機能を利用する必要があります。

この実験では、Hadoopユーザー定義関数(UDF)の世界に深く突き入ります。これは、HadoopのデータウェアハウスコンポーネントであるHiveの機能を拡張する強力な機能です。UDFをマスターすることで、ゲームの独自の要件に合わせたカスタム関数を作成でき、天文学的データをこれまでにない効率と精度で処理および分析することができます。


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/hive_setup("Hive Setup") hadoop/HadoopHiveGroup -.-> hadoop/hive_shell("Hive Shell") hadoop/HadoopHiveGroup -.-> hadoop/create_tables("Creating Tables") hadoop/HadoopHiveGroup -.-> hadoop/load_insert_data("Loading and Inserting Data") hadoop/HadoopHiveGroup -.-> hadoop/udf("User Defined Function") subgraph Lab Skills hadoop/fs_mkdir -.-> lab-289003{{"HadoopUDFs を使った VR 宇宙探索"}} hadoop/hive_setup -.-> lab-289003{{"HadoopUDFs を使った VR 宇宙探索"}} hadoop/hive_shell -.-> lab-289003{{"HadoopUDFs を使った VR 宇宙探索"}} hadoop/create_tables -.-> lab-289003{{"HadoopUDFs を使った VR 宇宙探索"}} hadoop/load_insert_data -.-> lab-289003{{"HadoopUDFs を使った VR 宇宙探索"}} hadoop/udf -.-> lab-289003{{"HadoopUDFs を使った VR 宇宙探索"}} end

環境をセットアップする

このステップでは、HadoopとHiveを使用するための必要な環境をセットアップします。まず、端末で次のコマンドを実行して hadoop ユーザーに切り替えていることを確認します。

su - hadoop

次に、既定の作業ディレクトリになる /home/hadoop ディレクトリに移動します。

cd /home/hadoop

ユーザー定義関数を保存するための新しいディレクトリ udfs を作成します。

mkdir udfs
cd udfs

単純なUDFを作成する

このステップでは、2つの天体の座標に基づいてそれらの間の距離を計算する単純なユーザー定義関数(UDF)を作成します。この関数は、VRゲーム内の天体の位置と動きを正確にレンダリングするために不可欠です。

まず、udfs ディレクトリに新しいファイル DistanceCalculator.java を作成します。

nano DistanceCalculator.java

次のコードをファイルにコピーして貼り付けます。

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

このJavaコードは、2つの天体の座標(x1, y1, z1x2, y2, z2)を表す6つの DoubleWritable パラメータを持つ DistanceCalculator と呼ばれるUDFを定義しています。evaluate メソッドは2つの天体間のユークリッド距離を計算し、結果を DoubleWritable として返します。

ファイルを保存してテキストエディタを終了します。

次に、次のコマンドを使用してJavaコードをコンパイルします。

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

このコマンドは DistanceCalculator.java ファイルをコンパイルし、DistanceCalculator.class バイトコードファイルを作成します。

最後に、コンパイル済みのクラスを含むJARファイルを作成します。

jar cf distance_calculator.jar DistanceCalculator.class

このコマンドは、DistanceCalculator.class バイトコードを含む distance_calculator.jar という名前のJARファイルを作成します。

HiveにUDFを登録する

既に DistanceCalculator UDFを作成したので、天文学的データを処理するためにHiveに登録する必要があります。

まず、次のコマンドを実行してHiveシェルを起動します。

hive

Hiveシェルに入ったら、DistanceCalculator UDFを使用して一時的な関数を作成します。

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

ADD JAR コマンドは、コンパイル済みのUDFを含むJARファイルをHive環境に追加し、CREATE TEMPORARY FUNCTION コマンドは DistanceCalculator クラスを参照する distance_calculator と呼ばれる一時的な関数を作成します。

これで、Hiveクエリで distance_calculator 関数を使用できるようになりました。たとえば、サンプルテーブル celestial_objects を作成して、2つの天体間の距離を計算してみましょう。

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

このクエリは、天体の名前と座標用の列を持つ celestial_objects テーブルを作成します。

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

次に、地球、月、火星のサンプルデータを挿入します。

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;

最後に、すべての天体のペア間でクロス結合を行い、distance_calculator UDFを使用してそれらの間の距離を計算します。

出力は次のようになるはずです。

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

永続的なUDFを作成する

一時的な関数はテストや探索に便利ですが、Hiveシェルを終了すると失われます。UDFを永続的に利用可能にするには、永続的な関数を作成する必要があります。

まず、次のコマンドを実行してHiveシェルを終了します。

quit;

次に、udfs ディレクトリに新しいファイル create_udf.hql を作成します。

nano create_udf.hql

次のコードをファイルにコピーして貼り付けます。

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

このHiveクエリは、Hadoop分散ファイルシステム(HDFS)に保存された distance_calculator.jar ファイル内の DistanceCalculator クラスを参照する distance_calculator と呼ばれる永続的な関数を作成します。

ファイルを保存してテキストエディタを終了します。

次に、次のコマンドを実行してHDFSに distance_calculator.jar ファイルを作成します。

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

このコマンドは、distance_calculator.jar ファイルをローカルファイルシステムからHDFSの /home/hadoop/udfs/ ディレクトリにコピーします。

最後に、Hiveで create_udf.hql スクリプトを実行します。

hive -f create_udf.hql

このコマンドはHiveスクリプトを実行し、永続的な distance_calculator 関数を作成します。

これで、Hiveシェルを終了して再起動した後でも、Hiveクエリで distance_calculator 関数を使用できるようになりました。

まとめ

この実験では、Hadoopのデータウェアハウスコンポーネントの機能を拡張する強力な機能であるHadoop Hiveにおけるユーザー定義関数(UDF)の作成と使用方法を学びました。未来派のVRゲームを設計して宇宙の探索をシミュレートすることで、天体の座標に基づいてそれらの間の距離を計算するカスタムUDFを作成する実践的な経験を得ました。

この実験を通じて、HiveにおけるUDFの開発、コンパイル、登録のプロセスを習得するだけでなく、UDFを活用して天文学的データをこれまでにない効率と精度で処理および分析する方法について貴重な洞察を得ました。あなたが獲得したスキルは、VR体験の限界を押し広げ、プレイヤーを魅力的で現実的な宇宙冒険に浸漬させる際に非常に役立ちます。