Apache Hive 紹介

2,995
-1

Published on

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

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,995
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
26
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Apache Hive 紹介

  1. 1. Apache Hive インフォサイエンス株式会社 永江 哲朗 Copyright © Infoscience Corporation. All rights reserved.
  2. 2. Hive のことをおおまかに言うと … ユーザーが SQL に似たクエリ言語 HiveQL でクエリを書く。  ↓ Hive がそれを map/reduce のジョブに変換して Hadoop に実行させる。 浅く使う場合には、クエリを使うユーザーは内部構造をあまり知らなくていいとい うところは DBMS に似ています。 Copyright © Infoscience Corporation. All rights
  3. 3. Apache Hive の特徴 Apache Hive の特徴 ・ Hadoop 互換のファイルシステムに格納されたデータセットの分析を行う。 ・ map/reduce をサポートした SQL ライクな「 HiveQL 」という言語を用いる。 ・クエリの高速化のため、ビットマップインデックスを含めたインデックス機能も 実装している Copyright © Infoscience Corporation. All rights
  4. 4. Apache Hive の機能 Apache Hive の機能 ・高速化のためインデックスを作成して使用できる。 ・別の種類のストレージタイプが使える。たとえばプレーンテキスト、 RCFile, HBase など ・クエリ実行時の構文チェック時間を大幅に短縮するため、メタデータを RDBMS に格納する機能をもつ。 ・ Hadoop 環境に格納された圧縮データを扱う機能をもつ。 ・日付型や文字列型を扱ったり他のデータ操作を可能とする、組み込みユーザ定義 関数( UDF) が使える。組み込み関数で用意されていない機能もユーザが自作 UDF を作成することで対応できる。 ・ SQL ライクなクエリ言語 (HiveQL) 。これは内部的に Map/Reduce ジョブに変換 される。 Copyright © Infoscience Corporation. All rights
  5. 5. Hive のアーキテクチャ アーキテクチャ  ("Hadoop 第 3 版 " p.453 図 12-1 Hive のアーキテクチャ か ら抜粋 ) すべてのコマンドやクエリはドライバに送られます。ドライバは入力されたコマ ンドをコンパイルし、必要な演算処理の最適化を行って、 map/reduce の無閉路有 向グラフからなる実行計画を作成します。ドライバは map/reduce の job を Hadoop に実行させます。 Copyright © Infoscience Corporation. All rights
  6. 6. Hive のメタストア ・メタストア Hive がテーブルのスキーマやその他の システムメタデータを永続化するため の独立したリレーショナルデータベー スです。通常は MySQL を使用します。 ※ Derby Java アプリケーションに組み込むこと ができる軽量 SQL データベー ス。 Derby は、アプリケーションと同 じプロセス内で動作し、データをロー カルのファイルに書き込みます。   ("Hadoop 第 3 版 " p.454  図 12-2 メタストアの設定 から抜粋 ) Copyright © Infoscience Corporation. All rights
  7. 7. Hive のデータ型 プリミティブと複合型   プリミティブ : INT, DOUBLE など   複合型 : ARRAY, MAP, STRUCT (RDB にはありません ) ("Hadoop 第 3 版 " p.459 表 12-3 Hive のデータ型 から抜粋 ) Copyright © Infoscience Corporation. All rights
  8. 8. ファイルフォーマット (1) ファイルフォーマット TAB や空白はレコードの中でよく見られるので、区切り文字には制御文字を使う ことが多いようです。 区切り文字 説明 n テキストファイルでは各行がレコードになるので、改行 文字がレコードを区切ることになります。 ^A ( Control-A ) フィールド(列)同士を区切る。 CREATE TABLE 文で 明示的に指定する場合は、 8 進表記で 001 と書く。 ^B ARRAY や STRUCT の要素、あるいは MAP 中のキー / 値ペアを区切る。 CREATE TABLE 文で明示的に指定 する場合は、 8 進表記で 002 と書く。 ^C MAP 中のキー / 値ペアのキーと対応する値を区切る。 CREATE TABLE 文で明示的に指定する場合は、 8 進表 記で 003 と書く。 「プログラミング Hive 」 p.47 表 3-3 Hive におけるデフォルトのレコード及びフィールドの区切り文字 から抜粋 Copyright © Infoscience Corporation. All rights
  9. 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
  10. 10. 書き込み時のスキーマ適用と読み込み時のスキーマ適用 ● 書き込み時のスキーマ適用: RDBMS  読み込まれたデータがスキーマに則していなければ、そのデータのロードは拒否 されます。 ● 読み込み時のスキーマ適用: Hive  読み込み時点ではデータを確認せず、クエリの発行時に確認を行います。スキー マに即していないデータはクエリ発行時にエラーとなります。 メリット デメリット 書き込み時の スキーマ適用 クエリの実行パフォーマン データベースへのデータ スは高速になる。 のロードには時間がかか る。 読み込み時の スキーマ適用 初期のデータ読み込みはき クエリの実行が遅い。 わめて高速になる。 Copyright © Infoscience Corporation. All rights
  11. 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
  12. 12. Hive のパーティション •Hive は、テーブルをパーティション群として構成します。パーティションは、テ ーブルを、例えば日付のようなパーティション列の値に基づき、部分部分に大きく 分割する方法です。パーティションを使えば、データの断片群に対するクエリの実 行を高速化できます。 •パーティションは、テーブルの作成時に PARTITIONED BY 節で指定しま す。 PARTITIONED BY 節は、列の定義のリストをとります。 例 CREATE TABLE logs (ts BIGINT, line STRING) PARTITIONED BY (dt STRING, country STRING); 上記の場合、日付 ( 文字列 ) と国名でパーティションが 作られます ( 例 . 右図参照 ) 。 Copyright © Infoscience Corporation. All rights ("Hadoop 第 3 版 " p.464 より抜粋 )
  13. 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. 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. 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. 16. HiveQL : SELECT クエリの例 SELECT weekday, COUNT(*) FROM u_data_new GROUP BY weekday; このように、 SQL に似た構文が使用できます。 Copyright © Infoscience Corporation. All rights
  17. 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. 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. 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. 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. 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. 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. 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. 24. Impala, Presto Hive にはジョブの実行に時間がかかるという弱点があります。 Hive の有効性を受け、その問題を解決した Impara や Presto という OSS が開発さ れています。 ・ Impala Hive よりも高速。 map/reduce を使用しない。 耐障害性がない。 Cloudera により開発される。 ・ Presto アドホックなクエリの結果をインタラクティブに得ることに最適化。 map/reduce とは異なるアーキテクチャ。 Facebook により開発される。 Copyright © Infoscience Corporation. All rights
  25. 25. まとめ ・ Hadoop 互換のファイルシステムに格納されたデータセットの分析を行う。 ・ map/reduce をサポートした SQL ライクな「 HiveQL 」という言語を用いる。 ・ Hadoop を使ったクエリで mapreduce のプログラミングが不要になるの で、 MapReduce に詳しくない人でも Hadoop を使って分析することが可能になる 。 → いままでのような、ユーザーが RDBMS を使って分析を行うということの延長 線上にある。 ・ Hive では一般のユーザーでも Hadoop のスケーラブルなところを活かせる。 cf. RDBMS の性能はスケーラブルになりにくい。シャーディングにすることも可 能だが運用が面倒になる。 NoSQL はスケーラブルだが ( クエリは ) 一般のユーザ ーには難しい。 Copyright © Infoscience Corporation. All rights
  26. 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

×