オライリーセミナー Hive入門 #oreilly0724

3,531 views
3,278 views

Published on

2013/07/24 に「『プログラミング Hive』 『Hadoop 第3版』刊行記念Hadoopセミナー」で発表した内容です。
http://connpass.com/event/2944/

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

No Downloads
Views
Total views
3,531
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
92
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

オライリーセミナー Hive入門 #oreilly0724

  1. 1. 1 Hiveの正しい使い方   Cloudera  株式会社   嶋内 翔  
  2. 2. 自己紹介   •  嶋内 翔(しまうち しょう)   •  2011年4月にClouderaの最初の日本人社員として入 社   •  テクニカルサポート業務をメインに、日本における技 術に関係する業務全般を担当   2
  3. 3. Apache  Hadoop   Hadoopは、   1.  単一サーバで処理しきれないほど大量なデータを   2.  コモディティサーバを並べることによって   3.  分散処理及び保存するための   4.  オープンソースソフトウェアです   3
  4. 4. Hadoopシステムの全体構成   4 Hadoop   外部システム   RDBMS   Webサーバ等の   ログを生成するサーバ   携帯端末の   通信ログ   APIアクセス   ログ収集   テーブルごと   インポート   分散バッチ処理   機械学習   外部システム   APIアクセス   ユーザ   DWH   テーブルごと   エクスポート   BIツール   +  JDBC/ODBC   検索   SQL  
  5. 5. Hadoopのシステム全体構成   5 Hadoop   外部システム   RDBMS   Webサーバ等の   ログを生成するサーバ   携帯端末の   通信ログ   APIアクセス   ログ収集   テーブルごと   インポート   分散バッチ処理   機械学習   外部システム   APIアクセス   ユーザ   DWH   テーブルごと   エクスポート   BIツール   +  JDBC/ODBC   検索   SQL  データの取り込み   データの活用   分析   探索   提供   データの処理   データの   保存  
  6. 6. Hadoopシステムの全体構成   6 Hadoop   外部システム   RDBMS   Webサーバ等の   ログを生成するサーバ   携帯端末の   通信ログ   APIアクセス   ログ収集   テーブルごと   インポート   分散バッチ処理   機械学習   外部システム   APIアクセス   ユーザ   DWH   テーブルごと   エクスポート   BIツール   +  JDBC/ODBC   検索   SQL  
  7. 7. Apache  Hive  (Hive本1章)   •  Hadoop上でMapReduceを実行してくれるSQL方言 HiveQLを提供する   •  データウェアハウスアプリケーションに最も適してい る   •  データが更新されない   •  高速なレスポンスが要求されない   7
  8. 8. スキーマ・オン・リード  (Hive本3.4)   •  Hiveの最も強力な「概念」の一つ   •  データを読むときにスキーマを使う   •  自由にデータが投入可能になる   8 Hadoop   CSV   テキスト   テーブルA   テーブルB  ログ  
  9. 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'   9
  10. 10. 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 外部テーブル   データのパス  
  11. 11. 外部テーブル  (Hive本4.3.2)   •  ファイルシステム上にあるデータをそのままテーブルとして扱 える •  他のツールとデータを共有することも簡単にできる   11 CSV   /user/sho/super_cool_web_service/access_log   Hive   テーブルA   MapReduce   Pig   CSV  CSV  
  12. 12. 外部テーブル  (Hive本4.3.2)   •  テーブルを削除しても、データは消えない   12 CSV   Hive   テーブルA   MapReduce   Pig   CSV  CSV   /user/sho/super_cool_web_service/access_log   影響なし!  
  13. 13. 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 コレクションデータ型  
  14. 14. コレクションデータ型(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本には訳注のみ)  
  15. 15. 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 パーティション  
  16. 16. パーティション(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  
  17. 17. パーティション(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’  
  18. 18. 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  
  19. 19. SerDe  (Hive本15.4)   •  Serializer  /  Deserializer  の略。「さーでぃー」と読む   •  あらゆるデータをHiveレコードに変換するためのイン タフェースを提供する   •  組み込みSerDeもいくつかある   •  RegexSerDeなど   •  テキスト以外のバイナリデータなども、カスタム SerDeを実装することで読み込むことは可能   •  ただしJavaのクラスを実装する必要がある   19
  20. 20. 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. 21. 21 Impala  
  22. 22. Cloudera  Impala(Hive本付録B)   •  オープンソースの低レイテンシSQLエンジン   •  HiveQLベース   •  Hive  の文法はほぼそのまま使えます   •  スキーマオンリードの概念はそのまま生かせます   •  C++     •  MapReduceは使わない   •  HDFS  や HBase  上のデータを処理可能   •  非常に高速   •  大体  x10〜30   •  遅い時でも  x2〜3      
  23. 23. Cloudera  Impala(Hive本付録B)   •  オープンソースの低レイテンシSQLエンジン   •  HiveQLベース   •  Hive  の文法はほぼそのまま使えます   •  C++     •  MapReduceは使わない   •  HDFS  や HBase  上のデータを処理可能   •  非常に高速   •  大体  x10〜30   •  遅い時でも  x2〜3   •  私が見たことある最速は x97    
  24. 24. Cloudera  Impala(Hive本付録B)   •  利点   •  ひたすら速い   •  欠点   •  耐障害性がない   •  UDFがない   •  etc..   •  Hive  の置き換えではありません!  
  25. 25. Impalaの賢い使い方   •  まずはImpalaで色々試す   •  使えそうなクエリを発見したら、Hiveで定期実行   25 Impala   Hadoop   Hive   色々なクエリを試して   実験する   業務処理はHiveで  
  26. 26. 26 まとめ  
  27. 27. まとめ   •  HiveはSQLを使ってHadoopを使える、分析用プログ ラムです   •  Impalaは高速ですがHiveより機能が少ないです   •  正しく使うには、きちんとしたドキュメントが必要です   27
  28. 28. まとめ   •  HiveはSQLを使ってHadoopを使える、分析用プログ ラムです   •  Impalaは高速ですがHiveより機能が少ないです   •  正しく使うには、きちんとしたドキュメントが必要です   28
  29. 29. まとめ   •  HiveはSQLを使ってHadoopを使える、分析用プログ ラムです   •  Impalaは高速ですがHiveより機能が少ないです   •  正しく使うには、きちんとしたドキュメントが必要です   29 買いましょう、今すぐに!  

×