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

  • 2,275 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,275
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
73
Comments
0
Likes
10

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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