Skip to content

필사 모드: Apache Hive Query Example (MovieLens)

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

Overview

一般的にHDFSのデータを扱う方法は、MapReduceプログラムを作成することです。MapReduceは自由度は高いですが、適切に使いこなすには多くの学習と試行錯誤が必要です。そして最大の欠点は、難しいということです。そのため生産性が低くなります。Hiveは開発者に親しみやすいSQLを記述すると、それをMapReduceジョブに変換してくれます。(最近では、HiveのエンジンとしてMapReduceではなく、はるかに高速なSparkやTezを使用するとのことです。)そのため、SQLだけを知っている開発者でもHDFS上のデータを保存したり、照会したり、有用な情報を抽出できるようになります。MovieLensが提供するデータを使ってHive Queryでデータを操作しながら、Hiveがどれほど便利かを見ていきましょう。

データの準備

ダウンロード

GroupLensというサイトが提供する[https://grouplens.org/datasets/movielens/](https://grouplens.org/datasets/movielens/)から100kデータを使用します。

wget https://files.grouplens.org/datasets/movielens/ml-100k.zip

unzip ml-100k.zip

hadoop fs -cp ml-100k/u.data /tmp

Hiveテーブルの作成

hive shellを起動し、以下のコマンドでu_dataテーブルを作成します。

use default

CREATE TABLE IF NOT EXISTS u_data(

userid INT,

movieid INT,

rating INT,

unixtime TIMESTAMP

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

STORED AS TEXTFILE;

LOAD DATA INPATH 'hdfs:///tmp/u.data' overwrite into table u_data;

u_dataテーブルが正常に作成されたか確認します。

hive> show databases;

OK

default

userdb

Time taken: 0.312 seconds, Fetched: 2 row(s)

hive> use default;

OK

Time taken: 0.023 seconds

hive> show tables;

OK

u_data

Time taken: 0.044 seconds, Fetched: 1 row(s)

HDFS上でも該当テーブルが正常に作成されたか確認します。

root@ubuntu01:~# hdfs dfs -ls /user/hive/warehouse

Found 2 items

drwxr-xr-x - root supergroup 0 2022-11-22 18:52 /user/hive/warehouse/u_data

drwxr-xr-x - root supergroup 0 2022-11-22 18:43 /user/hive/warehouse/userdb.db

Query

table schema

hive> describe u_data;

OK

userid int

movieid int

rating int

unixtime timestamp

Time taken: 0.087 seconds, Fetched: 4 row(s)

row count

`u_data`テーブルに合計何行あるかを出力するクエリを実行してみましょう。

hive> select count(*) from u_data;

OK

100000

Time taken: 20.914 seconds, Fetched: 1 row(s)

u_dataテーブルには100k(10万件の)行があることが確認できます。

distinct movieid

hive> select count(distinct movieid) from u_data;

OK

1682

映画の種類

distinctコマンドを使ってmovieidの数を求めることができます。

hive> select count(distinct movieid) from u_data;

OK

1682

映画別の評価

映画別の平均評価を求めるには、以下のコマンドを使用できます。

`GROUP BY`コマンドで集計演算を実行できます。

hive> select movieid, avg(rating) from u_data group by movieid;

映画別評価ランキング

`SORT BY my_column (ASC|DESC)`コマンドを使用すると、my_columnカラムを基準に降順でソートおよび出力が可能です。

hive> select movieid, avg(rating) as avg_rating from u_data group by movieid sort by avg_rating DESC;

Reference

- [https://cloudxlab.com/assessment/displayslide/326/hive-movielens-assignment](https://cloudxlab.com/assessment/displayslide/326/hive-movielens-assignment)

- [https://github.com/mionisation/BI_BigData_2_HiveDatasetAnalysis/blob/master/queries/hive-query_1.hql](https://github.com/mionisation/BI_BigData_2_HiveDatasetAnalysis/blob/master/queries/hive-query_1.hql)

- [ビッグデータ - Hadoop - Hiveで始める](https://wikidocs.net/book/2203)

クイズ

MovieLensデータセットを使ったApache Hiveクエリの使い方を学びます

GroupLensというサイトが提供するhttps://grouplens.org/datasets/movielens/から100kデータを使用します。

hive shellを起動し、以下のコマンドでu_dataテーブルを作成します。

u_dataテーブルが正常に作成されたか確認します。

HDFS上でも該当テーブルが正常に作成されたか確認します。 Query

u_dataテーブルに合計何行あるかを出力するクエリを実行してみましょう。

u_dataテーブルには100k(10万件の)行があることが確認できます。

distinctコマンドを使ってmovieidの数を求めることができます。

현재 단락 (1/71)

一般的にHDFSのデータを扱う方法は、MapReduceプログラムを作成することです。MapReduceは自由度は高いですが、適切に使いこなすには多くの学習と試行錯誤が必要です。そして最大の欠点は、難...

작성 글자: 0원문 글자: 2,924작성 단락: 0/71