オライリーセミナー Hive入門 #oreilly0724
-
Upload
cloudera-japan -
Category
Technology
-
view
2.594 -
download
0
description
Transcript of オライリーセミナー Hive入門 #oreilly0724
1
Hiveの正しい使い方 Cloudera 株式会社 嶋内 翔
自己紹介
• 嶋内 翔(しまうち しょう) • 2011年4月にClouderaの最初の日本人社員として入
社 • テクニカルサポート業務をメインに、日本における技
術に関係する業務全般を担当
2
Apache Hadoop
Hadoopは、 1. 単一サーバで処理しきれないほど大量なデータを 2. コモディティサーバを並べることによって 3. 分散処理及び保存するための 4. オープンソースソフトウェアです
3
Hadoopシステムの全体構成
4
Hadoop
外部システム
RDBMS
Webサーバ等の ログを生成するサーバ
携帯端末の 通信ログ
APIアクセス
ログ収集
テーブルごと インポート
分散バッチ処理
機械学習
外部システム
APIアクセス
ユーザ
DWH
テーブルごと エクスポート
BIツール + JDBC/ODBC
検索
SQL
Hadoopのシステム全体構成
5
Hadoop
外部システム
RDBMS
Webサーバ等の ログを生成するサーバ
携帯端末の 通信ログ
APIアクセス
ログ収集
テーブルごと インポート
分散バッチ処理
機械学習
外部システム
APIアクセス
ユーザ
DWH
テーブルごと エクスポート
BIツール + JDBC/ODBC
検索
SQL データの取り込み
データの活用 分析 探索 提供
データの処理
データの 保存
Hadoopシステムの全体構成
6
Hadoop
外部システム
RDBMS
Webサーバ等の ログを生成するサーバ
携帯端末の 通信ログ
APIアクセス
ログ収集
テーブルごと インポート
分散バッチ処理
機械学習
外部システム
APIアクセス
ユーザ
DWH
テーブルごと エクスポート
BIツール + JDBC/ODBC
検索
SQL
Apache Hive (Hive本1章)
• Hadoop上でMapReduceを実行してくれるSQL方言HiveQLを提供する
• データウェアハウスアプリケーションに最も適している • データが更新されない • 高速なレスポンスが要求されない
7
スキーマ・オン・リード (Hive本3.4)
• Hiveの最も強力な「概念」の一つ • データを読むときにスキーマを使う • 自由にデータが投入可能になる
8
Hadoop
CSV テキスト
テーブルA
テーブルB ログ
Hiveのスキーマ作成クエリの例
CREATE EXTERNAL TABLE tweets ( id BIGINT, created_at STRING, favorited BOOLEAN, retweet_count INT, retweeted_status STRUCT< text:STRING, user:STRUCT<screen_name:STRING,name:STRING>> ) PARTITIONED BY (datehour INT) ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe' LOCATION '/user/flume/tweets'
9
Hiveのスキーマ作成クエリの例
CREATE EXTERNAL TABLE tweets ( id BIGINT, created_at STRING, favorited BOOLEAN, retweet_count INT, retweeted_status STRUCT< text:STRING, user:STRUCT<screen_name:STRING,name:STRING>> ) PARTITIONED BY (datehour INT) ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe' LOCATION '/user/flume/tweets'
10
外部テーブル
データのパス
外部テーブル (Hive本4.3.2)
• ファイルシステム上にあるデータをそのままテーブルとして扱える
• 他のツールとデータを共有することも簡単にできる
11
CSV
/user/sho/super_cool_web_service/access_log
Hive テーブルA MapReduce Pig
CSV CSV
外部テーブル (Hive本4.3.2)
• テーブルを削除しても、データは消えない
12
CSV
Hive テーブルA MapReduce Pig
CSV CSV
/user/sho/super_cool_web_service/access_log
影響なし!
Hiveのスキーマ作成クエリの例
CREATE EXTERNAL TABLE tweets ( id BIGINT, created_at STRING, favorited BOOLEAN, retweet_count INT, retweeted_status STRUCT< text:STRING, user:STRUCT<screen_name:STRING,name:STRING>> ) PARTITIONED BY (datehour INT) ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe' LOCATION '/user/flume/tweets'
13
コレクションデータ型
コレクションデータ型(Hive本3.2)
単なる STRING や INT だけでなく、より複雑な型もカラムとして定義可能
14
型 定義例 参照例
STRUCT user STRUCT<id:INT, name:STRING>
user.id user.name それぞれINT、STRINGの値を取り出す
MAP user MAP<STRING, STRING> user[‘id’] user[‘name’] 中身はどちらもSTRING
ARRAY user ARRAY<STRING> user[0] user[1] Hive本の例では添字が抜けているので注意
UNIONTYPE user UNIONTYPE<INT, STRING> user (そのまま) 列挙した型のいずれを格納することも可能 (Hive本には訳注のみ)
Hiveのスキーマ作成クエリの例
CREATE EXTERNAL TABLE tweets ( id BIGINT, created_at STRING, favorited BOOLEAN, retweet_count INT, retweeted_status STRUCT< text:STRING, user:STRUCT<screen_name:STRING,name:STRING>> ) PARTITIONED BY (datehour INT) ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe' LOCATION '/user/flume/tweets'
15
パーティション
パーティション(Hive本4.4)
テーブルをパーティション単位に区切ることが可能 ファイルシステム上は、別ディレクトリに配置される
16
/user/hive/warehouse/access_log
/country=US
/country=JP
/country=CN
/dt=20130721
/dt=20130722
/dt=20130723
/dt=20130724
テーブル名 access_log パーティション country パーティション dt
パーティション(Hive本4.4)
特定のパーティションだけを読み込むことが可能
17
/user/hive/warehouse/access_log
/country=US
/country=JP
/country=CN
/dt=20130721
/dt=20130722
/dt=20130723
/dt=20130724
SELECT * FROM access_log WHERE country = ‘JP’ and dt = ‘20130724’
Hiveのスキーマ作成クエリの例
CREATE EXTERNAL TABLE tweets ( id BIGINT, created_at STRING, favorited BOOLEAN, retweet_count INT, retweeted_status STRUCT< text:STRING, user:STRUCT<screen_name:STRING,name:STRING>> ) PARTITIONED BY (datehour INT) ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe' LOCATION '/user/flume/tweets'
18
SerDe
SerDe (Hive本15.4)
• Serializer / Deserializer の略。「さーでぃー」と読む • あらゆるデータをHiveレコードに変換するためのイン
タフェースを提供する • 組み込みSerDeもいくつかある
• RegexSerDeなど
• テキスト以外のバイナリデータなども、カスタムSerDeを実装することで読み込むことは可能 • ただしJavaのクラスを実装する必要がある
19
RegexSerDeを使った Apacheログの読み込みの例(Hive wikiより)
20
CREATE TABLE apachelog ( host STRING, idenkty STRING, user STRING, kme STRING, request STRING, status STRING, size STRING, referer STRING, agent STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "([^]*) ([^]*) ([^]*) (-‐|\\[^\\]*\\]) ([^ \"]*|\"[^\"]*\") (-‐|[0-‐9]*) (-‐|[0-‐9]*)(?: ([^ \"]*|\".*\") ([^ \"]*|\".*\"))?", "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s" ) STORED AS TEXTFILE;
21
Impala
Cloudera Impala(Hive本付録B)
• オープンソースの低レイテンシSQLエンジン • HiveQLベース • Hive の文法はほぼそのまま使えます • スキーマオンリードの概念はそのまま生かせます
• C++ • MapReduceは使わない • HDFS や HBase 上のデータを処理可能 • 非常に高速
• 大体 x10〜30 • 遅い時でも x2〜3
Cloudera Impala(Hive本付録B)
• オープンソースの低レイテンシSQLエンジン • HiveQLベース • Hive の文法はほぼそのまま使えます
• C++ • MapReduceは使わない • HDFS や HBase 上のデータを処理可能 • 非常に高速
• 大体 x10〜30 • 遅い時でも x2〜3
• 私が見たことある最速は x97
Cloudera Impala(Hive本付録B)
• 利点 • ひたすら速い
• 欠点 • 耐障害性がない • UDFがない • etc..
• Hive の置き換えではありません!
Impalaの賢い使い方
• まずはImpalaで色々試す • 使えそうなクエリを発見したら、Hiveで定期実行
25
Impala
Hadoop
Hive
色々なクエリを試して 実験する 業務処理はHiveで
26
まとめ
まとめ
• HiveはSQLを使ってHadoopを使える、分析用プログラムです
• Impalaは高速ですがHiveより機能が少ないです • 正しく使うには、きちんとしたドキュメントが必要です
27
まとめ
• HiveはSQLを使ってHadoopを使える、分析用プログラムです
• Impalaは高速ですがHiveより機能が少ないです • 正しく使うには、きちんとしたドキュメントが必要です
28
まとめ
• HiveはSQLを使ってHadoopを使える、分析用プログラムです
• Impalaは高速ですがHiveより機能が少ないです • 正しく使うには、きちんとしたドキュメントが必要です
29
買いましょう、今すぐに!