27. Hive
(p260)
• テーブルの作成とデータのロード
$
build/dist/bin/hive
Hive
history
file=/tmp/larsgeorge/hive_job_log_larsgeorge_201105251455_2009910117.txt
hive>
CREATE
TABLE
pokes
(foo
INT,
bar
STRING);
OK
Time
taken:
3.381
seconds
hive>
LOAD
DATA
LOCAL
INPATH
'/opt/hive-‐0.7.0/examples/files/kv1.txt'
OVERWRITE
INTO
TABLE
pokes;
Copying
data
from
file:/opt/hive-‐0.7.0/examples/files/kv1.txt
Copying
file:
file:/opt/hive-‐0.7.0/examples/files/kv1.txt
Loading
data
to
table
default.pokes
Deleted
file:/user/hive/warehouse/pokes
OK
Time
taken:
0.266
seconds
28. Hive
(p260)
• Hbaseテーブルとのマッピング
– SERDEPROPERTIES:
• “Hbase.columns.mapping”=“:key,cf1:val”
– Hiveの”key”カラムをhbaseのrowKeyにする
– TBLEPROPERTIES:
• “hbase.table.name”=“hbase_table_1”
– Hiveのテーブル名”hbase_table_1”
– HbaseとHiveで異なった名前の時のみ必要
hive>
CREATE
TABLE
hbase_table_1(key
int,
value
string)
STORED
BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH
SERDEPROPERTIES
("hbase.columns.mapping"
=
":key,cf1:val")
TBLPROPERTIES
("hbase.table.name"
=
"hbase_table_1");
OK
Time
taken:
0.144
seconds
29. Hive
(p261)
• HiveテーブルpokesからHbaseのテーブルへのデータ
のロード
– pokes.foo
-‐>
rowKey
– pokes.bar
-‐>
hbase
“cf:val”
• エラーが出たらlocalモードでやるとよい(Hive
v0.70)
– Hive>
SET
mapred.job.tracker=local
hive>
INSERT
OVERWRITE
TABLE
hbase_table_1
SELECT
*
FROM
pokes;
Total
MapReduce
jobs
=
1
Launching
Job
1
out
of
1
Number
of
reduce
tasks
is
set
to
0
since
there's
no
reduce
operator
Execu8on
log
at:
/tmp/larsgeorge/larsgeorge_20110525152020_de5f67d1-‐9411-‐446f-‐99bb-‐35621e1b259d.log
Job
running
in-‐process
(local
Hadoop)
2011-‐05-‐25
15:20:31,031
null
map
=
100%,
reduce
=
0%
Ended
Job
=
job_local_0001
OK
Time
taken:
3.925
seconds
30. Hive
(p261-‐262)
• Hiveのpokes
テーブルとhbase_table_1
テーブル
のCount
– Hbaseのテーブルのcountが100以上少ないのは、
Hbaseにロードした時にrowKeyが上書きされたため
hive>
select
count(*)
from
pokes;
…
500
Time
taken:
3.627
seconds
hive>
drop
table
pokes;
OK
hive>
select
count(*)
from
hbase_table_1;
Time
taken:
0.741
seconds
…
309
hive>
drop
table
hbase_table_1;
Time
taken:
4.542
seconds
OK
Time
taken:
3.132
seconds
hive>
select
count(dis8nct
foo)
from
pokes;
…
309
Time
taken:
3.5325
seconds
35. Pig(p.264,
265)
• Exciteの検索ログファイルのHbaseテーブルへのSTORE
– Tuple:
user
ID,
8mestamp,
search
term
– rowKey:
user
ID
と
8mestamp
の複合キー
• Keyをユニークにするため
– STOREはMRジョブをsubmitする
• colfam1:query
にsearch
termを保存
$
cat
/usr/local/pig/tutorial/data/excite-‐small.log
|
head
-‐n
2
2A9EABFB35F5B954
970916105432
+md
foods
+proteins
BED75271605EBD0C
970916001949
yahoo
chat
grunt>
raw
=
LOAD
'/usr/local/pig/tutorial/data/excite-‐small.log'
USING
PigStorage('t')
AS
(user,
8me,
query);
T
=
FOREACH
raw
GENERATE
CONCAT(CONCAT(user,
'u0000'),
8me),
query;
STORE
T
INTO
'excite'
USING
org.apache.pig.backend.hadoop.hbase.HBaseStorage('colfam1:query');
36. Pig(p.266)
• HbaseのexciteテーブルのLOAD (その1)
– rowKeyを最初のフィールドとする
– AS()でPigの文字列型で取得するように指定
• デフォルトはbytearray
grunt>
R
=
LOAD
'excite'
USING
org.apache.pig.backend.hadoop.hbase.HBaseStorage('colfam1:query',
'-‐loadKey')
AS
(key:
chararray,
query:
chararray);
grunt>
DUMP
R;
...
Success!
...
(002BB5A52580A8ED970916150445,margaret
laurence
the
stone
angel)
(002BB5A52580A8ED970916150505,margaret
laurence
the
stone
angel)
...
#
キーはuser
ID
と 8mestamp
を連結した文字列
37. Pig(p.266)
• HbaseのexciteテーブルのLOAD
(その2)
– 最初のフィールドをsplitして2つのフィールド(user,
8me)にする
– AS()でPigの文字列型,
long型で取得するように指定
grunt>
S
=
foreach
R
generate
FLATTEN(STRSPLIT(key,
'u0000',
2))
AS
(user:
chararray,
8me:
long),
query;
grunt>
DESCRIBE
S;
S:
{user:
chararray,8me:
long,query:
chararray}
grunt>
DUMP
S;
(002BB5A52580A8ED,970916150445,margaret
laurence
the
stone
angel)
(002BB5A52580A8ED,970916150505,margaret
laurence
the
stone
angel)
…
45. Scrip8ng
(p274)
• cron/atなどでスケジュールしてメンテナンスし
たり、クラスターのモニタリングに活用
• パイプ、rbスクリプト、jrubyを用いる
$
echo
"status"
|
bin/hbase
shell
$
cat
~/hbase-‐shell-‐status.rb
status
$
bin/hbase
shell
~/hbase-‐shell-‐status.rb
1
servers,
0
dead,
44.0000
average
load
HBase
Shell;
enter
'help<RETURN>'
for
list
of
supported
commands.
Type
"exit<RETURN>"
to
leave
the
HBase
Shell
Version
0.91.0-‐SNAPSHOT,
r1127782,
Thu
May
26
10:28:47
CEST
2011
hbase(main):001:0>
exit