1.启动和停止
启动
[bdp@host166 ~]$ hbase shell
hbase(main):002:0>
停止
hbase(main):002:0> quit
2.常用命令
2.1查看所有表
hbase(main):016:0> list
TABLE
bdtest:t1
2.2创建表
格式:create '表名', '列族名1','列族名2','列族名N'
hbase(main):013:0> create 'student','info','course'
0 row(s) in 2.3250 seconds
=> Hbase::Table - student
2.3查看表结构
hbase(main):015:0> describe 'student'
2.4判断表名是否存在
hbase(main):017:0> exists 'student'
Table student does exist
2.5判断是否禁用启用表
hbase(main):018:0> is_enabled 'student'
true
0 row(s) in 0.0280 seconds
hbase(main):019:0> is_disabled 'student'
false
2.6添加一个列族
hbase(main):020:0> alter 'student','other'
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.3930 seconds
备注:最好不要修改列簇,因为涉及到物理存储更新,所以最好在建表的时候,指定好表结构,之后尽量不要去修改。可以看到当添加一个列簇的时候,执行了update all region操作。
2.7删除列族
hbase(main):021:0> alter 'student', {NAME => 'other', METHOD => 'delete'}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.6910 seconds
备注:NAME 和 METHOD必须为大写
2.8添加数据
格式:put ‘表名’, ‘rowKey’, ‘列族 : 列‘ , '值'
hbase(main):024:0> put 'student',1,'info:name','xiaoming'
hbase(main):025:0> put 'student',1,'info:age',18
hbase(main):026:0> put 'student',1,'info:address','luoxi da dao zhong'
2.9查看某个rowkey的所有键值对
hbase(main):050:0> get 'student',1
COLUMN CELL
info:address timestamp=1588431806148, value=luoxi da dao zhong
info:age timestamp=1588431758544, value=18
info:name timestamp=1588431732463, value=xiaoming
2.10统计当前表的记录数据
hbase(main):053:0> count 'student'
6 row(s) in 0.0270 seconds
=> 6
2.11获取列族的某个列
格式:get '表名','rowkey','列族:列’
hbase(main):054:0> get 'student',1,'info:name'
COLUMN CELL
info:name timestamp=1588431732463, value=xiaoming
1 row(s) in 0.0050 seconds
2.12删除列族某个列
格式:delete '表名' ,'行名' , '列族:列'
hbase(main):055:0> delete 'student',1,'info:age'
0 row(s) in 0.0390 seconds
hbase(main):056:0> get 'student',1
COLUMN CELL
info:address timestamp=1588431806148, value=luoxi da dao zhong
info:name timestamp=1588431732463, value=xiaoming
2.13删除整行记录
格式:deleteall '表名','rowkey'
hbase(main):057:0> deleteall 'student',1
0 row(s) in 0.0140 seconds
hbase(main):058:0> get 'student',1
COLUMN CELL
0 row(s) in 0.0040 seconds
2.14清空表
hbase(main):059:0> truncate 'student'
2.15删除表
备注:先要屏蔽该表,才能对该表进行删除
hbase(main):060:0> disable 'student'
hbase(main):060:0> drop 'student'
2.16查看所有记录
hbase(main):061:0> scan 'student'
ROW COLUMN+CELL
2 column=info:address, timestamp=1588431942542, value=pan yu
2 column=info:age, timestamp=1588431942498, value=19
2 column=info:name, timestamp=1588431942462, value=xiaoming
3 column=info:address, timestamp=1588431942645, value=hui jiang
2.17扫描某个列族的数据
hbase(main):075:0> scan 'student' , {COLUMNS=>'info'}
ROW COLUMN+CELL
1 column=info:age, timestamp=1588433531669, value=18
1 column=info:name, timestamp=1588433531815, value=xiaodu
2 column=info:address, timestamp=1588431942542, value=pan yu
2 column=info:age, timestamp=1588431942498, value=19
2 column=info:name, timestamp=1588433275411, value=zhao
3 column=info:address, timestamp=1588431942645, value=hui jiang
3 column=info:age, timestamp=1588431942621, value=20
3 column=info:name, timestamp=1588433275465, value=huang
4 column=info:address, timestamp=1588431942741, value=guang zhon
4 column=info:age, timestamp=1588431942717, value=21
4 column=info:name, timestamp=1588433275511, value=qian
5 column=info:address, timestamp=1588431942823, value=bei jing
5 column=info:age, timestamp=1588431942803, value=22
5 column=info:name, timestamp=1588433275539, value=xun
6 column=info:address, timestamp=1588431945004, value=luoxi
6 column=info:age, timestamp=1588431942891, value=23
6 column=info:name, timestamp=1588433276672, value=li
6 row(s) in 0.0290 seconds
2.18查看指定某个列族下某一列数据
hbase(main):076:0> scan 'student' , {COLUMNS=>'info:name'}
ROW COLUMN+CELL
1 column=info:name, timestamp=1588433531815, value=xiaodu
2 column=info:name, timestamp=1588433275411, value=zhao
3 column=info:name, timestamp=1588433275465, value=huang
4 column=info:name, timestamp=1588433275511, value=qian
5 column=info:name, timestamp=1588433275539, value=xun
6 column=info:name, timestamp=1588433276672, value=li
6 row(s) in 0.0230 seconds
2.19查看服务器状态
hbase(main):078:0> status
1 active master, 0 backup masters, 2 servers, 0 dead, 5.0000 average load
3.hbase常用过滤器
3.1支持过滤器查询
hbase(main):084:0> show_filters
DependentColumnFilter
KeyOnlyFilter
ColumnCountGetFilter
SingleColumnValueFilter
PrefixFilter
SingleColumnValueExcludeFilter
FirstKeyOnlyFilter
ColumnRangeFilter
TimestampsFilter
FamilyFilter
QualifierFilter
ColumnPrefixFilter
RowFilter
MultipleColumnPrefixFilter
InclusiveStopFilter
PageFilter
ValueFilter
ColumnPaginationFilter
3.2过滤器用法
行键过滤器
RowFilter:针对行键进行过滤
hbase(main):085:0> scan 'student',FILTER=>"RowFilter(>=,'binary:5')"
说明:把student的rowkey大于等5的所有键值对过滤出来
PrefixFilter:行键前缀过滤器
hbase(main):093:0> scan 'student',FILTER=>"PrefixFilter('1')"
说明:把前rokey是前缀是1的全部过滤出来
FirstKeyOnlyFilter:扫描全表,显示每个逻辑行的第一个键值对
hbase(main):001:0> scan 'student',FILTER=>"FirstKeyOnlyFilter()"
一个rowkey可以有多个version,同一个rowkey的同一个column也会有多个的值,只拿出key中的第一个column的第一个version
KeyOnlyFilter:只要key,不要value
hbase(main):056:0> scan 'student', FILTER=>"FirstKeyOnlyFilter() AND ValueFilter(=,'binary:xiao') AND KeyOnlyFilter()"
InclusiveStopFilter:替代ENDROW返回终止条件行
hbase(main):003:0> scan 'student', {STARTROW =>'1',FILTER =>"InclusiveStopFilter('2')"}
上面效果与下面的等同
hbase(main):004:0> scan 'student', {STARTROW =>'1',ENDROW => '3'}
列族与列过滤器
FamilyFilter:针对列族进行比较和过滤
hbase(main):008:0> scan 'student',FILTER=>"FamilyFilter(=,'substring:in')"
说明:显示列族前缀为stu开头的键值对
QualifierFilter:列标识过滤器
hbase(main):005:0> scan 'student',FILTER=>"QualifierFilter(=,'substring:name')"
说明:只显示列名为name的记录
ColumnPrefixFilter:对列名前缀进行过滤
hbase(main):017:0> scan 'student',FILTER=>"ColumnPrefixFilter('age')"
说明:显示列名为name的记录
MultipleColumnPrefixFilter:可以指定多个前缀
hbase(main):043:0> scan 'student',FILTER=>"MultipleColumnPrefixFilter('name','age')"
说明:显示列名前缀为name和age的记录
ColumnRangeFilter:设置范围按字典序对列名进行过滤
hbase(main):026:0> scan 'student',FILTER=>"ColumnRangeFilter('address',true,'age',true)"
ValueFilter:值过滤器
hbase(main):035:0> scan 'student', FILTER=>"ValueFilter(=,'binary:xiaoming')"
说明:查询值等于xiaoming的所有键值对
hbase(main):036:0> scan 'student',FILTER=>"ValueFilter(=,'substring:xiaoming')"
说明:查询值包含xiaoming的所有键值对
SingleColumnValueFilter:在指定的列族和列中进行值过滤器
hbase(main):037:0> scan 'student', {COLUMN=>'info:age',FILTER=>"SingleColumnValueFilter('info','age',=,'binary:19')"}说明:查询info列族age列中值等于19的所有键值对
其他过滤器
ColumnCountGetFilter:限制每个逻辑行返回的键值对数
hbase(main):039:0> get 'student',1,FILTER=>"ColumnCountGetFilter(2)"
PageFilter:基于行的分页过滤器,设置返回行数
hbase(main):040:0> scan 'student',FILTER=>"PageFilter(1)"
ColumnPaginationFilter:基于列的进行分页过滤器,需要设置偏移量与 返回数量
hbase(main):041:0> scan 'student',FILTER=>"ColumnPaginationFilter(2,1)"
说明:显示每行第1列之后的2个键值对
3.3复杂查询
查询值包含xiao的前5条记录
hbase(main):047:0> scan 'student', {LIMIT=>5,FILTER=>"ColumnPrefixFilter('name') AND ValueFilter(=,'substring:xiao')"}
查询列前缀是name的列,并且名字中包含xiao或者li的
hbase(main):051:0> scan 'student', FILTER=>"ColumnPrefixFilter('name') AND ( ValueFilter(=,'substring:xiao') OR ValueFilter(=,'substring:li') )"
查询名字和年龄列,且年龄小于19岁的
hbase(main):052:0> scan 'student', {FILTER=>"MultipleColumnPrefixFilter('name','age') AND SingleColumnValueFilter('info','age',<=,'binary:19')"}
查询所有rowkey是以1开头的列
hbase(main):053:0> scan 'student', FILTER => "PrefixFilter ('1')"
从rowkey是1的开始找,找到所有前缀是1的键值对,如10,11,13......
hbase(main):069:0> scan 'student', {STARTROW=>'1', FILTER => "PrefixFilter ('1')"}
把rowkey里面包含11的所有键值对查找出来
hbase(main):093:0> scan 'student', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('11'))}
查询所有rowkey是有1开头且是数字结尾的键值对
hbase(main):099:0> scan 'student', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'),RegexStringComparator.new('^1\d+$'))}
查找列列族info中,是na开头的列,且值是xiaoming开头的
hbase(main):096:0> scan 'student', {COLUMNS => 'info:name', FILTER => SingleColumnValueFilter.new(Bytes.toBytes('info'), Bytes.toBytes('na'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('xiaoming'))}
3.4hbase shell引入相关的类
hbase(main):009:0> import org.apache.hadoop.hbase.util.Bytes
hbase(main):009:0> import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
hbase(main):009:0> import org.apache.hadoop.hbase.filter.BinaryComparator
hbase(main):009:0> import org.apache.hadoop.hbase.filter.CompareFilter
hbase(main):009:0> import org.apache.hadoop.hbase.filter. Filter
hbase(main):084:0> import org.apache.hadoop.hbase.filter.RowFilter
hbase(main):087:0> import org.apache.hadoop.hbase.filter.RegexStringComparator
hbase(main):091:0> import org.apache.hadoop.hbase.filter.SubstringComparator