Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,539 views

Published on

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

Published in: Technology

オライリーセミナー 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 買いましょう、今すぐに!  

×