Hbase 初学者(1) 基础特性
内容来自书籍 Apache HBase Primer
HBase是一个开源NoSQL数据库,基于列存储数据存储模型。HBase是Java语言编写的。提供了JAVA API,RESTfulAPI和Thrift.
基本特性
- 非关系型
- 基于列
- 分布式
- 可扩展
- 大数据存储
分布式
提供了两种分布式方式
- 伪分布式:所有HBase 守护进程运行在一个节点上。
- 完全分布式:守护进程运行在一个集群的多个节点上。
伪分布式可以运行在本地文件系统或者HDFS。当运行在本地分布式系统上时,无法保证持久性。如果文件没有正确关闭,编辑内容会丢失。
完全分布式模式只能运行的HDFS上。
HBase支持自动分片。
大数据存储
基于Hadoop和HDFS,提供低延迟,随机,实时读写大数据。随机读访问不是Hapood的特性,reader只能运行批处理,意思是数据只能被顺序访问来查找要执行的工作。
非关系型
灵活的数据模型
HBase里的基本存储单位是table。一个table包含一个或多个列簇,列簇由列组成。数据保存在row中,一个row是一个键值对集合。每一个row有一个唯一的row主键。row主键在数据添加时创建,用于排序和数据分片。
HBase提供灵活的schema模型,因此column被添加到表时不需要预定义。只有table和列簇需要预定义。一个列簇中的列都是紧邻存储的。表中的两行不需要相同的列。
Hbase不支持事务。Hbase甚至不是consistent,但是在记录级别有强一致性。强一致性说明总可以获的最新数据,但是会增加时间开销。换句话说,最终一致性会返回过期时间。
可扩展
Hbase中可水平扩展的基本单位是region。rows在region建分片。一个region存有一定范围内相连的row。一个表的数据可以保存在一个或多个region中。下图1-1中,region有12row,被分到两个regions中,每个6个row。
在Hadoop生态系统中的角色
Hbase保存数据在HDFS中的StoreFile中。HBase不使用MapReduce框架,但是可以作为MapReduce工作的源或者目标。
和Hadoop一样,HBase设计为在商用硬件上运行,具有对单个节点故障的容错。Hbase设计用于流式访问大数据集的批处理系统优化。当HBase用于随机读时,HBase没有为随机访问优化。HBase引起的随机读延迟,可以通过使用块缓存降低,但这样会增加堆内存储尺寸。
HBase可以用于实时分析,通过集合MapReduce和其他框架,比如Hive。
HBase和传统的关系数据库的区别
特性 | RDBMS | HBase |
---|---|---|
Schema | 特定的 | 灵活的 |
数据容量 | 小到中等(几千或百万行)TB | 大数据(亿级),PB |
主要查询语言 | SQL | Get,Put,Scan Shell commands |
数据类型 | 类型列 | 无数据类型 |
关系 | 支持 | 不支持 |
Joins | 支持 | 内建不支持,需要通过MapReduce来扩展 |
数据结构 | 高度结构化和静态结构,稳定的数据模型 | 非机构化,半结构化或结构化,灵活的数据模型 |
事务 | 支持 | 不支持 |
高级查询语言 | 支持 | 不支持 |
索引 | Primary,Secondary,B-Tree,Clustered | Secondary indexes |
一致性 | 强一致性,CAP一致性 | 强一致性,ACID |
扩展性 | 提供某种级别的垂直扩展性 | 水平扩展性,线性扩展 |
分布式 | 某种程度上 | 高分布式 |
实时查询 | 支持 | 支持 |
触发器 | 支持 | 通过协处理来提供类似RDBMS的触发器功能 |
Hardware | 特殊硬件 | 通用硬件 |
存储过程 | 支持 | 通过协处理器来支持 |
Java | 不需要 | 需要 |
高可用 | 支持 | 很好 |
容错性 | 某种大小的情况下 | 高容错性 |
正常化 | 需要大数据及 | 不需要 |
基于对象编程模型 | 因为聚合数据的复杂性,基于对象模型不适用join | 键值存储使得HBase适应面向对象编程模型 |
管理 | 更多的管理 | 更少的管理在自动分片,扩展和负载均衡 |
架构 | 单一 | 分布式 |
分片 | 支持受限。手动服务器分片。表隔离 | 自动分片 |
写性能 | 扩展性不好 | 线性扩展 |
单点错误 | 有 | 无 |
复制 | 异步 | 异步 |
存储模型 | 表空间 | HDFS的StoreFile |
压缩 | 内建在RDBMS的存储引擎/表/索引。 | 内建Gzip组件 |
缓存 | 查询缓存中的标准缓存和元数据缓存 | 内存缓存 |
主要数据对象 | Table | Table |
读写吞吐量 | 1000s 请求每秒 | 每秒百万级请求 |
安全性 | 验证/授权 | 验证/授权 |
基于行/列 | 基于行 | 基于列 |
稀疏表 | 适用于稀疏表 | 没有为稀疏表优化 |
宽窄表 | 窄表 | 宽表 |
MapReduce整合 | 不支持 | 支持 |