HBase-Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。
Hadoop生态圈中,它是其中一部分且利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务,主要用来存储非结构化和半结构化的松散数据(NoSQL非关系型数据库有redis、MongoDB等)。
关系型数据库的3大优点:
容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
使用方便:通用的SQL语言使得操作关系型数据库非常方便
易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
关系型数据库的3大瓶颈:
高并发读写需求:网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈,并且很难能做到数据的强一致性。
海量数据的读写性能低:网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的。
扩展性和可用性差:在基于web的结构当中,数据库是最难(但是可以)进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。
非关系型数据库特点:
Client:包含访问HBase的接口并维护cache来加快对HBase的访问。
HMaster:与RegionServer为一主多从架构,存在单点故障问题,一般设置多个HMaster,由Zookeeper提供协同服务。HMaster负责为RegionServer的负载均衡,管理用户对表的增删改操作,发现失效的RegionServer并重新分配其上的region。
Zookeeper:存储Hbase数据库中表的元数据信息metadata,为HMaster提供协同服务,存储所有region的寻址入口信息,Hbase高度依赖ZK。
RegionServer:负责维护region,处理对region的I/O请求。负责对过大region的切分。
HLog:在RegionServer中,存储表的元数据metadata与实际数据data,数据先存储在HLog后存储进region。
Region:存储在RegionServer中,表被划分为多个区域,存储在不同的region中,region超过一定大小就会裂变。
Store:一个region由多个store组成,一个store对应一个列族,包括MemStore和StoreFile。MemStore在内存中,StoreFile在磁盘中。数据先写入MemStore,达到某个阈值后落地到StoreFile。
当Region中所有的storefile大小之和过大,超过一定的阈值,就会发生裂变。
一张表可能很大,在表增大的过程中,存储表的Region会裂变成2个,当table中的行不断增多,就会有越来越多的region,一个RegionServer有过多的Region后,下一次裂变时Master会将分裂后的Region放到不同的RegionServer上存储,实现负载均衡。
Hbase表的元数据metadata存储在zookeeper中,而zookeeper还负责master的协同服务以及region入口地址的存储,如果zookeeper出现问题,hbase将无法正常工作。