1 HBase特点有那些?
总:存储规模大、面向列、无模式、多版本、建立在HDFS上的分布式、非关系型数据库
高可靠、面向列、高性能、可伸缩(自动切分、迁移)、可扩展,增加计算和存储能力
存储规模大:单表可达数十亿行,数百万列
面向列:存储和检索均面向列
无模式:同一表中的不同行可以由截然不同的列
存储稀疏:空列并不占用存储空间,表可以设计的非常稀疏
多版本:每个单元(cell)中的数据可以由多个版本,默认情况下版本号是单元格插入的时间戳
数据类型单一:数据都是字符串,没有类型(所有数据都被转换为字节数组)
2 HBase VS HDFS VS Hive
1)HBase VS HDFS
两者都有很好的容错性和扩展性
HDFS适合离线批处理场景、不支持随机查找、不支持数据更新
HBase是对HDFS很好的补充
2) HBase VS Hive
两者都依赖于HDFS作为数据存储支持,都有表、数据库的概念
Hive面向计算层面的,为统计分析而生的
HBase面向存储,要满足实时查询需求
3 HBase的缺点?
1 不能支持条件查询,仅能通过行键和行键序列来检索数据
要进行条件查询只有两种方式:
(1).设计合适的行键(通过行键直接定位到数据所在的位置);
(2).通过Scan方式进行查询,Scan可设置起始行和结束行,把这个搜索限定
在一个区域中进行;
2 仅支持行级(单行)事务(HBase的事务是行级事务,可以保证行级数据的原子性、一致性、隔离性以及持久性)
HBase分别提供了行锁和读写锁来实现行级数据、Store级别以及Region级别的并发控制。除此之外,HBase还提供了MVCC机制实现数据的读写并发控制。MVCC,即多版本并发控制技术,它使得事务引擎不再单纯地使用行锁实现数据读写的并发控制,取而代之的是,把行锁与行的多个版本结合起来,经过简单的算法就可以实现非锁定读,进而大大的提高系统的并发性能。HBase正是使用行锁 + MVCC保证高效的并发读写以及读写数据一致性。
详情:HBase 事务和并发控制机制原理
Scan可以设置一个或多个Filter,来对行键、列族和列进行过滤,从而达到条件查询的目的。
3 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉
4 HBase的体系结构?
HBase的体系结构
HBase遵从主从服务器架构,由RegionServer和Master构成
Master负责管理所有的RegionServer
Zookeeper协调服务,并处理服务器运行期间可能遇到的错误
Client:
包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息
Client读写HBase上数据不需要与Master交互,只需要寻址访问Zookeeper和RegionServer
Master:
为RegionServer分配Region
发现失效的RegionServer,并重新分配其上的Region
在Region 分裂后,负责新Region的分配
负责RegionServer的负载均衡
负责管理用户对表的增删改查操作
仅仅维护Table和Region的元数据信息,负载很低,
Regionserver:
负责用户的IO请求
负责region的分裂
Zookeeper:
保证任何时候,集群中只有一个Active Master
存储所有Region的寻址入口
实时监控RegionServer的状态,将RegionServer的上下线信息实时通知给Master
5 Hbase逻辑结构???
表(Table):
hbase在表中组织数据。表名是字符串和字符的组合,可以在文件系统路径中使用。
行(Row):
在表中数据依赖于行来存储,行通过行键来区分。行键没有数据类型,通常是一个字节数组。每一行rowkey必须是唯一的。可以使用(哈希值+时间戳来作为行键)
三种访问HBase表中数据方式:
通过单个rowkey访问、
通过rowkey序列访问、
全表扫描
列族(Column Family):
行中的数据通过列族来组织。列族也暗示了数据的物理排列。所以列族必须预先定义,并且不容易被修改。每行都拥有相同的列族,可能有些行的数据为空。列族是字符串和字符的组合,可以在文件系统路径
中使用。
HBase中的每个列,都归属某个列族
列族是表元数据的一部分(而列不是),必须在使用表之前定义
列是在插入数据时动态增加的
列名都以列族作为前缀,即列族:标签,如info:qq , info:weibo 都属于info这个列族
物理上同列族数据存储在一起
最好将具备共同IO特性的列放在一个列族中
备注:
数据在列族中的位置是通过列标识来指定的。列标识不需要预先指定,每行的列标识也不需要相同。就像行键一样,列标识没有数据类型,通常也是字节数组。
单元(Cell):
通过行键和列唯一确定的一个存储单元;
Cell中可能包含多个版本的数据;
Cell中数据是没有类型的,全部是字节码形式存储。
版本(Version):
每行数据可以有多个版本
Version默认是TimeStamp(当前系统时间),在数据写入时自动赋值;
Version也可以由客户显式赋值;
不同Version的数据按Version倒序排序,即最新的数据排在最前面;
获取数据时不指定Version,默认取最新的数据;
数据存在过多版本造成存储负担,HBase提供两种数据版本回收方式:
保存数据的最后n个版本,和保存最近一段时间内的版本(如最近七天)
用户可以针对每个列族进行设置。
Hbase表的逻辑结构
6 设计行键的时候应该注意什么呢?
数据按照rowkey的字典序顺序存储;
设计rowkey时,充分利用排序存储特性,将经常一起读取的行存储到一起;
不要把业务发生时间直接作为rowkey,导致全部存储到一个regionserver中,可以在时间戳前面加上散列值,设计成“散列值+时间戳”的形式
7 主要操作???
get :返回结果有序,按指定rowkey获取唯一一条记录
scan :返回结果有序,按指定条件获取一批记录
put(添加或者更新,更新不会删除旧数据,会以版本号标识,先缓冲区--->RPC发送)
delete:建立一个墓碑标志,不直接删除,在合并Compact时再进行删除。
其缺陷:删除版本T之后,在合并前,有添加了新数据版本号低于T,则get时无法查询到。解决办法:使用时间戳作为版本号
作者:小小少年Boy
链接:https://www.jianshu.com/p/57be566c1873