銀河宇宙港の運営を最適化する

HadoopHadoopBeginner
今すぐ練習

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

はじめに

はるかな未来に、人類は宇宙の広大な領域にまで拡大しています。宇宙港管理機構(Interstellar Spaceport Authority、ISA)は、銀河に散らばる宇宙港の複雑なネットワークを管理する責任があります。ISAの最高司令官として、あなたの使命は、Hadoopのパーティショニングとバケティング機能の力を活用して、宇宙港の運営を最適化することです。

宇宙港のデータセンターには、飛行ログ、貨物積荷リスト、乗客記録など、膨大な量の情報が保管されています。効率的なデータ管理は、スムーズな運営と意思決定を行うために不可欠です。あなたの目標は、Hadoopエコシステム内の照会性能とデータの整理を向上させるために、パーティショニングとバケティング戦略を実装することです。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHiveGroup -.-> hadoop/hive_shell("Hive Shell") 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/storage_formats("Choosing Storage Formats") hadoop/HadoopHiveGroup -.-> hadoop/partitions_buckets("Implementing Partitions and Buckets") subgraph Lab Skills hadoop/hive_shell -.-> lab-288989{{"銀河宇宙港の運営を最適化する"}} hadoop/manage_db -.-> lab-288989{{"銀河宇宙港の運営を最適化する"}} hadoop/create_tables -.-> lab-288989{{"銀河宇宙港の運営を最適化する"}} hadoop/load_insert_data -.-> lab-288989{{"銀河宇宙港の運営を最適化する"}} hadoop/storage_formats -.-> lab-288989{{"銀河宇宙港の運営を最適化する"}} hadoop/partitions_buckets -.-> lab-288989{{"銀河宇宙港の運営を最適化する"}} end

パーティショニングされたテーブルを作成する

この手順では、飛行ログデータを格納するためのパーティショニングされたテーブルを作成します。これにより、照会性能が向上し、効率的なデータ管理が可能になります。

まず、ターミナルで以下のコマンドを実行して、hadoop ユーザーとしてログインしていることを確認します。

su - hadoop

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

hive

次に、データベースが存在しない場合は作成します。

CREATE DATABASE IF NOT EXISTS spaceport;

spaceportデータベースに切り替えます。

USE spaceport;

次に、飛行ログ用のパーティショニングされたテーブルを作成します。

CREATE TABLE flight_logs (
    flight_id STRING,
    spacecraft STRING,
    departure_time TIMESTAMP,
    arrival_time TIMESTAMP,
    destination STRING
)
PARTITIONED BY (year INT, month INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

最後に、以下のコマンドでHiveを終了します。

EXIT;

上記のコードでは、飛行ID、宇宙船、出発時刻、到着時刻、目的地の列を持つパーティショニングされたテーブル flight_logs を作成しています。このテーブルは yearmonth の列によってパーティショニングされており、これはデータが年と月の値に基づいて別々のパーティションに整理されることを意味します。

パーティショニングされたテーブルにデータを読み込む

この手順では、前の手順で作成したパーティショニングされたテーブルにサンプルの飛行ログデータを読み込みます。

まず、いくつかのサンプルの飛行ログデータファイルを作成します。

cat > /home/hadoop/flight_logs_1.txt << EOF
FL001,Andromeda Explorer,2023-06-01 08:00:00,2023-06-02 12:30:00,Andromeda Galaxy
FL002,Milky Way Voyager,2023-06-15 10:15:00,2023-06-16 06:45:00,Milky Way Galaxy
EOF

cat > /home/hadoop/flight_logs_2.txt << EOF
FL003,Cygnus Cruiser,2023-07-20 14:30:00,2023-07-21 09:00:00,Cygnus Constellation
FL004,Orion Shuttle,2023-07-25 18:00:00,2023-07-26 03:15:00,Orion Nebula
EOF

次に、パーティショニングされたテーブルにデータを読み込みます。

hive -e "LOAD DATA LOCAL INPATH '/home/hadoop/flight_logs_1.txt' INTO TABLE spaceport.flight_logs PARTITION (year=2023, month=6);"
hive -e "LOAD DATA LOCAL INPATH '/home/hadoop/flight_logs_2.txt' INTO TABLE spaceport.flight_logs PARTITION (year=2023, month=7);"

上記のコードでは、まず4つの飛行レコードを持つサンプルの飛行ログデータファイル flight_logs_1.txtflight_logs_2.txt を作成します。次に、Hiveの LOAD DATA コマンドを使用して、データをパーティショニングされたテーブル flight_logs に読み込みます。データを2回読み込みます。1回目は year=2023 かつ month=6 のパーティションに、2回目は year=2023 かつ month=7 のパーティションに読み込みます。

バケティングされたテーブルを作成する

この手順では、貨物積荷リストデータを格納するためのバケティングされたテーブルを作成します。これにより、cargo_type 列を含む照会の照会性能が向上します。

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

hive

次に、spaceportデータベースに切り替えます。

USE spaceport;

次に、貨物積荷リスト用のバケティングされたテーブルを作成します。

CREATE TABLE cargo_manifests (
    manifest_id STRING,
    cargo_type STRING,
    destination STRING,
    weight DOUBLE,
    volume DOUBLE
)
CLUSTERED BY (cargo_type) INTO 4 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

最後に、以下のコマンドでHiveを終了します。

EXIT;

上記のコードでは、積荷リストID、貨物種類、目的地、重量、体積の列を持つバケティングされたテーブル cargo_manifests を作成しています。このテーブルは、cargo_type 列によって4つのバケットにバケティング(クラスタリング)されており、cargo_type 列を含む照会の照会性能を向上させるためです。

バケティングされたテーブルにデータを読み込む

この手順では、前の手順で作成したバケティングされたテーブルにサンプルの貨物積荷リストデータを読み込みます。

まず、サンプルの貨物積荷リストデータファイルを作成します。

cat > /home/hadoop/cargo_manifests.txt << EOF
CM001,Electronics,Andromeda Galaxy,5.2,2.1
CM002,Machinery,Milky Way Galaxy,12.8,8.5
CM003,Food,Cygnus Constellation,3.1,1.5
CM004,Electronics,Orion Nebula,7.9,3.2
EOF

次に、バケティングされたテーブルにデータを読み込みます。

hive -e "LOAD DATA LOCAL INPATH '/home/hadoop/cargo_manifests.txt' OVERWRITE INTO TABLE spaceport.cargo_manifests;"

上記のコードでは、まず4つの貨物レコードを持つサンプルの貨物積荷リストデータファイル cargo_manifests.txt を作成します。次に、Hiveの LOAD DATA コマンドを使用して、データをバケティングされたテーブル cargo_manifests に読み込みます。

まとめ

この実験では、Hadoop Hiveにおけるパーティショニングとバケティングの実装を検討しました。まず、年と月でパーティショニングされた飛行ログデータを格納するためのパーティショニングされたテーブルを作成しました。このアプローチにより、特定の基準に基づいてデータを別々のパーティションに整理することで、効率的な照会とデータ管理が可能になります。

次に、LOAD DATA コマンドを使用してサンプルの飛行ログデータをパーティショニングされたテーブルに読み込み、データが年と月によって正しくパーティショニングされていることを確認しました。

次に、cargo_type 列によってバケティングされた貨物積荷リストデータを格納するためのバケティングされたテーブルを作成しました。バケティングは、特定の列に基づいてデータをより小さく、管理しやすいチャンクに分割することで照会性能を向上させます。

最後に、LOAD DATA コマンドを使用してサンプルの貨物積荷リストデータをバケティングされたテーブルに読み込みました。

この実験を通じて、Hadoopエコシステムにおけるパーティショニングとバケティングが、データストレージの最適化、照会性能、および全体的なデータ管理においてどのように重要であるかを学びました。これらの技術を実装することで、惑星間宇宙港当局における効率的な操作を保証し、利用可能な膨大なデータに基づいた適切な意思決定を行うことができます。