2020.9.24hbae 基本命令

目录

 

一、HBase概述

1.定义:

2.HBase特点

3.发展历史

4.HBase应用场景

5.Apache HBase生态圈

6.HBase物理架构-概述

7.HBase数据管理

8.HBase架构特点

9.HBase Shell

二、HBase Shell

1.显示集群状态

2.查看数据库版本

3.显示当前用户和组whoami

5.退出

三、ddl命令

1.创建表

2.增加、删除表结构---Schema alter

3.删除一个列簇

4.获取表的描述desc/describe

5.表是否存在exists

6.启用和禁用表enable/disable

7.使用正则表达式启用/禁用表

8.删除表drop

9.获取某个表赋值给一个变量

10.获取rowKey所在的区locate_region

三、dml命令

1.插入或者修改数据-->put

2.全表扫描scan

3.获取数据get

4.删除某个列簇中的某个列-->delete

5.删除某行数据-->deleteall

7.计算表中行数

8.COLUMNS

9.TIMESTAMP指定时间戳

10.TIMERANGE 指定时间戳范围

11.STARTROW

12.STOPROW

13.返回的行数-->LIMIT

14.用户权限

15.给表改名

16.批量导入文件

16.变更表信息

17.获取更多版本数据


一、HBase概述

1.定义:

HBase是一个领先的NoSQL数据库:是一个面向列存储的数据库,一个分布式hash map基于Google Big Table论文,使用HDFS作为存储并利用其可靠性

2.HBase特点

数据访问速度快,响应时间约2-20毫秒
支持随机读写,每个节点20k~100k+ ops/s 
可扩展性,可扩展到20,000+节点

3.发展历史

时间
事件
2006
Google 发表了关于 Big Table 论文
2007
第一个版本的 HBase Hadoop0.15.0 一起发布
2008
HBase 成为 Hadoop 的子项目
2010
HBase 成为 Apache 顶级项目
2011
Cloudera 基于 HBase0.90.1 推出 CDH3
2012
HBase 发布了 0.94 版本
2013-2014
HBase 先后 发布了 0.96 版本 /0.98 版本
2015-2016
HBase 先后发布了 1.0 版本、 1.1 版本和 1.2.4 版本
2017
HBase 发布 1.3 版本
2018
HBase 先后发布了 1.4 版本和 2.0 版本

4.HBase应用场景

(1)增量数据-时间序列数据:高容量,高速写入
(2)信息交换-消息传递:高容量,高速读写
(3)内容服务-Web后端应用程序

5.Apache HBase生态圈

HBase生态圈技术
Lily – 基于HBase的CRM
OpenTSDB – HBase面向时间序列数据管理 
Kylin – HBase上的OLAP 
Phoenix – SQL操作HBase工具 
Splice Machine – 基于HBase的OLTP 
Apache Tephra – HBase事务支持 
TiDB – 分布式SQL DB A
pache Omid - 优化事务管理 
Yarn application timeline server v.2 迁移到HBase
Hive metadata存储可以迁移到HBase
Ambari Metrics Server将使用HBase做数据存储

6.HBase物理架构-概述

HBase采用Master/Slave架构
(1)HBase物理架构 - HMaster
    HMaster的作用:
是HBase集群的主节点,可以配置多个,用来实现HA
管理和分配Region
负责RegionServer的负载均衡
发现失效的RegionServer并重新分配其上的Region
 
(2)HBase物理架构 - RegionServer
HBase物理架构 - RegionServer
(3)HBase物理架构 - Region和Table
Table在行的方向上分割为多个Region。
Region是按大小分割的,每个表开始只有一个region,随着数据的增多,region不断增大,当增大到一个阀值的时候,region就会等分为两个新的region,之后会有越来越多的region。
Region是HBase中分布式存储和负载均衡的最小单元。不同的Region分布到不同的RegionServer上。
Region由一个或者多个Store组成, 每个Store保存一个column family, 每个Store又由一个MemStore(存储在内存中)和0到多个StoreFile(存储在HDFS上)组成
(4)HBase逻辑架构 - Row
特点:
Rowkey(行键)是唯一的并已排序
Schema可以定义何时插入记录
每个Row都可以定义自己的列,即使其他Row不使用,相关列定义为列族/列簇
使用唯一时间戳维护多个Row版本,在不同版本中值类型可以不同
HBase数据全部以字节存储

7.HBase数据管理

数据管理目录系统目录表hbase:meta 存储元数据等
HDFS目录中的文件 
Servers上的region实例 
HBase数据在HDFS上 :
可以通过HDFS进行修复File,修复路径 RegionServer->Table->

8.HBase架构特点

强一致性,自动扩展(当Region变大会自动分割,使用HDFS扩展数据并管理空间),
写回复(使用wal(Write Ahead Log)),与Hadoop集成

9.HBase Shell

HBase Shell是一种操作HBase的交互模式
命令类别
命令
General
version, status,  whoami , help
DDL
alter, create, describe, disable, drop, enable, exists,  is_disabled , is_enabled, list
DML
count, delete,  deleteall , get,  get_counter incr , put, scan, truncate
Tools
assign,  balance_switch , balancer,  close_region , compact, flush,  major_compact , move, split,  unassign zk_dump
Replication
add_peer disable_peer enable_peer remove_peer start_replication stop_replication

二、HBase Shell

1.显示集群状态

status
status 'simple'
status 'summary'
status 'detailed'
status 'replication'
status 'replication','source'
status 'replication','sink'

2.查看数据库版本

version

3.显示当前用户和组whoami

4.查看帮助列表
help
查看操作表的命令:table_help

5.退出

exit或者quit

三、ddl命令

列簇的属性:
 

1.创建表

注:创建表只需要指定列簇名称,不需要指定列名
一般添加属性类型用此种方式:
create '表名',{NAME=>'列簇名',},{NAME=>'列簇名'},{NAME=>'列簇名'}
简单创建表
create '表名','列簇名1','列簇名2','列簇名3'
添加属性创建表:
create '表名',{NAME=>'列簇名1',VERSIONS=>版本号,TTL=>过期时间,BLOCKCACHE=>true}
实例:
create 'test','a1','a2','a3'
显示所有表:list

2.增加、删除表结构---Schema alter

(1)添加一个列簇:alter '表名','列簇名1','列簇名2'....
(2)查看表结构:desc '表名'

3.删除一个列簇

alter '表名',{NAME=>'列簇名',METHOD=>'delete'}
或者
alter '表名',NAME=>'列簇名',METHOD=>'delete'

4.获取表的描述desc/describe

desc/describe '表名'

5.表是否存在exists

exists '表名'

6.启用和禁用表enable/disable

enable '表名'
is_enabled '表名'
disable '表名'
is_disabled '表名'

7.使用正则表达式启用/禁用表

禁用所有表名以t开头的
disable_all 't.*'
启动所有表名以t开头的
enable_all 't.*'

8.删除表drop

注:删除表之前要先禁用它
disable '表名'
drop '表名'
当然同样可以使用正则表达式:drop_all 't.*'

9.获取某个表赋值给一个变量

变量名=get_table '表名'
之后就可以通过变量名.方法名的方式来调用表

10.获取rowKey所在的区locate_region

三、dml命令

1.插入或者修改数据-->put

put '表名','行键','列簇名:列名','列值'
如果没有列名,默认为列名为空
实例:
并且如果插入时,表名,列簇名,列名都相同,则将会把当前的值替换成最新插入的值

2.全表扫描scan

scan '表名'
注:插入的中文会乱码
扫描整个列簇
scan '表名',{COLUMN=>'列簇名'} 或者
scan '表名',{NAME=>'列簇名'} 或者
scan '表名',COLUMN=>'列簇名' 或者
scan '表名',NAME=>'列簇名' 或者

3.获取数据get

get '表名','行键'
获取某一行某列簇的数据
get '表名','行键','列簇名'
可以指定多个列簇
get '表名','行键',{COLUMN=>['列簇名1,列簇名2']}

4.删除某个列簇中的某个列-->delete

delete '表名','行键','列簇名:列名'

5.删除某行数据-->deleteall

deleteall '表名','行键'
6.清空表的数据-->truncate
truncate '表名'

7.计算表中行数

count '表名'

8.COLUMNS

查询不同列簇的多个列
scan '表名',COLUMNS=>['列簇名1:列名1','列簇名2:列名2']

9.TIMESTAMP指定时间戳

scan '表名',COLUMNS=>'列簇',TIMESTAMP=>时间戳

10.TIMERANGE 指定时间戳范围

scan '表名',TIMERANGE=>[timestamp1,timestamp2]

11.STARTROW

从规定的起始行位置开始查找,在起始行之前的行就不展示
scan '表名',STRATROW=>'行键'

12.STOPROW

仅查询终止行之前的行
scan '表名',STOPROW=>'行键'

13.返回的行数-->LIMIT

scan '表名',LIMI T=>行数

14.用户权限

(1)首先要配置hbase-site.xml
在hbase-site.xml文件中添加以下内容:
<property>
        <name>hbase.security.authorization</name>
        <value>true</value>
</property>
<property>
        <name>hbase.coprocessor.master.classes</name>
        <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
        <name>hbase.coprocessor.region.classes</name>
        <value>org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
        <property>
        <name>hbase.superuser</name>
        <value>hadoop</value>
</property>
命令:
(2)查看当前用户以及当前用户权限:user_permission ['表名'..]
 
(3)给用户赋权
Hbase五个权限标识符:R(read),W(write),X(exec),C(create),A(admin:超级用户权限)
grant '用户名','RWXCA'

15.给表改名

改:
snapshot '表名', '镜像名'
clone_snapshot '镜像名','新表名'
delete_snapshot '镜像名'

16.批量导入文件

(1)先在hbase创建表
先在hbase创建emp_basic
create 'emp_basic','emp','time'
(2)再去linux输入命令
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv 
 -Dimporttsv.separator="," 
-Dimporttsv.columns="HBASE_ROW_KEY,
emp:name,emp:job_title,emp:company,time:sDate,time:eDate" "emp_basic" 

16.变更表信息

order 列族中的数据设置为可以存放 5 个版本
alter 'customer',NAME=>'order',VERSIONS=>

17.获取更多版本数据

先更新数据
put 'customer','zs','addr:city','beijing1'
put 'customer','zs','addr:city','beijing2'
获取信息
get 'customer','zs',{COLUMN=>'addr:city',VERSIONS=>3}
/test/emp_basic.csv
补充:
1.TABLE中的所有行都是按照row key的字典排序
2.cell:值+时间戳
3.修改多版本存储
alter '表名',NAME=>'列簇',VERSIONS=>5
4.多版本数据查询
get '表名','rowkey','{COLUMNS=>[列簇:列名'],VERSIONS=>5
 

版权声明:本文为m0_49140390原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。