目录
一、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版权协议,转载请附上原文出处链接和本声明。