16
© SIOS Technology, Inc. All rights Reserved. 1. BigData解析基盤としての Treasure Data 2. HiveQLの周辺技術とTips サイオステクノロジー株式会社 クラウドソリューション部 2013年6月11日 髙橋 サイオステクノロジー株式会社

For blog hive_ql_on_treasuredata

Embed Size (px)

Citation preview

Page 1: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

1. BigData解析基盤としてのTreasure Data

2. HiveQLの周辺技術とTips

サイオステクノロジー株式会社

クラウドソリューション部

2013年6月11日

髙橋 達

サイオステクノロジー株式会社

Page 2: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

目的と目次

目 次

1. BigData解析基盤としてのTreasure Data

1. BigData解析基盤とは?

2. HiveQLの周辺技術とTips

1.~4. HiveQLの周辺技術

5.~11. HiveQLのTips

3. 発表のまとめ

2

Treasure DataとHiveQLに関する知識共有により, レポーティング作業の効率アップ

目 的

Page 3: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

1.1. BigData解析基盤とは?

3

BigData COLLECT STORE QUERY &

VISUALIZE ANALYSIS

SNSやセンサ,ログデータなど様々なデータを定期的・継続的

に収集

日々増え続けるデータの保管・

管理や、 可用性の保証

データ抽出・ 可視化を

行うための 計算リソースや、可視化ツールの

提供

データから有意義な結果の発見

Page 4: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.1. Hadoopによる一般的な解析基盤

HDFS

分散ファイルシステム

Hadoop MapReduce

並列分散処理フレームワーク

Hive

HiveQL

SQLライクな問い合わせ言語

Pig

PigLatin

データの処理フローを 記述するスクリプト

4

Hadoop Distributed File System (HDFS)

Hadoop MapReduce

Hive Pig

HiveQL PigLatin Java

利用 難易度 高

ユーザ

Page 5: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.2. MapReduce・Pig・Hiveの記述比較 例:単語の集計

Java For MapReduce

(コードの1/6程度抜粋)

Job job = new Job(conf, 'wordcount');

job.setJarByClass(WordCount.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

job.setMapperClass(Map.class);

job.setCombinerClass(Reduce.class);

job.setReducerClass(Reduce.class);

HiveQL

select s.word, count(*) from

(select explode(split(text, '[ ¥t]+')) word from hello) s group by s.word;

5

b = foreach a generate flatten(TOKENIZE(text)) as word;

c = group b by word;

d = foreach c generate group as word, COUNT(b) as count;

store d into ‘/output';

PigLatin

スクリプト引用:http://www.ne.jp/asahi/hishidama/home/tech/index.html

Page 6: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.3. MapReduceの概要

大規模データを複数ノードで並列分散処理するための プログラミング・パターン

Mapタスク・Reduceタスクの二段階でデータ処理

6

Map Reduce

Node1

Node2

Node3

佐藤, 1 鈴木, 1 高橋, 1

中村, 1 佐藤, 1 田中, 1

山本, 1 鈴木, 1 田中, 1

Node1

Node2

佐藤, 2 鈴木, 2 高橋, 1

中村, 1 田中, 2 山本, 1

Shuffle & Sort

データ集計例

入 力

出 力

苗字

佐藤

鈴木

高橋

中村

佐藤

田中

山本

鈴木

田中

苗字 件数

佐藤 2

鈴木 2

高橋 1

中村 1

田中 2

山本 1

Page 7: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.4. HiveとHiveQLの概要

Hive

MapReduceのラッパーのような存在

HiveQL

SQLライクなHiveのクエリ言語

7

SQL HiveQL

テーブル定義 CREATE TABLE

○ ○

データ入力 LOAD ○ ○

データ出力 INSERT ○ ○

データ抽出 SELECT ○ ○

データ並び替え ○ △

副問い合わせ ○ △

テーブルの結合 JOIN ○ △

△: SQLと文法が大きく異なる

Treasure Dataでは、 Queryではなく 別コマンドを用意

データ集計の効率的な処理のために MapReduceとHiveQLの知識が重要

Page 8: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.5. Treasure Dataにおけるデータ形式

二つのカラムに格納(’v’と’time’)

‘v’カラムには、MAP形式で格納

Key:v[‘host’], v[‘user’]

Value:’1.1.0.1’, ‘ichi’

カラムの参照

v[‘host’], v[‘user’], time

別名をカラム名として利用

v[‘host’] AS host

8

v time

{'host':'1.1.0.1','user':'ichi'} 1370420001

{'host':'1.1.0.2','user':'jiro'} 1370420010

{'host':'1.1.0.3','user':'sabu'} 1370420100

_c0

1.1.0.1

1.1.0.2

1.1.0.3

host

1.1.0.1

1.1.0.2

1.1.0.3

AS利用

AS未使用

Page 9: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.6. SELECT * と SELECT 項目指定

SELECT * FROM tbl

MapReduce処理を 実行しないで結果出力

Hiveがスキーマを基に 結果を出力

SELECT カラム指定 FROM tbl

MapReduce処理を 実行して結果出力

9

挙動に差異

• カラム指定より処理が速い • MapReduceの起動等に

時間消費 • データの確認用に利用

<おまけ> LIMITで結果の取得件数を制限可能 SELECT * FROM tbl LIMIT 1 結果) tblから1件のみ取得

Page 10: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.7. MapReduceの回数削減による効率化 重複カラムの除去でのLEFT SEMI JOIN

SELECT host AS host FROM (SELECT v[‘host’] AS host FROM tbl1) JOIN (SELECT v[‘host’] AS host FROM tbl2 GROUP BY host ) ON tbl1.host = tbl2.host

SELECT host AS host FROM (SELECT v[‘host’] AS host FROM tbl1) LEFT SEMI JOIN (SELECT v[‘host’] AS host

FROM tbl2) ON tbl1.host = tbl2.host

10

GROUP BYの利用 LEFT SEMI JOINの利用

v

{'host':'1.1.0.3‘, ‘user’:’taro’}

{'host':'1.1.0.1‘, ‘user’:’ichi’}

v time

{'host':'1.1.0.1‘} 1370420001

{'host':'1.1.0.1'} 1370420010

tbl1 tbl2

host

1.1.0.1

stage-1 : GROUP BY計算 stage-2 : JOIN計算

stage-1 : JOIN計算 処理数の削減

* 右テーブルのデータが左テーブル に存在する場合のみ利用可能

Page 11: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.8.テーブルをメモリへ展開する MAPJOINの利用

11

SELECT /*+MAPJOIN(tbl2)*/

host AS host FROM (SELECT v[‘host’] AS host FROM tbl1) LEFT SEMI JOIN (SELECT v[‘host’] AS host

FROM tbl2) ON tbl1.host = tbl2.host

SELECT host AS host FROM (SELECT v[‘host’] AS host FROM tbl1) LEFT SEMI JOIN (SELECT v[‘host’] AS host

FROM tbl2) ON tbl1.host = tbl2.host

MAPJOINの非利用 MAPJOINの利用

v

{'host':'1.1.0.3‘, ‘user’:’taro’}

{'host':'1.1.0.1‘, ‘user’:’ichi’}

v time

{'host':'1.1.0.1‘} 1370420001

{'host':'1.1.0.1'} 1370420010

tbl1 tbl2

host

1.1.0.1

stage-1 : JOIN計算 計算時間 小 →右テーブルをメモリ上に展開

stage-1 : JOIN計算 計算時間 大

* 右テーブルのデータがメモリに 収まりきるサイズであること

Page 12: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.9. 全体集計と個別集計

12

V

{‘user':‘taro‘, ‘cnt’:20’}

{‘user':‘ichi‘, ‘cnt’:’5’}

{‘user':‘ichi‘, ‘cnt’:’15’}

tbl

user count

NULL 40

taro 20

ichi 20

SELECT v[‘user’] AS user, SUM(v[‘cnt’]) AS count

FROM tbl

GROUP BY v[‘host’]

WITH ROLLUP

SELECT u AS user, SUM(z) AS count

FROM tbl LATERAL VIEW EXPLODE(ARRAY(v[‘user’], null)) e AS u group by u

ROLLUPの利用(Hive0.10未満) ROLLUPの利用 (Hive0.10以上)

*現在のTDでは利用不可 *v[‘user’]は NOT NULL

Page 13: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.10. Treasure Dataが提供するUDF (User Defined Functoins)

TD_X_RANK(keys)

ユーザ毎に番号付

時系列に並び替えることでパスの作成が可能

TD_TIME_RANGE(time, start_time, end_time)

WHERE句での時間による範囲指定

TD_TIME_ADD(time, ‘期間’)

時間の様々な指定が可能

N日後:’1d’, ‘2d’, ‘3d’,...

13

V

{‘user':‘taro‘, ‘ref’:’1.1.1.1’}

{‘user':‘ichi‘, ‘ref’:’1.1.1.2’}

{‘user':‘ichi‘, ‘ref’:’1.1.1.3’}

Rank User Ref

1 Taro 1.1.1.1

1 Ichi 1.1.1.2

2 Ichi 1.1.1.3

SELECT ... WHERE TD_TIME_RANGE( Time, ‘2013-04-01’, TD_TIME_ADD(‘2013-04-01’, ‘1d’)

Page 14: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.11. その他のポイント(1/2)

テーブル結合について

UNION ALLのみ利用可能 重複を含む全レコードの結合

結合するテーブル全体を副問い合わせにすること

JOIN ONのONを記述漏れは、CROSS JOINになる

ON句では以下の二つは利用不可 不等号での結合

ORによる二つの条件を用いた結合

正規表現について

LIKE = SQLのLIKE ワイルドカード:*,%,?,_,#,[文字リスト],...

RLIKEを用いると、Javaの正規表現を利用可能 ワイルドカード:LIKE + α

14

Page 15: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

2.11. その他のポイント(2/2)

関数情報

SHOW FUNCTIONS

関数の一覧を表示(UDFも含む)

DESC FUNCTION 関数名 DESC FUNCTION EXTENDED 関数名

関数の情報を表示、EXTENDEDで使用例も表示

15

Page 16: For blog hive_ql_on_treasuredata

© SIOS Technology, Inc. All rights Reserved.

3. 発表のまとめ

ビッグデータ解析基盤に求められる機能:

各製品における各機能の詳細な比較が必要

HiveQLのTips

SQLと違いはあまりない

MapReduceを意識することでクエリの効率化

LEFT SEMI JOINの利用

/*+ MAPJOIN(tbl) */の利用

全体集計と個別集計

UDFについて

16

COLLECT STORE QUERY & VISUALIZE ANALYSIS