More Related Content
Similar to Apache Hive 紹介 (20)
More from あしたのオープンソース研究所 (14)
Apache Hive 紹介
- 2. Hive のことをおおまかに言うと …
ユーザーが SQL に似たクエリ言語 HiveQL でクエリを書く。
↓
Hive がそれを map/reduce のジョブに変換して Hadoop に実行させる。
浅く使う場合には、クエリを使うユーザーは内部構造をあまり知らなくていいとい
うところは DBMS に似ています。
Copyright © Infoscience
Corporation. All rights
- 3. Apache Hive の特徴
Apache Hive の特徴
・ Hadoop 互換のファイルシステムに格納されたデータセットの分析を行う。
・ map/reduce をサポートした SQL ライクな「 HiveQL 」という言語を用いる。
・クエリの高速化のため、ビットマップインデックスを含めたインデックス機能も
実装している
Copyright © Infoscience
Corporation. All rights
- 4. Apache Hive の機能
Apache Hive の機能
・高速化のためインデックスを作成して使用できる。
・別の種類のストレージタイプが使える。たとえばプレーンテキスト、 RCFile,
HBase など
・クエリ実行時の構文チェック時間を大幅に短縮するため、メタデータを RDBMS
に格納する機能をもつ。
・ Hadoop 環境に格納された圧縮データを扱う機能をもつ。
・日付型や文字列型を扱ったり他のデータ操作を可能とする、組み込みユーザ定義
関数( UDF) が使える。組み込み関数で用意されていない機能もユーザが自作
UDF を作成することで対応できる。
・ SQL ライクなクエリ言語 (HiveQL) 。これは内部的に Map/Reduce ジョブに変換
される。
Copyright © Infoscience
Corporation. All rights
- 5. Hive のアーキテクチャ
アーキテクチャ
("Hadoop 第 3 版 " p.453 図 12-1 Hive のアーキテクチャ か
ら抜粋 )
すべてのコマンドやクエリはドライバに送られます。ドライバは入力されたコマ
ンドをコンパイルし、必要な演算処理の最適化を行って、 map/reduce の無閉路有
向グラフからなる実行計画を作成します。ドライバは map/reduce の job を
Hadoop に実行させます。
Copyright © Infoscience
Corporation. All rights
- 7. Hive のデータ型
プリミティブと複合型
プリミティブ : INT, DOUBLE など
複合型 : ARRAY, MAP, STRUCT (RDB にはありません )
("Hadoop 第 3 版 " p.459 表 12-3 Hive のデータ型 から抜粋 )
Copyright © Infoscience
Corporation. All rights
- 9. ファイルフォーマット (2)
● レコードの例
以下のようなデータを例えば HDFS 上のファイルに格納します。
John Doe^A100000.0^AMary Smith^BTodd Jones^AFederal Taxes^C.2^BState
Taxes^C.05^BInsurance^C.1^A1 Michigan Ave.^BChicago^BIL^B60600
Mary Smith^A80000.0^ABill King^AFederal Taxes^C.2^BState Taxes^C.05^B<phrase
role="keep-together">Insurance</phrase>^C.1^A100 Ontario St.^BChicago^BIL^B60601
Todd Jones^A70000.0^AFederal Taxes^C.15^BState Taxes^C.03^BInsurance^C.1^A200
Chicago Ave.^BOak Park^BIL^B60700
Bill King^A60000.0^AFederal Taxes^C.15^BState Taxes^C.03^BInsurance^C.1^A300
Obscure Dr.^BObscuria^BIL^B60100
Copyright © Infoscience
Corporation. All rights
- 11. HiveQL : テーブルの作成
CREATE TABLE 文の例
CREATE TABLE records (year STRING, temperature INT, quality INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 't';
ROW FORMAT DELIMITED FIELDS TERMINATED BY 't':
データファイル中の各行はタブ区切りのテキストということを示しています。
※ CREATE TABLE を実行しても、 RDB のように実際に DB の中にセグメントが
作られるわけではありません。メタストアにスキーマ情報が登録されます。
Copyright © Infoscience
Corporation. All rights
- 13. HiveQL : テーブルの確認
テーブルの確認
hive> SHOW TABLES;
ユーザーが見られるテーブルをすべて表示します。
hive> SHOW TABLES '.*s';
's' で終わるテーブルをすべて表示します。 ( 正規表現 )
hive> DESCRIBE invites;
列を表示します。
例
hive> describe invites;
OK
foo
int
bar
string
ds
string
# Partition Information
# col_name
data_type
None
None
None
comment
ds
string
None
Time taken: 0.265 seconds, Fetched: 8 row(s)
Copyright © Infoscience
Corporation. All rights
- 14. HiveQL : データのロード
データのロードの例
LOAD DATA LOCAL INPATH 'input/ncdc/micro-tab/sample.txt'
OVERWRITE INTO TABLE records;
このコマンドを実行すると、 Hive は指定されたローカルファイルを Hive の保
管用ディレクトリに保存します。例えば HDFS 上の Hive 保管用ディレクトリ上に
ファイルとして保存します。
※ OVERWRITE キーワードは、ディレクトリ中にそのテーブル用のファイルがす
でにあった場合、 Hive に対して、それらを削除するように指示します。
Copyright © Infoscience
Corporation. All rights
- 15. HiveQL: INSERT
データをインポートするには INSERT 文を使います。 (Hive には今のところ
UPDATE, DELETE はありません )
INSERT の例
hive> INSERT OVERWRITE TABLE events
> SELECT a.* FROM profiles a WHERE a.key < 100;
profiles というテーブルからその key という列の値が 100 未満の行を抽出し、それ
を events というテーブルに INSERT しています。
※ 上記の例では OVERWRITE キーワードが指定されているため、既存のデータ
は新たに指定されたデータに置き換わります。
Copyright © Infoscience
Corporation. All rights
- 16. HiveQL : SELECT
クエリの例
SELECT weekday, COUNT(*)
FROM u_data_new
GROUP BY weekday;
このように、 SQL に似た構文が使用できます。
Copyright © Infoscience
Corporation. All rights
- 17. HiveQL のクエリの制限 (1)
•SELECT に関して
FROM には単一のテーブル もしくは ビュー しか書けません。
•( 内部 ) 結合に関して
Hive では、結合の述部に複数の式を AND キーワードで区切って並べ、複数の列を
使って結合させることができます。クエリに JOIN...ON... 節を追加すれば、 3 つ以
上のテーブルを結合することもできます。
例
SELECT sales.*, things.*
FROM sales JOIN things ON (sales.id = things.id);
Copyright © Infoscience
Corporation. All rights
- 18. HiveQL のクエリの制限 (2)
•サブクエリ
FROM 節中にしか書けません。
例
SELECT station, year, AVG(max_temperature)
FROM (
SELECT station, year, MAX(temperature) AS max_temperature
FROM records2
WHERE temperature != 9999
AND (quality = 0 OR quality = 1 OR quality = 4 OR quality = 5 OR quality = 9)
GROUP BY station, year
) mt
GROUP BY station, year;
Copyright © Infoscience
Corporation. All rights
- 19. HiveQL : 関数
HiveQL で使用できる関数
・数値関数 :
round, floor, ceil, rand, exp, ln, pow, sqrt, … 等
・集計関数:
count, sum, avg, min, max, variance, … 等
・テーブル生成関数 :
json_tuple ( 複数の名前をとってタプルを返す ), parse_url_tuple 等
・その他の組み込み関数
length, reverse, concat, substr, upper, lower, … 等
Copyright © Infoscience
Corporation. All rights
- 20. HiveQL : ビュー
•ビュー
読み出しのみ。マテリアライズド・ビューはサポートされていません。
その ビューを参照する文が実行された時点で、ビューの SELECT 文が実行され
ます。
例
CREATE VIEW max_temperatures (station, year, max_temperature) AS
SELECT station, year, MAX(temperature)
FROM valid_records
GROUP BY station, year;
Copyright © Infoscience
Corporation. All rights
- 21. HiveQL : インデックス
現時点では、インデックスには compact と bitmap の 2 種類があります。
• compact インデックス
それぞれの値に対し、各ファイル内のオフセット(基準点からの距離)ではなく、
HDFS のブロック番号を保存します。そのため、 compact インデックスはそれ
ほどディスク容量を消費しませんが、それでも値が近傍の行にまとまっているよう
な場合には効果的です。
例.
CREATE TABLE t(i int, j int);
CREATE INDEX x ON TABLE t(j)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler';
•bitmap インデックス
特定の値が現れている行を、圧縮されたビット集合を使って効率的に保存するもの
で、通常はカーディナリティの低い列(性別や国など)に対して使うのが適切です
。
Copyright © Infoscience
Corporation. All rights
- 22. HiveQL : ユーザー定義関数
•ユーザー定義関数を書けば、独自の処理のコードを Hive に組み込み、 Hive のクエ
リ中から簡単に呼び出すことができます。
•ユーザー定義関数 (User-Defined Function:UDF)
UDF は、 1 つの行を受け取り、 1 つの出力行を生成します。数値関数や文字列関数
など。
•ユーザー定義集計関数 (User-Defined Function:UDAF)
UDAF は、複数の入力行を受け取り、 1 つの出力行を生成します。 COUNT や MAX
といった関数など。
•ユーザー定義テーブル生成関数 (User-Defined Table-generating Function:UDTF)
UDTF は、 1 つの行に対して処理を行い、複数の行 ( すなわちテーブル ) を出力しま
す。
Copyright © Infoscience
Corporation. All rights
- 23. Hive の事例
・ KIXEYE
オンラインゲームのログの分析に Hive を使用している。
https://cwiki.apache.org/confluence/download/attachments/27362054/Hive-kixeyeanalytics.pdf?version=1&modificationDate=1360856744000&api=v2
・ NASA ジェット推進研究所
地域気象モデル評価システムで使用。
( 「プログラミング Hive 」 p.317 ~ 321)
Copyright © Infoscience
Corporation. All rights
- 24. Impala, Presto
Hive にはジョブの実行に時間がかかるという弱点があります。
Hive の有効性を受け、その問題を解決した Impara や Presto という OSS が開発さ
れています。
・ Impala
Hive よりも高速。
map/reduce を使用しない。
耐障害性がない。
Cloudera により開発される。
・ Presto
アドホックなクエリの結果をインタラクティブに得ることに最適化。
map/reduce とは異なるアーキテクチャ。
Facebook により開発される。
Copyright © Infoscience
Corporation. All rights
- 25. まとめ
・ Hadoop 互換のファイルシステムに格納されたデータセットの分析を行う。
・ map/reduce をサポートした SQL ライクな「 HiveQL 」という言語を用いる。
・ Hadoop を使ったクエリで mapreduce のプログラミングが不要になるの
で、 MapReduce に詳しくない人でも Hadoop を使って分析することが可能になる
。
→ いままでのような、ユーザーが RDBMS を使って分析を行うということの延長
線上にある。
・ Hive では一般のユーザーでも Hadoop のスケーラブルなところを活かせる。
cf. RDBMS の性能はスケーラブルになりにくい。シャーディングにすることも可
能だが運用が面倒になる。 NoSQL はスケーラブルだが ( クエリは ) 一般のユーザ
ーには難しい。
Copyright © Infoscience
Corporation. All rights
- 26. 参考文献
・”オライリーセミナー Hive 入門 " 嶋内 翔 著
(http://www.slideshare.net/Cloudera_jp/hive-20130724)
・ "Hadoop 第 3 版 " (12 章 ), オライリー・ジャパン、 Tom White 著、 Sky 株式会社 玉川
竜司、兼田 聖司 訳
・ " プログラミング Hive", オライリー・ジャパン、 Edward Capriolo, Dean Wampler,
Jason Rutherglen 著、 Sky 株式会社 玉川 竜司 訳
・ Apache Hive, wikipedia (http://ja.wikipedia.org/wiki/Apache_Hive,
http://en.wikipedia.org/wiki/Apache_Hive)
・ Apache Hive Wiki: GettingStarted
https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStartedInstallingHivefromaStableRelease
・ Hadoop クイックスタートガイド
http://metasearch.sourceforge.jp/wiki/index.php?Hadoop%A5%AF
%A5%A4%A5%C3%A5%AF%A5%B9%A5%BF%A1%BC%A5%C8%A5%AC
%A5%A4%A5%C9
Copyright © Infoscience
Corporation. All rights