简介:
HBase(Hadoop Database):一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价的PC Server上搭建起大规模机构化存储集群。
HBase是一个山寨版本的BigTable,不过它站在Hadoop这个巨人的肩膀上!
HBase是一个非关系型数据库(NoSQL数据库)
| NoSQL | 关系型数据库 |
数据模型 | 适合结构化、非结构化和半结构化的数据 | 适用于结构化的数据 |
扩展性 | 易于扩展,如添加节点以及扩容 | 较难 |
语言 | 不同数据库操作不同 | 标准SQL或类SQL |
模式Schema | 随时添加字段 | 必须预先定义好,不方便扩展 |
HBase以表的形式存储数据
表的特点:
- 大:一个表可以有上亿行,上百万列
- 面向列:面向列(族)的存储和权限控制,列(族)独立检索
- 稀疏:对于为null的列,并不占用存储空间,因此,表可以设计的非常疏松
下图是Hadoop生态系统:
HBase位于结构化存储层;
Hadoop HDFS为HBase提供了高可靠性的底层存储支持
Hadoop MapReduce为HBase提供了高性能的计算能力
Zookeeper为HBase提供了稳定服务和failover机制
此为,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变得非常简单。Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库向HBase中迁移变的非常方便。
数据模型的关键概念:
- RowKey:用来检索记录的主键。访问HTable中的行,只有三种方式:
- 通过单个rowkey访问
- 通过rowkey的range
- 全表扫描
- Qualifier:可动态扩展的列,不需要先定义到HTable schema中,类似于关系型数据库中的列(Column)
- Famliy:列族,相当于一个Family下面有多个Qualifier。TTL(留存期),Versions(最大版本数),Comperssion(压缩方式)等待都是设置在这一级。
- Version/Timestamp:由单一rowkey对应family:qualifier下的值可以允许有多个版本,由毫秒级的时间戳来区分,也可以制定范围取任意版本对应的数据
- Cell:存储的最小单位。由rowkey+family:qualifier+timestamp三个维度唯一确定取出value
- Namespace:表命名空间,不指定则为默认“default”空间
HTable系统表:
hbase:namespace:存储htable的各表的命名空间
hbase:meta:存储htable的各个region起止rowkey信息,位置信息等
hbase:ad:记录一些表操作权限的信息,支持到qualifier的ACL,权限分类READ('R'),WRITE('W'),EXEC('X'),CREATE('C'),ADMIN('A')
HBase存储框架:
- Zookeeper:HBase集群依赖该组件
- Zookeeper Quorum存储-ROOT-表地址、HMaster地址
- HRegionServer把自己以Ephedral方式注册到Zookeeper中,HMaster随时感知各个HregionServer的健康情况
- HMaster:主要负责Table和Region的管理工作
- 管理用户对表的增删查改操作
- 管理HRegionServer的负载均衡,调整Region分布
- Region Split后,负责新Region的分布
- 在HRegionServer停机后,负责失效HRegionServer上Region迁移
- HRegionServer:最核心的模块,主要负责相应用户I/O请求,向HDFS文件系统中读写数据
- HRegionServer管理一些列HRegion对象
- 每个HRegion对应Table中一个Region,HRegion由多个HStore组成
- 每个HStore对应Table中一个Column Family的存储
- Column Family就是一个集中的存储单元,故将具有相同IO特性的Column放在一个Column Family会更高效
- Region:当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示,不同的region会被Master分配给相应的RegionServer进行管理
- HStore:HBase存储的核心。由MemStore和StoreFile组成,MemStore是Sorted Memory Buffer
- HLog:在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会丢失,为防止数据丢失,引入了HLog。
每次用户操作写入Memstore的同时,也会写一份数据到HLog文件,HLog文件定期会滚动出新,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知,HMaster首先处理遗留的HLog文件,将不同region的log数据拆分,分别放到相应region目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。 - HDFS:HDFS是一个分布式文件系统。它通过将一个大的文件划分成一个个固定大小的Block来实现分布式存储。每一个Block的默认大小为128MB。每一个Block都存在多个备份,并且被部署在不同的数据节点上,来保障数据的安全。目前,HBase的所有底层数据都以文件的形式交由HDFS来存储。HBase一侧本身不固化保存数据信息