WHAT
HBase
是一个构建在HDFS
上的 分布式列存储系统
;从逻辑上讲,HBase
将数据按表、行和列进行存储,他是一个分布式的
、稀疏的
、持久化存储的
多维度排序表;
如同mysql
数据是在linux
文件系统上,HBase
也是数据写入在HDFS
文件系统;
学习HBase
之前,先来介绍一下行存储
和列存储
:
其中,列式存储的数据库中,要想查询某一行的数据信息是很困难的。行、列存储需要有各自的应用场景。查询单个一行的数据还是用行式数据库,而做大数据分析或者存储时,因为不再考虑单独某一条数据,更适合列存储。
HBase特点:
- 良好的扩展性
- 读和写的强一致性
- 高可靠性
- 与MapReduce良好的集成
HBase数据类型:
在HBase中,一行数据是由行键(RowKey)作为键,包含多个 列族(Family),列族是由具有同时访问特性的多个列(Qualifer)组成的。数据可以有多版本的,由时间戳(TimeStamp)索引。
HBase一行的数据如下图:
HBase数据模型特点:
- 大:一个表可以有数十亿行,上百万列
- 面向列:面向列(族)的存储,列(族)独立检索
- 稀疏:对于空的列,并不占用存储空间,表可以设计的非常稀疏
- 数据版本: 每个单元的数据可以有多个版本
- 数据类型单一:HBase中的数据都是字节,没有类型
HBase物理模型:
Table
中的所有行都按照RowKey
的字典序排列;
Table
在行的方向上分割为多个Region
;
Region
是HBase中分布式存储和负载均衡的最小单元,不同的Region
分布在不同的RegionServer
上;
Region
虽然是分布式存储的最小单元,但并不是存储的最小单元。
Region由一个或多个Store组成,每个Store保存一个columns family,每个Store又由一个MemStore和0至多个StoreFile组成;MemStore存储在内存中,StoreFile存储在HDFS上。
HBase架构:
所有数据都是写到HDFS
上的,RegionServer
上引入了很多Region
。
Region
是一个大table中的某一个片段, RegionServer
主要负责数据的读和写。
RegionServer
启动后会在zookeeper
上建立一个节点,以RegionServer
名字命名。Hmaster
可以通过zookepper
看有哪些节点,一旦RegionServer
挂了,就会立刻知道。挂掉的RegionServer
上的Region
就会被从新分配其他的RegionServer
。
Hmaster
负责管理这些RegionServer
,这些Region
如何分配,所有增删改查都是Client
向Hmaster
进行请求,zookeeper
负责大量协调、一致性的服务。
关键问题:HBase上的数据是存在HDFS的,但HDFS数据是不支持在线的update,而HBase却支持update?
HBase所有的update都会认为是写,只是时间戳会更加新,而对于原来的数据时间戳都是老的,HBase并没有修改,还是写,会产生新的HDFS文件。HBase读的时候,会从HDFS整合,优先返回最新时间戳的数据。定期HBase会把这些很多时间戳的文件进行合并,避免了数据特别多。
WHERE
- 网页库(360搜索)
- 商品库(淘宝搜索)
- 云存储服务(小米)