本章目录
- 什么是Hbase
- hbase能做什么
- hbase架构设计
- 核心概念
1 什么是Hbase
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化和非结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
HBase是一个高可靠性、高性能(快)、面向列、可伸缩的分布式数据库系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化和非结构化数据存储集群。
它介于nosql和RDBMS之间(nosql一般不存储结构化数据 ,hbase结构化和非结构化都存),仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive或者Phoenix支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化和结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
特点
1 海量存储
Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。
2 列式存储
这里的列式存储其实说的是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
3 极易扩展
Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。
备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。
4 高并发
集群中对外服务的节点叫RegionServer(存储表的部分范围数据)
并发查询的时候 不同的机器节点对外服务 支持高并发
由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。能获得高并发、低延迟的服务。
5 稀疏
稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
2 hbase能做什么
HBase擅长于存储结构简单的海量数据但索引能力有限,而Oracle等传统关系型数据库(RDBMS)能够提供丰富的查询能力,但却疲于应对TB级别的海量数据存储,HBase对传统的RDBMS并不是取代关系,而是一种补充。
存储结构化和非结构数据的分布式数据库 !
- 将数据存储在不同的机器上 !
- 利用不用机器来处理并发请求!!
不适合使用
需要数据分析,比如报表(rowkey) 对sql支持不好
单表数据不超过千万(200万)
适合使用HBASE
单表数据超过千万 ,并发量还很高
数据分析需求弱 ,或者不需要那么灵活和实时
注意:由于hbase对SQl的支持并不是很好 ,所以Hbase不适合做复杂的报表分析等场景 ,适合数据量非常大且报表统计维度并不是复杂的场景 ,比如标签化查询等!!!
3 hbase架构设计
client
- 提供了访问hbase的接口
- 提供cache提高访问hbase的效率 , 比如region的信息
zookeeper
- ü通过选举保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册
- ü存贮所有Region的寻址入口:索引表-meta-所在服务器
- ü实时监控Regionserver的上线和下线信息。并实时通知给Master
- ü存储HBase的schema和table元数据
ü默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper,但一般我们不会让hbase自己管理一套zookeeper进程,而是让hbase使用我们外部的一个公共zookeeper集群 ,所以我们在安装的时候通常都会配置自己的ZK集群 .üZookeeper的引入使得Master不再有单点故障
HMaster
(分配数据到底存储在哪个regiserver中)
- ü为Region server分配region(数据)
- ü负责Region server的负载均衡
- ü发现失效的Regionserver并通过拆分LOG重新分配其上的region
- ü管理用户对table定义的各类DDL操作
HRegionServer
- 管理master为其分配的Region
- 处理来自客户端的读写请求
- 负责和底层HDFS的交互,存储数据到HDFS
- 负责Region变大以后的拆分
- 负责Storefile的合并工作
- 负载均衡的事情
4 核心概念
Hmaster: Hbase集群的主节点
HRegionServer: 管理Region的机器
Region:HBase中的数据都是按row-key进行排序的,对这些按row-key排序的数据进行水平切分,每一片称为一个Region,它有startkey和endkey,Region的大小可以配置,一台RegionServer中可以放多个Region,表的行范围数据抽象
namespace: 在hbase中没有数据库的概念 , 使用namespace来实现DB的作用
表: hbase中有表的概念 ,是一张非常大的表 ,可以几十亿行,上百万列
rowkey:行建 , 行的唯一标识,数据排序 ,查询索引等行建是hbase设计的关键
CF:列族。一个列族中的所有列存储在相同的HFile文件中
HFile:HFile就是Hadoop磁盘文件,一个列族中的数据保存在一个或多个HFile中,这些HFile是对列族的数据进行水平切分后得到的。
MemStore:HFile在内存中的体现。当我们update/delete/create时,会先写MemStore,写完后就给客户端response了,当Memstore达到一定大小后,会将其写入磁盘,保存为一个新的HFile。HBase后台会对多个HFile文件进行merge,合并成一个大的HFile
详解内容尽在原理加强篇