您的位置:首页 > 其它

hbase中表的数据时怎么存储的

2014-03-01 16:11 281 查看
HBASE中的表示按column family来存储的

建立一个有3个column family的表

create 't1', {NAME => 'f1', VERSIONS => 1}, {NAME => 'f2', VERSIONS => 1}, {NAME => 'f3', VERSIONS => 1}

定义表的时候只需要指定column family的名字,列名在put的时候动态指定
插入数据
下面插入没有指定column的名字
put 't1', 'r1', 'f1', 'v1'
put 't1', 'r2', 'f2', 'v2'
put 't1', 'r3', 'f3', 'v3'

下面插入指定column的名字
put 't1', 'r4', 'f1:c1', 'v1'
put 't1', 'r5', 'f2:c2', 'v2'
put 't1', 'r6', 'f3:c3', 'v3'

hbase(main):245:0> scan 't1'

ROW COLUMN+CELL

r1 column=f1:, timestamp=1335407967324, value=v1

r2 column=f2:, timestamp=1335408004559, value=v2

r4 column=f1:c1, timestamp=1335408640777, value=v1

r5 column=f2:c1, timestamp=1335408640822, value=v2

r6 column=f1:c6, timestamp=1335412392258, value=v3

r6 column=f2:c1, timestamp=1335412384739, value=v3

r6 column=f2:c2, timestamp=1335412374797, value=v3

插入多列的数据

put 't1', 'r7', 'f1:c4', 'v9'
put 't1', 'r7', 'f2:c3', 'v9'
put 't1', 'r7', 'f3:c2', 'v9'

手工把memstore写到Hfile中

flush 't1'

删除所有CF3的数据

deleteall 't1','r7'

flush 't1'

每次flash都会建一个新的hfile

$ ../bin/hadoop dfs -lsr /hbase/t1

数据时直接存到CF目录下的,每个CF目录下有3到4个Hfile

f1

f1/098a7a13fa53415b8ff7c73d4d69c869

f1/321c6211383f48dd91e058179486587e

f1/9722a9be0d604116882115153e2e86b3

f2

f2/43561825dbde4900af4fb388040c24dd

f2/93a20c69fdec43e8beeed31da8f87b8d

f2/b2b126443bbe4b6892fef3406d6f9597

f3

f3/98352b1b34e242ecac72f5efa8f66963

f3/e76ed1b564784799affa59fea349e00d

f3/f9448a9a381942e7b785e0983a66f006

f3/fca4c36e48934f2f9aaf1a585c237d44

f3都数据虽然都被删除了,由于没有合并文件都存在

手工合并hfile

hbase(main):244:0> compact 't1'

0 row(s) in 0.0550 seconds

$ ../bin/hadoop dfs -lsr /hbase/t1
f1
f1/00c05ba881a14ca0bdea55ab509c2327
f2
f2/95fbe85769d64fc4b291cabe73b1ddb2

/f3

f1和f2下就只有一个hfile,f3下面没有hfile因为数据都被删除了

一次只能put一个column
一次只能delete一个column
删除整行,用deleteall
deleteall 't1', 'r1'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: