HBase架构简析

一、HBase架构简介

《HBase架构简析》 HBase架构图

1、StoreFile

HBase数据的存储单元,底层使用HDFS存储。数据按照Cell(RowKey、Column Family、Column)排列,相同Cell按照timestamp倒序排列

2、HStore

对应一个Table在一个HRegion中的一个Column Family

3、HRegion

对应一个Table的一个Region在一个HRegionServer中的表达
HBase使用RowKey将表水平切割为多个Region

4、HRegionServer

用于存放和管理本地HRegion;
HBase在启动时由HMaster将HRegion分配给HRegionServer管理;
Client直接连接HRegionServer读写数据;

5、WAL

Write Ahead Log。它是HDFS上的文件,所有写操作都会先保证将数据写入WAL文件,防止HRegionServer宕机时MemStore中的数据丢失;
WAL以table + rowkey的方式记录一条条数据操作记录;

6、HMaster

管理HRegionServer,管理和分配HRegion给HRegionServer以实现负载均衡功能;
admin功能:table的DDL操作;

7、Zookeeper

协调系统,存放整个HBase集群的元数据和集群状态信息;
存放了hbase:meta文件所在位置,Client通过该文件定位table:rowkey所属Region及Region所在的RegionServer;

二、数据切分

HBase将Table按照RowKey的范围切分为多个Region,对应RowKey的数据被划分到对应的Region存储;
Region底层使用HDFS存储,在HBase启动时被分配给某一个HRegionServer管理;
总结:

  • 一个Table对应多个Region
  • 一条RowKey数据只存在于一个Region中
  • 一个Region同时只被一个HRegionServer管理
  • 一个HRegionServer管理多个Region,这些Region可以属于不同的Table

三、集群容灾

1、HFile存储容灾

  • HFile底层基于HDFS存储,HDFS的3个DataNode备份数据的方式保证数据分布式存储不丢失;
  • 当HDFS某个DataNode挂掉时,由HStore内置的HDFS客户端自动感知并切换到备份DataNode读写,切换过程对上层透明;

2、HRegionServer服务容灾

  • HBase启动时,HMaster分配HRegion给HRegionServer管理;
  • 某台HRegionServer服务不可用时,HMaster通过zk感知,并将对应收到影响的* HRegion列表分配给其他HRegionServer管理;
  • 其他HRegionServer通过读取WAL重建HRegion中table:rowkey的对应数据,重建完成后对外提供HRegion的读写服务;
  • 重建过程中,对应HRegion所属的数据服务不可用;

3、HMaster服务容灾

  • HMaster一般部署2台服务,通过zk完成热备;
  • 同时只有一台HMaster提供服务,当主HMaster服务宕机时,备HMaster立即通过zk感知并提供服务;

四、数据读写过程

1、数据的写入

  • client发起某table:rowkey数据的Put操作
  • client从Zookeeper获取hbase:meta文件所在的HRegionServer节点
  • client查询hbase:meta获取table:rowkey对应的HRegion,以及HRegion所在的HRegionServer,并缓存信息到本地
  • client直接发送put()请求给HRegionServer
  • HRegionServer将对应table:rowkey的put请求记录在WAL中
  • HRegionServer将对应table:rowkey的put请求数据写入HRegion对应的MemStore中
  • HRegionServer返回响应给client,put()操作完成
  • MemStore中的数据会在特定条件下持久化到HFile中,WAL文件也会定期roller精简

2、数据的读取

寻找Region的过程类似,略

五、HBase特性

1、CP系统(强一致性+分区容错性)

  • 每个RowKey的值只出现在一个Region
  • 同一时间一个Region只分配给一个HRegionServer
  • 行内的mutation操作都是原子的
  • 单个RowKey的put操作要么成功,要么完全失败

当某台RegionServer fail的时候,它管理的Region failover到其他RegionServer时,需要根据WAL来redo(redolog,有一种日志文件叫做重做日志文件),这时候进行redo的Region是unavailable的;所以hbase降低了可用性,提高了一致性。
设想一下,如果redo的region能够响应请求,那么可用性提高了,则必然返回不一致的数据(因为redo可能还没完成),那么hbase就是降低一致性来提高可用性了。

2、顺序磁盘IO

MemStore中的数据Cell是按照RowKey + Column Family + Column排序的,所以持久化到HFile的过程是顺序磁盘IO。数据一旦刷入HFile中就是持久化不可变的。

    原文作者:益文的圈
    原文地址: https://www.jianshu.com/p/3a67ac7c3c16
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞