SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
Hiveハンズオン
「DevLOVE  ⻩黄⾊色い象使い」  
〜~養蜂編〜~  
2011-‐‑‒09-‐‑‒07
n3104
•能登 諭(のと さとし)
•Hadoop好きのJava使いです。
•twitter : @n3104
•株式会社トップゲート所属
Hadoopに関する経験
•とある企業様向けのシステムでHadoopの調
査、導入をやりました。
•MapReduceではなくHiveを導入。
•自前のクラスタではなくEMRを利用。
•EMRを操作するシェルとかも書きました。
Hive環境構築
Cloudera's Hadoop Demo VMを利用。
詳細は以下を参照。
https://docs.google.com/document/d/1OH2Snupp3xi-
UG3eLhYneOuOFsTZpLQrFddbbJKJ-zM/edit?hl=en_US&pli=1#
事前説明
Hiveとは
•MapReduceをSQLで書けるツール
•SQLライクに書けるだけであって、RDBMS
ではない
•データはHDFSに保存される
•コンパイラではなくインタプリタ
•ランタイムとしてHadoopだけでなくHive
自身も必要
http://www.slideshare.net/ragho/hive-icde-2010 より引用
System Architecture
•インターフェース
•Command Line Interface(CLI)
•Web Interface
•JDBC/ODBC
•Metastore
•スキーマ情報などを保持
•実際のデータはHDFS上のファイル
http://www.slideshare.net/namit_jain/hadoop-summit-2009-hive より引用
MapReduceとは
•分散処理のフレームワーク
•スケールアウト
•台数を増やすほど処理時間を短く出来る
•バッチ処理用
•最低でも30秒∼
MapReduceの
処理イメージ
http://www.slideshare.net/jsichi/hive-evolution-apachecon-2010 より引用
HDFSとは
•分散ファイルシステム
•Unixライクな権限管理の仕組みがある
http://www.slideshare.net/n3104/hadoop-6238342 より引用
Hiveのいいところ
•ファイルをテーブルとして扱える
•スキーマ定義が簡単にできる
•SQLが分かれば利用できる
•スケールアウト
•MapReduceの特性を引き継ぐ
Hiveにできないこと
•オンライン処理では利用できない
•1秒以内のレスポンスとかはまず無理
•トランザクション機能がない
•部分更新(update文/delete文)がない
•入力ファイルから出力ファイルを作っているだけ
•テーブル単位もしくはパーティション単位での
追加/総入れ替え/削除になる
今回のシステム構成
Cloudera's Hadoop Demo VM
client Hadoop
MapReduce

HDFS
localFileSyste

Hive

実行
入出力
upload/
download
まずはHDFS
ファイルの一覧表示
HDFS上のルートディレクトリをリスト表示
$ hadoop fs -ls /
構文
hadoop fs -ls <path>
ローカルからHDFSへ
ファイルをコピー
ローカルのlocalファイルをHDFSのホームディレク
トリ直下hdfsという名前でコピーする
$ touch local

$ hadoop fs -copyFromLocal local hdfs

$ hadoop fs -ls
構文
hadoop fs -copyFromLocal <localsrc...>
<hdfspath>
その他のコマンド
• 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 参照
HDFSのWebUI
• WebUIからfilesystemを参照できる。
• Cloudera's Hadoop Demo VMの場合
• Firefoxを起動
• ブックマークバーのNamenode statusを
開く
• Browse the filesystemのリンクを開く
本編スタート
CLIの起動と終了
起動(bash)
$ cd hive-0.7.1-bin

$ bin/hive
終了(cli)
hive> quit;
create table
テーブルの作成
create table hoge (k int, v string);
テーブルが作成されたことの確認
show tables;
テーブル定義の確認
describe hoge;

load data
テーブルにデータを投入
load data local inpath './examples/
files/kv1.txt' overwrite into table
hoge;
テーブルにデータが投入されたことを確認
select * from hoge limt 10;
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 参照
create table補足
• テーブル名とカラム名はcase insensitive
• データ型に桁数指定がない
• あくまでも実体はファイルでありHive側で
桁数を管理していない
データ型
• 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 参照
tableの実体はファイル
hogeテーブルの実体であるkv1.txtはどこに
あるのか
$ hadoop fs -lsr /user/hive
kv1.txtの内容を確認
$ hadoop fs -cat /user/hive/
warehouse/hoge/kv1.txt ¦ less
CLIからでもfsコマンドを
実行できる
CLIからhadoop fsに対応するdfsコマンドを
実行できる
dfs -lsr /user/hive;
その他、CLIで実行できるコマンドは以下を参
照。ただしCLI内ではパイプが使えない
https://cwiki.apache.org/confluence/display/Hive/LanguageManual
+Cli#LanguageManualCli-HiveinteractiveShellCommand
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;
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 参照
複数ファイルを扱うには
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;

パーティション
• テーブルディレクトリ内に作成できるサブディレクトリ
• いままで
• /hoge/kv1.txt
• /hoge/kv2.txt
• パーティションを利用
• /hoge/p1/kv1.txt
• /hoge/p2/kv2.txt
• パーティションを利用することで簡単に日単位でのデータ操作をしたり
出来る
パーティションの利用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;
パーティションの利用2
パーティションを指定して検索できる
select count(*) from piyo;

select count(*) from piyo where p =
'p1';
パーティションを指定して削除できる
alter table piyo drop partition (p='p1');

dfs -lsr /user/hive;
http://www.slideshare.net/jsichi/hive-evolution-apachecon-2010 より引用
物理データモデル
• テーブル
• HDFS上のディレクトリ
• スキーマ情報はMetastoreに保持
• パーティションの利用は任意
• パーティション
• テーブルのディレクトリのサブディレクトリ
• キーは複数指定できる
• partitioned by (id string, date string)
• ファイル
• HDFS上のファイル
• バケットを利用してファイル毎の内容を特定のカラムをキーにしてまとめることができる
HDFS以外も利用できる
• HBase
• https://cwiki.apache.org/confluence/
display/Hive/HBaseIntegration
• Amazon S3
• EMRを利用する際はS3を介してEMR側と
ファイルのやり取りをすることになる
CSVファイルを扱うには
create tableする際にrow formatを指定することでデリ
ミタを指定してテーブルを作成できる
create table csv (id int, name string) row
format delimited fields terminated by
'002c';
デフォルトのデリミタはCtrl-A(Asciiコード1)
Hiveにはデリミタ文字をエスケープする方法が用意され
ていないため、一般的に利用されていない文字をデリミタ
として採用している
正規表現も利用できる
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;
まとめ
•RDBMSではない
•テーブルの実体はファイル
•ファイルに対してスキーマ定義してSQLで
selectできる
•insertするとファイルが出力される
•テーブル定義によっていろいろなフォーマッ
トのファイルを透過的に扱える
付録
外部テーブル
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;

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 参照
sort
• order byはReducerが1つになるので普通
は使わない
• sort byはReducer単位ではソートされるが
全体ではソートされない
• cluster byを指定すると全体としてソートさ
れる
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy 参照
関数
•組み込み関数として基本的なものは提供され
ている
•show functions;
•describe function abs;
•自作もできる(UDF)
•作り方は象本第2版を読んで下さいw
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 参照
クエリの停止
• 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 参照
explain
• クエリの実行計画を表示する
• explain select count(*) from hoge;
• 作成中のクエリの構文チェックに使える
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain 参照
describe
formattedオプションをつけることでパーティ
ションやデリミタを確認できる
describe formatted hoge;

describe formatted piyo;

describe formatted csv;
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Show%2FDescribeStatements 参照
テストについて
•wyukawaさんのセッションに期待w
•私自身は目視で確認していました
書籍について
•Hadoop徹底入門
•オライリーHadoop第2版
•初版はHiveに関してはあまり書いていない
ので注意
これであなたも象使い(^^)

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

MapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知るMapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知る
 
楽天ネットワークエンジニアたちが目指す、次世代データセンターとは
楽天ネットワークエンジニアたちが目指す、次世代データセンターとは楽天ネットワークエンジニアたちが目指す、次世代データセンターとは
楽天ネットワークエンジニアたちが目指す、次世代データセンターとは
 
Hadoop and Kerberos
Hadoop and KerberosHadoop and Kerberos
Hadoop and Kerberos
 
Oracle Data Guard による高可用性
Oracle Data Guard による高可用性Oracle Data Guard による高可用性
Oracle Data Guard による高可用性
 
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識Hadoopの概念と基本的知識
Hadoopの概念と基本的知識
 
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
Apache Spark の紹介(前半:Sparkのキホン)
Apache Spark の紹介(前半:Sparkのキホン)Apache Spark の紹介(前半:Sparkのキホン)
Apache Spark の紹介(前半:Sparkのキホン)
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
 

Semelhante a Hiveハンズオン

Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
tamtam180
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
bigt23
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
AdvancedTechNight
 
Hadoopのインストール
HadoopのインストールHadoopのインストール
Hadoopのインストール
Noritada Shimizu
 

Semelhante a Hiveハンズオン (20)

オライリーセミナー Hive入門 #oreilly0724
オライリーセミナー Hive入門  #oreilly0724オライリーセミナー Hive入門  #oreilly0724
オライリーセミナー Hive入門 #oreilly0724
 
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
 
ゾウ使いへの第一歩
ゾウ使いへの第一歩ゾウ使いへの第一歩
ゾウ使いへの第一歩
 
Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
HDPをWindowsで動かしてみた
HDPをWindowsで動かしてみたHDPをWindowsで動かしてみた
HDPをWindowsで動かしてみた
 
CDH4.1オーバービュー
CDH4.1オーバービューCDH4.1オーバービュー
CDH4.1オーバービュー
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16
 
Tez on EMRを試してみた
Tez on EMRを試してみたTez on EMRを試してみた
Tez on EMRを試してみた
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
 
第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート
 
Hadoopことはじめ
HadoopことはじめHadoopことはじめ
Hadoopことはじめ
 
Hadoop事始め
Hadoop事始めHadoop事始め
Hadoop事始め
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
Hadoopのインストール
HadoopのインストールHadoopのインストール
Hadoopのインストール
 
Hadoop Source Code Reading #17
Hadoop Source Code Reading #17Hadoop Source Code Reading #17
Hadoop Source Code Reading #17
 

Mais de Satoshi Noto (11)

このサービスは俺に聞け勉強会(機械学習)
このサービスは俺に聞け勉強会(機械学習)このサービスは俺に聞け勉強会(機械学習)
このサービスは俺に聞け勉強会(機械学習)
 
読書会のすすめ
読書会のすすめ読書会のすすめ
読書会のすすめ
 
データ分析チームの振り返り
データ分析チームの振り返りデータ分析チームの振り返り
データ分析チームの振り返り
 
Amazon Machine Learning概要
Amazon Machine Learning概要Amazon Machine Learning概要
Amazon Machine Learning概要
 
大晦日のメッセージ配信の裏側
大晦日のメッセージ配信の裏側大晦日のメッセージ配信の裏側
大晦日のメッセージ配信の裏側
 
Fullbokをがっつり使ってみた
Fullbokをがっつり使ってみたFullbokをがっつり使ってみた
Fullbokをがっつり使ってみた
 
Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?
 
MapReduceプログラミング入門
MapReduceプログラミング入門MapReduceプログラミング入門
MapReduceプログラミング入門
 
Hadoop概要説明
Hadoop概要説明Hadoop概要説明
Hadoop概要説明
 
MapReduce入門
MapReduce入門MapReduce入門
MapReduce入門
 
ただいまHadoop勉強中
ただいまHadoop勉強中ただいまHadoop勉強中
ただいまHadoop勉強中
 

Hiveハンズオン