hbase shell : 进入hbase shell console
- 创建一个表member : (表名: ‘member’, 列族 :’m_id’,’address’,’info’)
在创建表只需要指定表名与列族便可
hbase(main):025:0> create 'member','m_id','address','info'
2.list #查看所有表
hbase(main):037:0> list
TABLE
blog
member
table1
3 row(s) in 0.0090 seconds
=> ["blog", "member", "table1"]
3.查看表描述 desc ‘tablename’
hbase(main):040:0* desc 'member'
Table member is ENABLED
member
COLUMN FAMILIES DESCRIPTION
{NAME => 'address', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOC
KCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCA
CHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'm_id', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCA
CHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
3 row(s) in 0.0250 seconds
4、插入数据
put命令比较简单,只有这一种用法:
hbase>put ‘t1′, ‘r1′, ‘c1′, ‘value', ts1
t1指表名,r1指行键名,c1指列名,value指单元格值。ts1指时间戳,一般都省略掉了。
eg: put'member','scutshuxue','info:age','24'
put'member','scutshuxue','info:birthday','1987-06-17'
put'member','scutshuxue','info:company','alibaba'
put'member','scutshuxue','address:contry','china'
5、 scan浏览表中数据
hbase(main):048:0> scan 'member',LIMIT=>10
ROW COLUMN+CELL
scutshuxue column=address:contry, timestamp=1497409704325, value=china
scutshuxue column=info:age, timestamp=1497409677439, value=24
scutshuxue column=info:birthday, timestamp=1497409686575, value=1987-06-17
scutshuxue column=info:company, timestamp=1497409696404, value=alibaba
1 row(s) in 0.0320 seconds
也可以指定一些修饰词:TIMERANGE, FILTER, LIMIT,STARTROW, STOPROW, TIMESTAMP, MAXLENGTH,or COLUMNS
eg:hbase>scan ‘t1′, {COLUMNS => ‘c1′, TIMERANGE => [1303668804, 1303668904]}
6、查询数据
获取一个id的所有数据
hbase(main):050:0* get 'member','scutshuxue'
COLUMN CELL
address:contry timestamp=1497409704325, value=china
info:age timestamp=1497409677439, value=24
info:birthday timestamp=1497409686575, value=1987-06-17
info:company timestamp=1497409696404, value=alibaba
获取一个id,一个列族的所有数据
hbase(main):053:0> get 'member','scutshuxue','info'
COLUMN CELL
info:age timestamp=1497409677439, value=24
info:birthday timestamp=1497409962987, value=1987-06-10
info:company timestamp=1497409696404, value=alibaba
获取一个id,一个列族中一个列的所有数据
hbase(main):088:0> get 'member','scutshuxue','info:age'
COLUMN CELL
info:age timestamp=1497410251265, value=99
通过timestamp来获取两个版本的数据
hbase(main):057:0> get 'member','scutshuxue',{COLUMN=>'info:age',TIMESTAMP=>1497409677439}
COLUMN CELL
info:age timestamp=1497409677439, value=24
7、更新一条记录(其实更新记录跟插入新记录是一样的)
将scutshuxue的年龄改成99
hbase(main):059:0> put 'member','scutshuxue','info:age' ,'99'
0 row(s) in 0.0140 seconds
hbase(main):061:0> get 'member','scutshuxue','info:age'
COLUMN CELL
info:age timestamp=1497410251265, value=99
8、删除一个列族m_id:先将表disable(如果表中之前有数据的话,会把数据清空)
删除一个列族m_id:先将表disable(如果表中之前有数据的话,会把数据清空)
hbase(main):030:0> disable 'member'
hbase(main):033:0> is_enabled 'member'
hbase(main):034:0> alter 'member',{NAME=>'m_id',METHOD=>'delete'}
最后enable,否则不能进行其他操作
hbase(main):038:0> enable 'member'
9、删除指定数据
从表删除特定单元格
使用 delete 命令,可以在一个表中删除特定单元格。 delete 命令的语法如下:
delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’
下面是一个删除特定单元格和例子。在这里,我们删除salary
hbase(main):006:0> delete 'emp', '1', 'personal data:city',
1417521848375
0 row(s) in 0.0060 seconds
删除表的所有单元格
使用“deleteall”命令,可以删除一行中所有单元格。下面给出是 deleteall 命令的语法。
deleteall ‘<table name>’, ‘<row>’,
这里是使用“deleteall”命令删去 emp 表 row1 的所有单元的一个例子。
hbase(main):007:0> deleteall 'emp','1'
0 row(s) in 0.0240 seconds
10、统计表数据量,count命令
最直接的方式是在hbase shell中执行count的命令可以统计行数。
hbase> count ‘t1′
hbase> count ‘t1′, INTERVAL => 100000
hbase> count ‘t1′, CACHE => 1000
hbase> count ‘t1′, INTERVAL => 10, CACHE => 1000
其中,INTERVAL为统计的行数间隔,默认为1000,CACHE为统计的数据缓存。这种方式效率很低,如果表行数很大的话不建议采用这种方式。
查询操作
1.scan ‘表名’ #查看所有数据,或带上LIMIT=>10查看随机的10条数据。
2.get是根据主键查看一列
get ‘表名’,’主键’[,’列簇名’][,’列簇名:列名’]
过滤查询表的内容
1.FirstKeyOnlyFilter() 得到每一行的列族info的第一个列
hbase(main):002:0> scan 'student',{COLUMNS=>'info',FILTER=>"(FirstKeyOnlyFilter())"}
2.查看列簇是info,LIMIT是显示的行数,STARTROW是开始行对应的是主键
hbase(main):008:0> scan 'student',{COLUMNS=>['info'],LIMIT=>4,STARTROW=>'200977100710'}
3.查看列簇是info,name
hbase(main):007:0> scan 'student',{COLUMNS=>['info','name'],LIMIT=>4,STARTROW=>'200977100710'}
10、修改表结构
代码如下:
disable‘scores'
alter ‘scores',NAME=>'info'
enable‘scores'
alter命令使用如下(如果无法成功的版本,需要先通用表disable):
a、改变或添加一个列族:
hbase>alter ‘t1′, NAME => ‘f1′, VERSIONS => 5
b、删除一个列族:
代码如下:
hbase>alter ‘t1′, NAME => ‘f1′, METHOD => ‘delete'
hbase>alter ‘t1′, ‘delete' => ‘f1′
c、也可以修改表属性如MAX_FILESIZE
MEMSTORE_FLUSHSIZE,READONLY,和 DEFERRED_LOG_FLUSH:
hbase>alter ‘t1′, METHOD => ‘table_att', MAX_FILESIZE => '134217728′
总结:HBase的shell操作,一个大概顺序就是操作关键词后跟表名,行名,列名这样的一个顺序,如果有其他条件再用花括号加上。