1. HBase简介
1.1 为什么使用HBase
传统的RDBMS关系型数据库(MySQL/Oracle)存储一定量数据时进行数据检索没有问题,可当数据量上升到非常巨大规模的数据(TB/PB)级别时,传统的RDBMS已无法支撑,这时候就需要一种新型的数据库系统更好更快的处理这些数据。我们可以选择HBase。
1.2 HBase的地位
HBase占有举足轻重的作用,它居于HDFS之上,与MapReduce可以集成,与Hive也可以集成,HBase表中的数据与Hive表的数据可以关联,Spark也可以读HBase的数据。
2. HBase是什么
- HBase技术来源于 Fay Chang 所撰写的Google论文:Bigtable(一个结构化数据的分布式存储系统)。
- HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于 非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
- HBase(Hadoop Database),是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
- HBase实际上是一个Hadoop的数据库系统,它的主要作用和传统数据库系统一样存储数据和检索数据。不同的是,HBase可以存储海量数据及海量数据的检索。
2.1 HBase与Hadoop的对比
Hadoop/HDFS | HBase |
为分布式存储提供文件系统 | 提供表状的面向列的数据存储 |
针对存储大尺寸的文件进行优化,不需要对这些文件进行随机读写 | 针对表状数据的随机读写进行优化 |
直接使用文件 | 使用key-value对数据 |
数据模型不灵活 | 提供灵活的数据模型 |
使用文件系统和处理框架 | 使用表状存储,依赖内置的Hadoop MapReduce支持 |
为一次写多次读进行优化 | 为多次读写进行优化 |
2.2 HBase与关系型数据库的功能对比
关系型数据库RDBMS | HBase |
支持向上扩展。(若需要更多的磁盘、内存和处理能力,需要升级服务器) | 支持向外扩展。(若需要更多的磁盘、内存和处理能力,不需要升级服务器,需要为集群添加新的服务器) |
使用SQL查询从表中读取数据 | 使用API和MapReduce来访问HBase表的数据 |
面向行(每行数据都是一个连续的页的单元) | 面向列(每列数据都是一个连续的页的单元) |
数据总量依赖于服务器配置 | 数据总量不依赖于服务器配置,而是总的机器数量 |
模式更严格 | 模式灵活,不太严格 |
具有ACID支持 | 没有内建的对HBase的支持 |
适合结构化数据 | 适合结构化和非结构化数据 |
传统关系型数据库一般是中心化的 | 通常是分布式的 |
一般能保证事务完整性 | HBase不支持事务 |
支持JOIN | 不支持JOIN |
支持参照完整性 | 没有内置的参照完整性支持 |
- 当数据量比较小,RDBMS可以支撑的时候,可以用RDBMS来实现,若需要在线事务处理时,RDBMS是合适的。
- 但当有海量数据需要处理时,可以选择HBase,并且HBase由于是列存储型数据库,在聚合计算和数据分析时非常快。
列存储数据库的优点 | 列存储数据库的缺点 |
具有高效和数据压缩的内部支持 | JOIN和多表合并数据的查询性能不好 |
支持快速数据检索 | 更新过程中有大量的写入和删除操作,需要频繁合并和分裂,降低了存储效率 |
管理和配置简单。支持横向扩展 | 对关系模型支持不好,分区和索引模式设计比较困难 |
聚合查询的性能非常高 | |
可高效地进行分区 | |
3. HBase架构设计及表的存储设计
- HBase是水平扩展的、分布式的、开源有序映射数据库。它运行在Hadoop文件系统HDFS上。它不要求有预定义的模式,可以被看做弹性扩展的多维表格,通过动态添加列,在数据插入或查询之前修改列结构,以支持任意的数据结构。
- HBase是一个建立在HDFS上的列存储数据库,具有至此线性扩展(横向扩展)、自动故障转移、自动分区及模式自由等特性。
3.1 HBase体系架构图
3.2 HBase架构设计及表的存储设计
- Master
为HBase的主节点,用来协调客户端应用程序和RegionServer的关系,同时用来监控和记录元数据的变化和管理。
- RegionServer
是从节点,用region的形式处理实际的表。region是HBase表的基础单元组件,它存储了分布式表。所以HBase表和HBase集群利用Master和RegionServer来协同工作。
- ZooKeeper
是一个高性能、集中化、分布式应用程序协调服务,它为HBase提供了分布式同步和组服务。在HBase中,它用来选举集群主节点Master,以便跟踪可用的在线服务器,同时维护集群的元数据。一般安装多个,用于提供Master的高可用性。
通常,Master和Hadoop的NameNode进程运行在同一台主机上,与DataNode通信以读写HDFS的数据。RegionServer跟Hadoop的DataNode运行在同一台主机上。