Hiveハンズオン

3,866 views

Published on

0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,866
On SlideShare
0
From Embeds
0
Number of Embeds
916
Actions
Shares
0
Downloads
33
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

Hiveハンズオン

  1. 1. Hiveハンズオン 「DevLOVE  ⻩黄⾊色い象使い」   〜~養蜂編〜~   2011-‐‑‒09-‐‑‒07
  2. 2. n3104 •能登 諭(のと さとし) •Hadoop好きのJava使いです。 •twitter : @n3104 •株式会社トップゲート所属
  3. 3. Hadoopに関する経験 •とある企業様向けのシステムでHadoopの調 査、導入をやりました。 •MapReduceではなくHiveを導入。 •自前のクラスタではなくEMRを利用。 •EMRを操作するシェルとかも書きました。
  4. 4. Hive環境構築 Cloudera's Hadoop Demo VMを利用。 詳細は以下を参照。 https://docs.google.com/document/d/1OH2Snupp3xi- UG3eLhYneOuOFsTZpLQrFddbbJKJ-zM/edit?hl=en_US&pli=1#
  5. 5. 事前説明
  6. 6. Hiveとは •MapReduceをSQLで書けるツール •SQLライクに書けるだけであって、RDBMS ではない •データはHDFSに保存される •コンパイラではなくインタプリタ •ランタイムとしてHadoopだけでなくHive 自身も必要
  7. 7. http://www.slideshare.net/ragho/hive-icde-2010 より引用
  8. 8. System Architecture •インターフェース •Command Line Interface(CLI) •Web Interface •JDBC/ODBC •Metastore •スキーマ情報などを保持 •実際のデータはHDFS上のファイル
  9. 9. http://www.slideshare.net/namit_jain/hadoop-summit-2009-hive より引用
  10. 10. MapReduceとは •分散処理のフレームワーク •スケールアウト •台数を増やすほど処理時間を短く出来る •バッチ処理用 •最低でも30秒∼
  11. 11. MapReduceの 処理イメージ http://www.slideshare.net/jsichi/hive-evolution-apachecon-2010 より引用
  12. 12. HDFSとは •分散ファイルシステム •Unixライクな権限管理の仕組みがある http://www.slideshare.net/n3104/hadoop-6238342 より引用
  13. 13. Hiveのいいところ •ファイルをテーブルとして扱える •スキーマ定義が簡単にできる •SQLが分かれば利用できる •スケールアウト •MapReduceの特性を引き継ぐ
  14. 14. Hiveにできないこと •オンライン処理では利用できない •1秒以内のレスポンスとかはまず無理 •トランザクション機能がない •部分更新(update文/delete文)がない •入力ファイルから出力ファイルを作っているだけ •テーブル単位もしくはパーティション単位での 追加/総入れ替え/削除になる
  15. 15. 今回のシステム構成 Cloudera's Hadoop Demo VM client Hadoop MapReduce
 HDFS
localFileSyste
 Hive
 実行 入出力 upload/ download
  16. 16. まずはHDFS
  17. 17. ファイルの一覧表示 HDFS上のルートディレクトリをリスト表示 $ hadoop fs -ls / 構文 hadoop fs -ls <path>
  18. 18. ローカルからHDFSへ ファイルをコピー ローカルのlocalファイルをHDFSのホームディレク トリ直下hdfsという名前でコピーする $ touch local
 $ hadoop fs -copyFromLocal local hdfs
 $ hadoop fs -ls 構文 hadoop fs -copyFromLocal <localsrc...> <hdfspath>
  19. 19. その他のコマンド • hadoop fs -lsr <path> • hadoop fs -cat <path> • hadoop fs -mkdir <path> • hadoop fs -rm <path> • hadoop fs -rmr <path> • hadoop fs -help http://hadoop.apache.org/common/docs/current/file_system_shell.html 参照
  20. 20. HDFSのWebUI • WebUIからfilesystemを参照できる。 • Cloudera's Hadoop Demo VMの場合 • Firefoxを起動 • ブックマークバーのNamenode statusを 開く • Browse the filesystemのリンクを開く
  21. 21. 本編スタート
  22. 22. CLIの起動と終了 起動(bash) $ cd hive-0.7.1-bin
 $ bin/hive 終了(cli) hive> quit;
  23. 23. create table テーブルの作成 create table hoge (k int, v string); テーブルが作成されたことの確認 show tables; テーブル定義の確認 describe hoge;

  24. 24. load data テーブルにデータを投入 load data local inpath './examples/ files/kv1.txt' overwrite into table hoge; テーブルにデータが投入されたことを確認 select * from hoge limt 10;
  25. 25. select kカラムで並べ替える select * from hoge order by k limit 10; group byやcountも普通に使える select k, count(k) from hoge group by k order by k limit 10; https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 参照
  26. 26. create table補足 • テーブル名とカラム名はcase insensitive • データ型に桁数指定がない • あくまでも実体はファイルでありHive側で 桁数を管理していない
  27. 27. データ型 • primitive • TINYINT - 1 byte integer • SMALLINT - 2 byte integer • INT - 4 byte integer • BIGINT - 8 byte integer • FLOAT - single precision • DOUBLE - Double precision • BOOLEAN - TRUE/FALSE • STRING - 文字列 • complex • Maps (key-value tuples) • Arrays (indexable lists) • Structs https://cwiki.apache.org/confluence/display/Hive/Tutorial#Tutorial-TypeSystem 参照
  28. 28. tableの実体はファイル hogeテーブルの実体であるkv1.txtはどこに あるのか $ hadoop fs -lsr /user/hive kv1.txtの内容を確認 $ hadoop fs -cat /user/hive/ warehouse/hoge/kv1.txt ¦ less
  29. 29. CLIからでもfsコマンドを 実行できる CLIからhadoop fsに対応するdfsコマンドを 実行できる dfs -lsr /user/hive; その他、CLIで実行できるコマンドは以下を参 照。ただしCLI内ではパイプが使えない https://cwiki.apache.org/confluence/display/Hive/LanguageManual +Cli#LanguageManualCli-HiveinteractiveShellCommand
  30. 30. drop table create tableするとディレクトリが出来る create table fuga (k int, v string);
 dfs -lsr /user/hive; load data localするとローカルのファイルがHDFSにコピーされる load data local inpath './examples/files/kv1.txt' overwrite into table fuga;
 dfs -lsr /user/hive; drop tableするとディレクトリが削除される drop table fuga;
 dfs -lsr /user/hive;
  31. 31. insert overwrite もう一度fugaテーブルを作りhogeテーブルの中身をfugaテーブルにinsertする create table fuga (k int, v string);
 insert overwrite table fuga select * from hoge limit 10;
 select * from fuga; fugaテーブルの実体もファイル dfs -lsr /user/hive;
 dfs -cat /user/hive/*/fuga/*; hive0.7まではoverwriteは必須オプション。そのため、insertするとテーブル の中身が総入れ替えとなる 0.8でinsert intoが実装され、追記ができるようになるらしい
 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML 参照
  32. 32. 複数ファイルを扱うには load data localする際にoverwriteオプションを つけないでおくと既存のディレクトリを削除しなくな るためファイルを追加できる select count(*) from hoge;
 load data local inpath './examples/ files/kv2.txt' into table hoge;
 select count(*) from hoge;
 dfs -lsr /user/hive;

  33. 33. パーティション • テーブルディレクトリ内に作成できるサブディレクトリ • いままで • /hoge/kv1.txt • /hoge/kv2.txt • パーティションを利用 • /hoge/p1/kv1.txt • /hoge/p2/kv2.txt • パーティションを利用することで簡単に日単位でのデータ操作をしたり 出来る
  34. 34. パーティションの利用1 create tableする際にpartitioned byを足すことでパーティションを利用 するテーブルを作成できる create table piyo (k int, v string) partitioned by (p string);
 dfs -lsr /user/hive; load data する際にパーティションを指定する load data local inpath './examples/files/kv1.txt' overwrite into table piyo partition (p='p1');
 dfs -lsr /user/hive;
 load data local inpath './examples/files/kv2.txt' overwrite into table piyo partition (p='p2');
 dfs -lsr /user/hive;
  35. 35. パーティションの利用2 パーティションを指定して検索できる select count(*) from piyo;
 select count(*) from piyo where p = 'p1'; パーティションを指定して削除できる alter table piyo drop partition (p='p1');
 dfs -lsr /user/hive;
  36. 36. http://www.slideshare.net/jsichi/hive-evolution-apachecon-2010 より引用
  37. 37. 物理データモデル • テーブル • HDFS上のディレクトリ • スキーマ情報はMetastoreに保持 • パーティションの利用は任意 • パーティション • テーブルのディレクトリのサブディレクトリ • キーは複数指定できる • partitioned by (id string, date string) • ファイル • HDFS上のファイル • バケットを利用してファイル毎の内容を特定のカラムをキーにしてまとめることができる
  38. 38. HDFS以外も利用できる • HBase • https://cwiki.apache.org/confluence/ display/Hive/HBaseIntegration • Amazon S3 • EMRを利用する際はS3を介してEMR側と ファイルのやり取りをすることになる
  39. 39. CSVファイルを扱うには create tableする際にrow formatを指定することでデリ ミタを指定してテーブルを作成できる create table csv (id int, name string) row format delimited fields terminated by '002c'; デフォルトのデリミタはCtrl-A(Asciiコード1) Hiveにはデリミタ文字をエスケープする方法が用意され ていないため、一般的に利用されていない文字をデリミタ として採用している
  40. 40. 正規表現も利用できる CREATE TABLE accesslog(
 host STRING, identity STRING, user STRING, time 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; load data local inpath './examples/files/apache.access.log' into table accesslog;
 load data local inpath './examples/files/apache.access.2.log' into table accesslog;
 select * from accesslog;
  41. 41. まとめ •RDBMSではない •テーブルの実体はファイル •ファイルに対してスキーマ定義してSQLで selectできる •insertするとファイルが出力される •テーブル定義によっていろいろなフォーマッ トのファイルを透過的に扱える
  42. 42. 付録
  43. 43. 外部テーブル create tableする際にexternal句を指定すると外部テーブルを作成できる create external table ext (k int, v string) location '/user/cloudera/ ext';
 dfs -lsr /user/cloudera; extディレクトリにファイルを追加すると参照できるようになる load data local inpath './examples/files/kv1.txt' overwrite into table ext;
 select count(*) from ext;
 dfs -lsr /user/cloudera; 外部テーブルはdrop tableしてもファイルは削除されない drop table ext;
 dfs -lsr /user/cloudera;

  44. 44. join 普通に使える select t1.k, t1.v, t2.v from hoge t1 join piyo t2 on (t1.k = t2.k) limit 20; where句の後ろに複数のテーブル名を書く方法 はサポートしていない https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins 参照
  45. 45. sort • order byはReducerが1つになるので普通 は使わない • sort byはReducer単位ではソートされるが 全体ではソートされない • cluster byを指定すると全体としてソートさ れる https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy 参照
  46. 46. 関数 •組み込み関数として基本的なものは提供され ている •show functions; •describe function abs; •自作もできる(UDF) •作り方は象本第2版を読んで下さいw https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 参照
  47. 47. クエリの停止 • Ctrl+Cでは止められない • CLIのプロセスが止まるだけで、MapReduceジョブは 止まらない • 止めるにはクエリ実行時にCLIに表示されるKill Command を実行する • Kill Command = /usr/lib/hadoop-0.20/bin/ hadoop job - Dmapred.job.tracker=localhost:8021 -kill job_201109032126_0009 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins 参照
  48. 48. explain • クエリの実行計画を表示する • explain select count(*) from hoge; • 作成中のクエリの構文チェックに使える https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain 参照
  49. 49. describe formattedオプションをつけることでパーティ ションやデリミタを確認できる describe formatted hoge;
 describe formatted piyo;
 describe formatted csv; https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Show%2FDescribeStatements 参照
  50. 50. テストについて •wyukawaさんのセッションに期待w •私自身は目視で確認していました
  51. 51. 書籍について •Hadoop徹底入門 •オライリーHadoop第2版 •初版はHiveに関してはあまり書いていない ので注意
  52. 52. これであなたも象使い(^^)

×