ハドープを用いた宝石分析

HadoopBeginner
オンラインで実践に進む

はじめに

魔法の王立アカデミーの魅力的な世界では、魔法の世界を動かす神秘的な宝石の謎を解き明かすために、熟練した宝石学者チームが尽力していました。その中には、驚異的な研究者であるアリアがいました。彼女の揺るぎない好奇心と鋭い知性は、彼女を畏れるべき存在にしていました。

最近、アカデミーはこれらの宝石の特性と応用に関する膨大なデータを入手しました。この豊富な知識は、魔法の革新の新しい道を開くことが期待されていました。しかし、膨大な情報量は脅威的なチャレンジを提示し、強力な分析ツールの助けが必要でした。

アリアは、立ち向かえず、手荒なデータの広がりを制御する可能性を認識して、偉大なハドープ生態系に目を向けました。彼女の目標は二つでした。宝石の振る舞いの複雑さをさらに深く探究し、魔法を利用する方法を革新的に変えることができる隠されたパターンを明らかにすることです。

宝石データセットの探索

このステップでは、宝石データセットとその構造を知り、それを元にした後の分析のための基礎を築きます。 まず、ターミナルで以下のコマンドを実行して、hadoop ユーザーとしてログインしてください。

su - hadoop

では、まず例を作りましょう。サンプルファイルを作成するために、以下のコマンドラインをターミナルにコピーしてください。

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

ここではすでに gemstone_data ディレクトリにいますので、このディレクトリの内容を見直してみましょう。

ls

ディレクトリを移動しながら、これらの 2 つのファイルが表示されます。それぞれが宝石データの異なる側面に焦点を当てています。gem_properties.csv は宝石の物理的特性を掘り下げ、gem_applications.csv は宝石の様々な魔法的用途に関する洞察を提供します。

データセットをさらに深く理解するために、これらのファイルの最初の数行を見てみましょう。

head -n 5 gem_properties.csv

結果は以下のようになるはずです。

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

このコマンドは、gem_properties.csv ファイルの最初の 5 行を表示し、その構造と内容を一瞥させます。

Hive テーブルの作成

データセットに慣れたので、次に宝石の特性データを保存して照会するための Hive テーブルを作成しましょう。

まず、Hive CLI を起動します。

hive

Hive CLI に入ったら、宝石データを保存するための新しいデータベース gemstone_analysis を作成します。

CREATE DATABASE gemstone_analysis;

次に、新しく作成したデータベースに切り替えます。

USE gemstone_analysis;

データベースを設定したので、gem_properties.csv ファイルのデータを保存するための gem_properties という名前のテーブルを作成しましょう。このテーブルには、宝石 ID、名前、色、硬度、密度、屈折率に関する情報が含まれます。

CREATE TABLE gem_properties (
  gem_id INT COMMENT '宝石の固有 ID',
  gem_name STRING COMMENT '宝石の名前',
  color STRING COMMENT '宝石の色',
  hardness FLOAT COMMENT '宝石の硬度',
  density FLOAT COMMENT '宝石の密度',
  refractive_index FLOAT COMMENT '宝石の屈折率'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count'='1');

このステートメントは、gem_properties テーブルの構造を定義し、列名とデータ型を指定します。ROW FORMAT 句は、データがカンマで区切られていることを示し、STORED AS TEXTFILE 句は、データを平文ファイルとして保存することを指定します。

では、gem_properties.csv ファイルのデータを新しく作成した gem_properties テーブルに読み込みましょう。

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

このコマンドは、指定されたファイルパスのデータを gem_properties テーブルに読み込みます。

データが読み込まれたら、gem_properties テーブルの最初の 5 行を表示するための簡単な SELECT クエリを実行して、正しく読み込まれたことを確認しましょう。

SELECT * FROM gem_properties LIMIT 5;

このクエリは、gem_properties テーブルの最初の 5 行を表示し、データが正しく読み込まれたことを確認できます。結果は以下のようになります。

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)

宝石の特性分析

このステップでは、Hive の DISTRIBUTE BY 句の力を利用して、効率的に宝石の特性データを分析します。

まず始めに、gem_name 列によってデータを分割するための新しいテーブル distributed_gem_properties を作成しましょう。

(少し時間がかかる場合がありますので、お待ちください)

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

このテーブルは元の gem_properties テーブルの構造を反映していますが、データを効果的に整理して分散させるための追加の句を含んでいます。

AS SELECT * FROM gem_properties:このステートメントのこの部分は、既存の gem_properties テーブルからすべての列と行を選択します。基本的には、元のテーブルのデータを新しい分散テーブルにコピーしています。

DISTRIBUTE BY gem_id:この句は、gem_id 列に基づいてリデューサー間でのデータの分散を指定します。このようにデータを分散させることで、並列処理を利用して宝石の特性をより効率的に分析することができます。

分散テーブルをセットアップしたので、効率を向上させて宝石の特性データに対して様々な分析を行うことができます。

硬度が 8.0 から 9.0 の間の宝石を見つけるためのクエリを実行しましょう。このコードをコピーしてターミナルに貼り付けて実行します。

SELECT * FROM distributed_gem_properties WHERE hardness BETWEEN 8.0 AND 9.0;

このクエリは、指定された範囲内の硬度を持つ宝石のデータを分散テーブルから取得します。結果は以下のようになります。

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)

次に、GROUP BY を利用した以下のコードスニペットを試してみましょう。

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

このコードは、分散テーブル distributed_gem_properties の各色の宝石の数をカウントするためのクエリ文です。結果は以下のようになります。

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)

ここに、PARTITION BY を使用した別の例のクエリがあります。

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

このクエリは、distributed_gem_properties テーブルから gem_namecolor を選択し、各 color の宝石の数をカウントします。PARTITION BY 句は、カウントを分割する列を指定します。この場合、color 列です。これにより、各色の宝石に対して別々のカウントが生成されます。結果は以下のようになります。

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)

これらは、DISTRIBUTE BY によって分散されたテーブルの分析と応用の初步的な理解を得るための単純な例です。PARTITION BYGROUP BY などのコマンドを組み合わせています。このレッスンはここで終了です。皆さんには少し理解が得られたと思います。

まとめ

この実験では、魔法の世界の才能ある宝石学者であるアリアに導かれて、宝石分析の魅力的な世界への旅に出ました。ハドープと Hive の力を利用して、膨大なデータの中を掘り下げ、この魅力的な世界の魔法を支える神秘的な宝石に秘められた秘密を明らかにしました。

注意深く工夫された一連のステップを通じて、宝石データセットの複雑さを探究し、データを保存し照会するための堅牢な Hive テーブルを作成し、最終的に DISTRIBUTE BY 句を利用して分析を最適化しました。この強力な手法により、データを効率的に分割して分散させることができ、より高速で集中的な照会のための道を開き、これらの素晴らしい宝石の特性と応用に関する貴重な洞察を解き明かしました。

この実験を通じて、私たちはハドープと Hive に関する実際の経験を得るだけでなく、魔法の世界の謎を解き明かすためのビッグデータ分析の変革的な可能性を目の当たりにしました。これらのツールをマスターすることで、私たちは新しい冒険に出るために必要な知識とスキルを身に付けました。そこでは、データが無限の可能性を解き明かし、魔法の革新の限界を押し広げる鍵となっています。