26
Copyright © Infoscience Corporation. A ll rights reserved. Apache Hive イイイイイイイイイイイイイ イイ イイ

Apache Hive 紹介

  • Upload
    -

  • View
    2.116

  • Download
    2

Embed Size (px)

DESCRIPTION

2014年1月23日のあしたのオープンソース研で使用したApache Hive説明資料です。

Citation preview

Page 1: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Apache Hive

インフォサイエンス株式会社 永江 哲朗

Page 2: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Hive のことをおおまかに言うと…

ユーザーが SQL に似たクエリ言語 HiveQL でクエリを書く。 ↓Hive がそれを map/reduce のジョブに変換して Hadoop に実行させる。

浅く使う場合には、クエリを使うユーザーは内部構造をあまり知らなくていいというところは DBMS に似ています。

Page 3: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Apache Hive の特徴

Apache Hive の特徴

・ Hadoop 互換のファイルシステムに格納されたデータセットの分析を行う。・ map/reduce をサポートした SQL ライクな「 HiveQL 」という言語を用いる。・クエリの高速化のため、ビットマップインデックスを含めたインデックス機能も実装している

Page 4: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Apache Hive の機能

Apache Hive の機能

・高速化のためインデックスを作成して使用できる。・別の種類のストレージタイプが使える。たとえばプレーンテキスト、 RCFile, HBase など・クエリ実行時の構文チェック時間を大幅に短縮するため、メタデータを RDBMS に格納する機能をもつ。・ Hadoop 環境に格納された圧縮データを扱う機能をもつ。・日付型や文字列型を扱ったり他のデータ操作を可能とする、組み込みユーザ定義関数( UDF) が使える。組み込み関数で用意されていない機能もユーザが自作 UDF を作成することで対応できる。・ SQL ライクなクエリ言語 (HiveQL) 。これは内部的に Map/Reduce ジョブに変換される。

Page 5: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Hive のアーキテクチャ

アーキテクチャ 

("Hadoop 第 3 版 " p.453 図 12-1 Hive のアーキテクチャ から抜粋 )

すべてのコマンドやクエリはドライバに送られます。ドライバは入力されたコマンドをコンパイルし、必要な演算処理の最適化を行って、 map/reduce の無閉路有向グラフからなる実行計画を作成します。ドライバは map/reduce の job をHadoop に実行させます。

Page 6: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Hive のメタストア

("Hadoop 第 3 版 " p.454  図 12-2 メタストアの設定 から抜粋 )

・メタストアHive がテーブルのスキーマやその他のシステムメタデータを永続化するための独立したリレーショナルデータベースです。通常は MySQL を使用します。

※ DerbyJava アプリケーションに組み込むことができる軽量 SQL データベース。 Derby は、アプリケーションと同じプロセス内で動作し、データをローカルのファイルに書き込みます。 

Page 7: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Hive のデータ型プリミティブと複合型  プリミティブ : INT, DOUBLEなど  複合型 : ARRAY, MAP, STRUCT (RDB にはありません )

("Hadoop 第 3 版 " p.459 表 12-3 Hive のデータ型 から抜粋 )

Page 8: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

ファイルフォーマット (1)

ファイルフォーマットTAB や空白はレコードの中でよく見られるので、区切り文字には制御文字を使うことが多いようです。

「プログラミング Hive 」 p.47

表 3-3 Hive におけるデフォルトのレコード及びフィールドの区切り文字 から抜粋

区切り文字 説明\n テキストファイルでは各行がレコードになるので、改行

文字がレコードを区切ることになります。^A

( Control-A )フィールド(列)同士を区切る。 CREATE TABLE 文で明示的に指定する場合は、 8 進表記で \001 と書く。

^B ARRAY や STRUCT の要素、あるいは MAP 中のキー / 値ペアを区切る。 CREATE TABLE 文で明示的に指定する場合は、 8 進表記で \002 と書く。

^C MAP 中のキー / 値ペアのキーと対応する値を区切る。CREATE TABLE 文で明示的に指定する場合は、 8 進表記で \003 と書く。

Page 9: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

ファイルフォーマット (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

Page 10: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

書き込み時のスキーマ適用と読み込み時のスキーマ適用

● 書き込み時のスキーマ適用: RDBMS 読み込まれたデータがスキーマに則していなければ、そのデータのロードは拒否されます。

● 読み込み時のスキーマ適用: Hive 読み込み時点ではデータを確認せず、クエリの発行時に確認を行います。スキーマに即していないデータはクエリ発行時にエラーとなります。

メリット デメリット書き込み時のスキーマ適用

クエリの実行パフォーマンスは高速になる。

データベースへのデータのロードには時間がかかる。

読み込み時のスキーマ適用

初期のデータ読み込みはきわめて高速になる。

クエリの実行が遅い。

Page 11: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

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 の中にセグメントが作られるわけではありません。メタストアにスキーマ情報が登録されます。

Page 12: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Hive のパーティション

•Hive は、テーブルをパーティション群として構成します。パーティションは、テーブルを、例えば日付のようなパーティション列の値に基づき、部分部分に大きく分割する方法です。パーティションを使えば、データの断片群に対するクエリの実行を高速化できます。

•パーティションは、テーブルの作成時に PARTITIONED BY 節で指定します。 PARTITIONED BY 節は、列の定義のリストをとります。

例 CREATE TABLE logs (ts BIGINT, line STRING)

PARTITIONED BY (dt STRING, country STRING);

上記の場合、日付 ( 文字列 ) と国名でパーティションが作られます ( 例 . 右図参照 ) 。

("Hadoop 第 3 版 " p.464 より抜粋 )

Page 13: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

HiveQL : テーブルの確認

テーブルの確認hive> SHOW TABLES;

ユーザーが見られるテーブルをすべて表示します。

hive> SHOW TABLES '.*s';

's' で終わるテーブルをすべて表示します。 (正規表現 )

hive> DESCRIBE invites;

列を表示します。

例hive> describe invites;OKfoo int Nonebar string Noneds string None

# Partition Information# col_name data_type comment

ds string NoneTime taken: 0.265 seconds, Fetched: 8 row(s)

Page 14: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

HiveQL : データのロード

データのロードの例

LOAD DATA LOCAL INPATH 'input/ncdc/micro-tab/sample.txt'

OVERWRITE INTO TABLE records;

このコマンドを実行すると、 Hive は指定されたローカルファイルを Hive の保管用ディレクトリに保存します。例えば HDFS 上の Hive保管用ディレクトリ上にファイルとして保存します。

※ OVERWRITE キーワードは、ディレクトリ中にそのテーブル用のファイルがすでにあった場合、 Hive に対して、それらを削除するように指示します。

Page 15: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

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 キーワードが指定されているため、既存のデータは新たに指定されたデータに置き換わります。

Page 16: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

HiveQL : SELECT

クエリの例

SELECT weekday, COUNT(*)

FROM u_data_new

GROUP BY weekday;

このように、 SQL に似た構文が使用できます。

Page 17: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

HiveQL のクエリの制限 (1)

•SELECT に関してFROM には単一のテーブル もしくは ビュー しか書けません。

•( 内部 )結合に関してHive では、結合の述部に複数の式を AND キーワードで区切って並べ、複数の列を使って結合させることができます。クエリに JOIN...ON... 節を追加すれば、 3 つ以上のテーブルを結合することもできます。

例 SELECT sales.*, things.* FROM sales JOIN things ON (sales.id = things.id);

Page 18: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

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;

Page 19: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

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, …等

Page 20: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

HiveQL : ビュー

•ビュー読み出しのみ。マテリアライズド・ビューはサポートされていません。

その ビューを参照する文が実行された時点で、ビューの SELECT 文が実行されます。

例 CREATE VIEW max_temperatures (station, year, max_temperature) AS

SELECT station, year, MAX(temperature)

FROM valid_records

GROUP BY station, year;

Page 21: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

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 インデックス特定の値が現れている行を、圧縮されたビット集合を使って効率的に保存するもので、通常はカーディナリティの低い列(性別や国など)に対して使うのが適切です。

Page 22: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

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 つの行に対して処理を行い、複数の行 ( すなわちテーブル ) を出力します。

Page 23: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Hive の事例

・ KIXEYE

オンラインゲームのログの分析に Hive を使用している。 https://cwiki.apache.org/confluence/download/attachments/27362054/Hive-kixeye-analytics.pdf?version=1&modificationDate=1360856744000&api=v2

・ NASA ジェット推進研究所地域気象モデル評価システムで使用。( 「プログラミング Hive 」 p.317 ~ 321)

Page 24: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

Impala, Presto

Hive にはジョブの実行に時間がかかるという弱点があります。Hive の有効性を受け、その問題を解決した Impara や Presto という OSS が開発されています。

・ ImpalaHive よりも高速。map/reduce を使用しない。耐障害性がない。Cloudera により開発される。

・ Prestoアドホックなクエリの結果をインタラクティブに得ることに最適化。map/reduce とは異なるアーキテクチャ。Facebook により開発される。

Page 25: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

まとめ

・ Hadoop 互換のファイルシステムに格納されたデータセットの分析を行う。

・ map/reduce をサポートした SQL ライクな「 HiveQL 」という言語を用いる。

・ Hadoop を使ったクエリで mapreduce のプログラミングが不要になるので、 MapReduce に詳しくない人でも Hadoop を使って分析することが可能になる。→ いままでのような、ユーザーが RDBMS を使って分析を行うということの延長線上にある。

・ Hive では一般のユーザーでも Hadoop のスケーラブルなところを活かせる。 cf. RDBMS の性能はスケーラブルになりにくい。シャーディングにすることも可能だが運用が面倒になる。 NoSQL はスケーラブルだが ( クエリは )一般のユーザーには難しい。

Page 26: Apache Hive 紹介

Copyright © Infoscience Corporation. All rights reserved.

参考文献

・”オライリーセミナー 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: GettingStartedhttps://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-InstallingHiv

efromaStableRelease・ 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