HBase
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。
HBase简介
HBase 是 Apache Hadoop 中的一个子项目,HBase 依托于 Hadoop 的 HDFS 作为最基本存储基础单元,通过使用hadoop的DFS 工具就可以看到这些这些数据存储文件夹的结构,还可以通过 Map/Reduce的框架(算法)对 HBase进行操作。
HBase适用场景
- 大数据量存储,大数据量高并发操作
- 需要对数据随机读写操作
- 读写访问均是非常简单的操作
HBase数据模型
HBase 以表的形式存储数据。表由行和列族组成。列划分为若干个列族(row family)
- 行键(RowKey)
- 行键是字节数组, 任何字符串都可以作为行键;
- 表中的行根据行键进行排序,数据按照 Row key 的字节序(byte order)排序存储;
- 所有对表的访问都要通过行键 (单个 RowKey 访问,或RowKey范围访问,或全表扫描)
- 列族(ColumnFamily)
- CF 必须在表定义时给出
- 每个 CF 可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入
- 数据按 CF 分开存储,Hbase 所谓的列式存储就是根据 CF 分开存储(每个CF 对应一个 Store),这种设计非常适合于数据分析的情形
- 时间戳(TimeStamp)
- 每个 Cell可能又多个版本,它们之间用时间戳区分
- 单元格(Cell)
-
Cell 由行键,列族:限定符,时间戳唯一决定
-
Cell中的数据是没有类型的,全部以字节码形式存储
- 区域(Region)
- HBase 自动把表水平(按 Row)划分成多个区域(region),每个region 会保存一个表里面某段连续的数据;
- 每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region 就会等分会两个新的region;
- 当 table 中的行不断增多,就会有越来越多的 region。这样一张完整的表被保存在多个Region 上。
- Region 虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个 Store 组成,每个 store 保存一个 columns family;每个Strore又由一个memStore和0至多个StoreFile组成, StoreFile包含HFile;memStore存储在内存中,StoreFile 存储在HDFS上
HBase架构及基本组件
1)Client:
- 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息。
2)Master
- 为Region server分配region
- 负责Region server的负载均衡
- 发现失效的Region server并重新分配其上的region
- 管理用户对table的增删改查操作
3)Region Server
- Regionserver维护region,处理对这些region的IO请求
- Regionserver负责切分在运行过程中变得过大的region
4)Zookeeper
- 通过选举,保证任何时候,集群中只有一个Master,Master与Regionservers启动时会向ZooKeeper注册
- 存储所有Region的寻址入口
- 实时监控Region server的上线和下线信息,并实时通知给Master
- 存储HBase的schema和table元数据
- 默认情况下,HBase管理ZooKeeper实例,比如,启动或者停止ZooKeeper
- ZooKeeper的引入是的Master不再是单点故障
HBase容错与恢复
每个 HRegionServer 中都有一个 HLog 对象,HLog 是一个实现 Write Ahead Log的类,在每次用户操作写入 MemStore 的同时,也会写一份数据到 HLog 文件中,HLog文件定期会滚动出新的,并删除旧的文件(已持久化到 StoreFile中的数据)。当HRegionServer意外终止后, HMaster会通过Zookeeper感知到, HMaster首先会处理遗留的 HLog 文件,将其中不同 Region 的Log 数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在 Load Region 的过程中,会发现有历史 HLog 需要处理,因此会 Replay HLog 中的数据到 MemStore中,然后 flush到StoreFiles,完成数据恢复