HBase数据库介绍
1. HBase介绍
- HBase是一个分布式的、面向列(但不是列存储)的开源数据库,HBase在Hadoop之上提供了类似于Bigtable的能力。
- HBase 不支持 SQL 一类的结构化查询语言;事实上,HBase 根本不是关系数据存储库。
- HBase 依赖于 zookeeper 实现高性能协调。 zookeeper 内置到 HBase 中,但如果您正在运行生产集群,那么建议您配备一个与 HBase 集成的专用 ZooKeeper 集群。
1.1 数据模型
HBase 是一个面向 列族 的数据库管理系统。表 schema 仅定义列族,表具有多个列族,每个列族可以包含任意数量的列,列由多个单元格(cell )组成,单元格可以存储多个版本的数据,多个版本数据以时间戳进行区分。
下图为 HBase 中一张表的:
- RowKey 为行的唯一标识,所有行按照 RowKey 的字典序进行排序;
- 该表具有两个列族,分别是 personal 和 office;
- 其中列族 personal 拥有 name、city、phone 三个列,列族 office 拥有 tel、addres 两个列。

Hbase 的表具有以下特点:
- 容量大:一个表可以有数十亿行,上百万列;
- 面向列:数据是按照列存储,每一列都单独存放,数据即索引,在查询时可以只访问指定列的数据,有效地降低了系统的 I/O 负担;
- 稀疏性:空 (null) 列并不占用存储空间,表可以设计的非常稀疏 ;
- 数据多版本:每个单元中的数据可以有多个版本,按照时间戳排序,新的数据在最上面;
- 存储类型:所有数据的底层存储格式都是字节数组 (byte[]),没有类型;
- 随机查询:针对 Rowkey 的查询能够达到毫秒级别
1.2 特点
- 强一致性读/写- HBASE不是“最终一致的”数据存储
- 它非常适合于诸如高速计数器聚合等任务
 
- 自动分块- HBase表通过Region分布在集群上,随着数据的增长,区域被自动拆分和重新分布
- 自动RegionServer故障转移
 
- Hadoop/HDFS集成- HBase支持HDFS开箱即用作为其分布式文件系统
 
- MapReduce- HBase通过MapReduce支持大规模并行处理,将HBase用作源和接收器
 
- Java Client API- HBase支持易于使用的 Java API 进行编程访问
 
- Thrift/REST API
- 块缓存和布隆过滤器- HBase支持块Cache和Bloom过滤器进行大容量查询优化
 
- 运行管理- HBase为业务洞察和JMX度量提供内置网页。
 
1.3 应用场景
- 对象存储- 不少的头条类、新闻类的的新闻、网页、图片存储在HBase之中,一些病毒公司的病毒库也是存储在HBase之中
 
- 时序数据- HBase之上有OpenTSDB模块,可以满足时序类场景的需求
 
- 推荐画像- 用户画像,是一个比较大的稀疏矩阵,蚂蚁金服的风控就是构建在HBase之上
 
- 时空数据- 主要是轨迹、气象网格之类,滴滴打车的轨迹数据主要存在HBase之中,另外在技术所有大一点的数据量的车联网企业,数据都是存在HBase之中
 
- CubeDB OLAP- Kylin一个cube分析工具,底层的数据就是存储在HBase之中,不少客户自己基于离线计算构建cube存储在hbase之中,满足在线报表查询的需求
 
- 消息/订单- 在电信领域、银行领域,不少的订单查询底层的存储,另外不少通信、消息同步的应用构建在HBase之上
 
- Feeds流- 典型的应用就是xx朋友圈类似的应用,用户可以随时发布新内容,评论、点赞。
 
- NewSQL- 之上有Phoenix的插件,可以满足二级索引、SQL的需求,对接传统数据需要SQL非事务的需求
 
- 其他- 存储爬虫数据
- 海量数据备份
- 短网址
 
2. 对比
2.1 RDBMS vs HBase
- 结构 - RDBMS(关系型数据库) - HBase - 数据库以表的形式存在 - 支持向上扩展(买更好的服务器)以表形式存在 - 支持FAT、NTFS、EXT、文件系统 - 使用SQL查询支持HDFS文件系统 - 使用主键(PK) - 面向行,即每一行都是一个连续单元使用行键(row key) - 通过外部中间件可以支持分库分表,但底层还是单机引擎 - 数据总量依赖于服务器配置原生支持分布式存储、计算引擎 - 使用行、列、单元格 - 使用行、列、列蔟和单元格 
- 功能 
| RDBMS(关系型数据库) | HBase | 
|---|---|
| 支持向上扩展(买更好的服务器) | 支持向外扩展 | 
| 使用SQL查询 | 使用API和MapReduce、Spark、Flink来访问HBase表数据 | 
| 面向行,即每一行都是一个连续单元 | 面向列蔟,即每一个列蔟都是一个连续的单元 | 
| 数据总量依赖于服务器配置 | 数据总量不依赖具体某台机器,而取决于机器数量 | 
| 具有ACID支持 | HBase不支持ACID(Atomicity、Consistency、Isolation、Durability) | 
| 适合结构化数据 | 适合结构化数据和非结构化数据 | 
| 传统关系型数据库一般都是中心化的 | 一般都是分布式的 | 
| 支持事务 | HBase不支持事务,支持的是单行数据的事务操作 | 
| 支持Join | 不支持Join | 
2.2 HDFS vs HBase
| HDFS | HBase | 
|---|---|
| HDFS是一个非常适合存储大型文件的分布式文件系统 | HBase构建在HDFS之上,并为大型表提供快速记录查找(和更新) | 
| HDFS它不是一个通用的文件系统,也无法在文件中快速查询某个数据 | HBase内部将大量数据放在HDFS中名为「StoreFiles」的索引中,以便进行高速查找 | 
| Hbase比较适合做快速查询等需求,而不适合做大规模的OLAP应用 | 
2.3 Hive vs Hbase
Hive:
- 数据仓库工具- Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询
 
- 用于数据分析、清洗- Hive适用于离线的数据分析和清洗,延迟较高
 
- 基于HDFS、MapReduce- Hive存储的数据依旧在DataNode上,编写的HQL语句终将是转换为MapReduce代码执行
 
HBase:
- NoSQL数据库- 是一种面向列存储的非关系型数据库。
 
- 用于存储结构化和非结构化的数据- 适用于单表非关系型数据的存储,不适合做关联查询,类似JOIN等操作。
 
- 基于HDFS- 数据持久化存储的体现形式是Hfile,存放于DataNode中,被ResionServer以region的形式进行管理
 
- 延迟较低,接入在线业务使用- 面对大量的企业数据,HBase可以直线单表大量数据的存储,同时提供了高效的数据访问速度
 
总结Hive与HBase:
- Hive和Hbase是两种基于Hadoop的不同技术
- Hive是一种类SQL的引擎,并且运行MapReduce任务
- Hbase是一种在Hadoop之上的NoSQL 的Key/value数据库
- 这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到HBase,或者从HBase写回Hive