目录
1、HBase 命令行操作
[root@node1 ~]# hbase shell
命令行输入命令:help
,显示支持命令,可以查看帮助。
2、HBase 命令行【NameSpace DDL】
-
列举所有Namespace
命令:list_namespace
,类似MySQL:show databases -
列举某个NameSpace中的表
命令:list_namespace_tables
,类似MySQL:show tables in dbnamelist_namespace_tables 'Namespace的名称'
-
创建NameSpace
命令:create_namespace
,类似MySQL:create database dbnamecreate_namespace 'Namespace的名称
-
删除NameSpace
命令:drop_namespace
,只能删除空命名空间,如果命名空间中存在表,不允许删除drop_namespace 'Namespace的名称
3、HBase 命令行【Table 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
-
列举所有用户表
命令:list
,类似MySQL:show tables -
创建表
命令:create
,类似MySQL:表名 + 列的信息【名称和类型】
必须指定表名 + 至少一个列族
语法:#表示在ns1的namespace中创建一张表t1,这张表有一个列族叫f1,这个列族中的所有列可以存储5个版本的值 create 'ns1:t1', {NAME => 'f1', VERSIONS => 5} #在default的namespace中创建一张表t1,这张表有三个列族,f1,f2,f3,每个列族的属性都是默认的 create 't1', 'f1', 'f2', 'f3' ```
-
查看某个表信息
命令:desc
,类似MySQL :desc tbname
语法:desc ‘表名’ -
判断存在某个表是否存储
命令:exists '表名'
-
表的禁用和启用
命令:disable / enable
功能:
- HBase为了避免修改或者删除表,影响这张表正在对外提供读写服务
- 规定约束:修改或者删除表时,必须先禁用表,表示这张表暂时不能对外提供服务
- 如果是删除:禁用以后删除
- 如果是修改:先禁用,然后修改,修改完成以后启用
-
删除某个表
命令:drop
,类似MySQL:drop table tbname
如果要对表进行删除,必须先禁用表,再删除表
4、HBase 命令行【DML put】
掌握HBase插入更新的数据命令put的使用
-
功能
插入 / 更新数据【某一行的某一列】
HBase数据库属于NoSQL数据库,面向列操作,对表中数据操作时,都是一列一列操作# 比如,插入一条数据到HBase表中,有10列,此时操作10次,每列每列数据写入表中 RowKey + ColumnFamily + Column + Version -> Value [Version版本,通常不指定,插入数据时,默认情况下,以插入数据时的时间戳为version]
-
语法
表名+rowkey+列族+列+值
put 'ns:tbname', 'rowkey', 'cf:col', 'value'
HBase表数据:按照Rowkey构建字典有序
-
排序规则:
- 先依据RowKey升序,再按照列簇CF升序,最后列名Column升序-
底层存储也是KV结构:每一列就是一条KV数据
- K:Rowkey + 列族 + 列 + 时间【降序】
- V:值
-
没有更新和删除:通过插入来代替的,做了标记不再显示
-
5、HBase 命令行【DML get】
-
功能:读取某个Rowkey的数据
-
优点:Get是HBase中查询数据最快的方式,并不是最常用的方式
-
缺点:get命令最多只能返回一个rowkey的数据,根据Rowkey进行检索数据
-
语法:
get 表名 rowkey [列族,列]
-
用法:
1. 获取表中某一行数据 所有列的值 get 'table_name', 'rowkey' 2. 获取表中某一行的某个列簇数据 某个列簇的所有行数据 get 'table_name', 'rowKey', 'column_family' 3. 获取表中某一行的某个一列数据 仅仅一列数据 get 'table_name', 'rowkey', 'column_family:column_name'
6、HBase 命令行【DML scan】
-
功能:根据条件匹配读取多个Rowkey的数据
-
语法:
读取整张表的所有数据,一般不用,类似SELECT * FROM tbl_xx scan 'tbname' 经常与LIMIT结合使用,获取表中前N条数据 scan 'tbname', {LIMIT => 10} #根据条件查询:工作中主要使用的场景, 用到最多 scan 'tbname', {Filter}
-
举例:
scan 'people', {LIMIT => 2}
扫描people表中两条数据- rowkey前缀过滤器,在HBase数据查询中,使用最多
RowKey 前缀过滤器,如果表中数据的RowKey前缀与指定表达式一致,获取数据 scan 'people', {ROWPREFIXFILTER => '1001'} scan 'people', {ROWPREFIXFILTER => '100'}
- rowkey范围过滤器
STARTROW:从某个rowkey开始,包含,闭区间 STOPROW:到某个rowkey结束,不包含,开区间 scan 'people', {STARTROW=>'1001'} scan 'people', {STARTROW=>'1001', STOPROW=>'1003'}
-
面试题:HBase数据库数据查询方式有哪些??
- 1、get查询,依据具体RowKey直接查询数据,查询速度最快
- 2、Scan全部扫描查询,性能最差,几乎不建议使用
- 3、Scan范围查询,过滤器查询,前缀匹配查询,设置查询RowKey范围
7、HBase 命令行【DML count】
- 功能:删除HBase中的数据
- 语法
#删除某列的数据 delete tbname, rowkey, cf:col #删除某个rowkey数据 deleteall tbname, rowkey #清空所有数据:生产环境不建议使用,建议删表重建 truncate tbname
- 示例
# 删除某一列数据 delete 'people', '1001', 'info:address' # 删除某一行row数据 deleteall 'people','1002' # 清空表数据 truncate 'people'
· 在实际生产环境中,如果需要清空HBase某个表中数据,不建议使用:truncate table_name
- 第1步、先禁用表
disable
,然后删除表drop
- 第2步、重新创建表
create