HBase的角色
一.HMaster
功能:
1.监控ReginServer
2.处理ReginServer故障转移
3.处理元数据的变更
4.处理region的分配或移除
5.在空闲时间进行数据的复杂均衡
6.通过zookeeper发布自己的位置给客户端
二.RegionServer
功能:
1.负责存储HBase的实际数据
2.处理分配给他的Region
3.刷新缓存到HDFS
4.维护HLog
5.执行压缩
6.负责处理Region分片
组件:
Write-Ahead logs
HBase的修改记录,当对HBas读写数据的时候,数据不是直接写进磁盘,他会在内存中保留一段时间(时间及数量阈值可以设定)。但把数据保存在内存中有更高的概率导致数据丢失,为了解决这个问题,数据会现在一个叫做Write-Ahead-logfile的文件中,然后在写入内存,所以在系统出现故障的时候,数据可以通过这个日志文件重建。
HFile
这是在磁盘中保存原始数据的实际的物理文件,是实际的存储文件。
Store
HFile存储在Store中,一个Store对应HBase表中的一个列族
Memstore
顾名思义就是内存存储,位于内存中,用来保存当前数据的操作,所以当数据保存在WAL中之后,RegionServer会在内存中存储键值对。
Region
HBase表的分片,HBase表会根绝Rowkey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region。
HBase的架构
HBase是一种作为存储的分布式文件系统,另一种是作为数据处理模型的MR框架,因为日常开发人员比较熟练的结构化数据进行处理,但是在HDFS直接存储的文件往往不具有结构化,所以催生出了HBse在HDFS上的操作。如果需要查询的数据,只需要通过键值便可以成功访问。架构图如下所示
HBase内置有zookeeper,但一般我们会有其他的zookeeper集群来监管master和regionserver,zookeeper通过选举,包中任何时候,集群中只有一个活跃的HMaster,HMaster与HRegionServer启动时对象zk注册,存储所有HRegion的寻址入口,实时监控HRegionServer的上线和下线信息,并实时通知给HMaster,存储HBase的schma和table元数据,默认情况下HBase管理zookeeper实例,zookeeper的引入是的HMaster不再是单点故障,一般in工况下会启动两个HMaster,非Active的HMaster会定期和ActiveHmaster通信以获取最新状态,从而保证他是实时更新的,因而如果启动了多个HMaster反而增加了ActiveHMaster的负担。
一个RegionServer可以包含多个HRegion,每个RegionServer维护一个HLog,和多个HFiles以及对应的Memstore。RegionServer运行在DateNode上,数量可以与DateNode一致,架构图如下
HBase读写流程
一 Hbase读数据流程
1.HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里获取meta表所在的位置信息,即找到这个meta表在哪个HRegionServer上保存着。
2.接着client通过刚才获取到的HRegionServer的IP来访问Meta表所在的HRegionServer,从而读到Meta,进而获取到Meta表中存放的元数据。
3.Client通过原数据中存储的信息,访问对应的HRegionServer,然后扫描所在HRegionServer的Memstore和Storefile来查询数据。
4.最后HRegionServer把查询到的数据响应给Client。
二 HBase写数据流程
1.Clent先访问zookeeper,先找到Meta表,并获取Meta表信息。
2.确定当前将要写入的数据所对应的的HRegionServer服务器和Region
3.Client向该RegionServer服务器发起写入数据请求,然后RegionServer收到请求并响应。
4.Client先把数据写入到HLog,以防数据丢失。
5.然后把数据写进Memstore。
6.如果HLog和Memstore均写入成功,则这条数据写入成功,在此过程中如果Memstore达到阈值,会把Memstore中的数据flush到StoreFile中。
7.当StoreFile越来越多,会触发Compact合并操作,把过多的Storefile合并成一个大的Storefile。当Storefile越来越大,Region也会越来越大,达到阈值之后会触发Split操作,将Region一分为二