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