本章主要学习HBase的shell基本命令操作
DDL 命令
1. 启动HBase shell
hbase shell
2. 查看帮助命令
help 命令
如:help ‘create_namespace’
- DDL:数据库命令
Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables
- DDL:表命令
Group name: ddl
Commands: alter, alter_async, alter_status, clone_table_schema, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, list_regions, locate_region, show_filters
- DML:数据操作命令
Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve
- 工具命令
Group name: tools
Commands: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, cleaner_chore_enabled, cleaner_chore_run, cleaner_chore_switch, clear_block_cache, clear_compaction_queues, clear_deadservers, close_region, compact, compact_rs, compaction_state, flush, is_in_maintenance_mode, list_deadservers, major_compact, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, splitormerge_enabled, splitormerge_switch, stop_master, stop_regionserver, trace, unassign, wal_roll, zk_dump
退出
exit
3.列举所有的namespace
- 命令:list_namespace
- 语法:list_namespace
- 示例:
list_namespace
4.列举namespace的所有表
- 命令:list_namespace_tables
- 语法:
list_namespace_tables
'namespace的名称'
- 示例:
list_namespace_tables
'hbase'
5.创建namespace
- 命令:create_namespace
- 语法:
create_namespace
'namespace的名称'
- 示例:
create_namespace ‘t1’
6.删除namespace
- 命令:drop_namespace
注意:只能删除空数据库,如果数据库中存在表,不允许删除
- 语法:drop_namespace
'namespace的名称'
- 示例:drop_namespace ‘t1’
7. 查看表
- 命令:desc
- 语法:desc
'表名'
- 示例:
desc ‘t1’
8.删除表
- 命令:drop
- 语法:drop ‘表名’
- 示例:drop ‘t1’
注意:如果要对表进行删除,必须先禁用表,在删除表
8.1 禁用/启用表
- 命令:disable/enable
- 功能:
- Hbase为了避免修改或者删除表,这张表正在对外提供读写服务
- 规则:修改或者删除表时,必须先禁用表,表示这张表暂时不能对外提供服务
- 如果是删除:禁用以后删除
- 如果是修改:先禁用,然后修改,修改完成以后启用
- 语法:
disable ‘表名’ ==>禁用表
enable ‘表名’ ==>启用表
9. 判断表是否存在
- 命令:exists
- 语法:exists ‘表名’
- 示例:
exists ‘t1’
DML 命令
1. put 插入/更新数据
- 功能:插入/更新数据【某一行的某一列】
- 语法:
put
NS名称:表的名称,'Rowkey','列族:列','值'
put ‘ns1:t1’, ‘r1’, ‘cf:c1’, ‘value’
- 注意:
put :如果不存在,就插入,如果存在就更新-
写入的数据按照Rowkey进行了排序:按照Rowkey的字典顺序进行排序
-
每个rowkey内部按照列做了排序
-
Hbase中的更新是假的,伪更新
-
只是让用户看起来更新了,但实际没有更新
-
实现更新数据时,插入了一条新的数据,老的数据被标记为更新不显示,没有被真正删除
-
只显示最新的数据,不显示老的数据
-
2.get 命令
- 功能:读取某个Rowkey的数据
- 注意:缺点:get命令最多只能返回一个rowkey的数据,根据Rowkey进行检索数据
- Rowkey作为Hbase的唯一索引,按照rowkey是走索引的
- 优点:Get是Hbase中查询数据最快的方式
- 语法:
get 表名 rowkey [列族,列]
get ‘ns:tbname’,‘rowkey’
get ‘ns:tbname’,‘rowkey’,[cf]
get ‘ns:tbname’,‘rowkey’,[cf] | [cf:col]
3. scan
-
功能:根据条件匹配读取多个Rowkey的数据
-
语法:
·scan ‘tbname’//一般不用
·scan ‘tbname’,{Filter} //用到最多 -
示例:
scan ‘itcast:t2’
#rowkey前缀过滤器
scan ‘itcast:t2’, {ROWPREFIXFILTER => ‘2021’}
scan ‘itcast:t2’, {ROWPREFIXFILTER => ‘202101’}
#rowkey范围过滤器
#STARTROW:从某个rowkey开始,包含,闭区间
#STOPROW:到某个rowkey结束,不包含,开区间
scan ‘itcast:t2’,{STARTROW=>‘20210101_000’}
scan ‘itcast:t2’,{STARTROW=>‘20210201_001’}
scan ‘itcast:t2’,{STARTROW=>‘20210101_000’,STOPROW=>‘20210201_001’}
scan ‘itcast:t2’,{STARTROW=>‘20210201_001’,STOPROW=>‘20210301_007’} -
注意
- 在Hbase数据检索,尽量走索引查询:按照Rowkey条件查询
- 尽量避免走全表扫描
- 索引查询:有一本新华字典,这本字典可以根据拼音检索,找一个字,先找目录,找字
- 全表扫描:有一本新华字典,这本字典没有检索目录,找一个字,一页一页找
- Hbase所有Rowkey的查询都是前缀匹配
4. delete 命令
- 功能:删除HBase中的数据
- 语法:
#删除某列的数据
delete tbname,rowkey,cf:col
#删除某个rowkey数据
deleteall tbname,rowkey
#清空所有数据
truncate tbname
5. incr 命令
- 功能:一般用于自动计数的,不用管记住上一次的值,直接做自增
- 语法:
incr ‘表名’,‘rowkey’,‘列族:列’
get_counter ‘表名’,‘rowkey’,‘列族:列’
- 示例:
create ‘NEWS_VISIT_CNT’, ‘C1’
incr ‘NEWS_VISIT_CNT’,‘0000000001_00:00-01:00’,‘C1:CNT’,12
get_counter ‘NEWS_VISIT_CNT’,‘0000000001_00:00-01:00’,‘C1:CNT’
incr ‘NEWS_VISIT_CNT’,‘0000000001_00:00-01:00’,‘C1:CNT’
6. count 命令
- 功能: 统计某张表的行数【rowkey的个数】
- 语法:count ‘表名’