1.进入HBase shell命令
hadoop@ubuntu:~$ hbase shell
2.查看HBase状态
hbase(main):001:0> status
3.创建一个表
hbase(main):002:0> create 'table','famly1','famly2'
table为表名,famly1,famly2均为列族名。
4.列出HBase中所有的表
hbase(main):003:0> list
5.添加一行
hbase(main):007:0> put 'table','row1','famly1:col1','value1'
table为表名,row1为行键,famly1:col1表示famly1中的col1列,value1为该列的值。
注意:hbase不能增加一行时同时设置列列的值,如下的put语句是非法的。
put 'table','row1','famly1:col1','value1','famly2:col2','value2'
这也正是我们HBase的优势体现,它在物理存储上是一种稀疏存储的。即保证了每一行中只有一个列有值,其他列为null,这样就有利于Key-Value查询。
如果,我们想在逻辑上实现上面的效果,我们只能按如下方式再加入一行。
hbase(main):012:0> put 'table','row1','famly2:col2','value2'
6.获取一行数据
hbase(main):008:0> get 'table','row1'
table为表名,row1为行键
7.扫描整个表的数据
hbase(main):009:0> scan 'table'
ROW COLUMN+CELL
row1 column=famly1:col1, timestamp=1428498353070, value=value1
row1 column=famly2:col2, timestamp=1428498299318, value=value2
1 row(s) in 0.0190 seconds
再逻辑上,它将同一个键值的行当成了一个行,但是这样的一个行里面可能会根据列值的不同,又分成了多个行。
8.删除一行
hbase(main):011:0> delete 'table','row1','famly1:col1'
有一点,我们可能困惑,使用get得到一行时,我们只需要‘表名’和‘行号’即可,但是删除一行时,为什么还要加上一个‘列名’呢?,有了7中的解释,我们就不难发现为什么要这样设计了。
执行上面的命令后,我们再用scan看一下。
hbase(main):018:0> scan 'table'
ROW COLUMN+CELL
row1 column=famly2:col2, timestamp=1428498299318, value=value2
1 row(s) in 0.0140 seconds
9.删除一个表
hbase(main):019:0> disable 'table'
0 row(s) in 1.3520 seconds
hbase(main):020:0> drop 'table'
0 row(s) in 0.2170 seconds
删除一个表时,我们先要将其disable掉,再用drop命令将器删除。