Hbase(一)

Hbase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储。

1.HMaster

监控RegoinServer
处理 RegoinServer的故障转移
处理元数据的变更
处理regoin的分配或者移除
在空闲时间进行负载均衡
通过zookeeper发布自己的位置给客户端

RegoinServer

负责存储Hbase的实际数据(hfile和hlog最终也会写入hdfs)
处理分配给他的regoin
刷新缓存到hdfs
维护hlog
执行压缩
负责处理regoin分片

RegoinServer的组件

1) Write-Ahead logs
HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
2)HFile
这是在磁盘上保存原始数据的实际物理文件,是实际存储的文件
3)store
Hfile存储在store中,一个store对应表中的一个列族。
4)MemStore
内存存储位于内存中,用来保存当前的数据操作,所以当数据保存到wal中之后,regoinServer会在内存中储存键值对。
5)Regoin
Hbase表的分片,Hbase表会根据RowKey值被切分成不同的regoin存储在regoinServer中在一个regoinServer中可以有多个不同的regoin。

HBase的架构

HBase一种是作为存储的分布式文件系统,另一种是作为数据处理模型的MR框架。因为日常开发人员比较熟练的是结构化的数据进行处理,但是在HDFS直接存储的文件往往不具有结构化,所以催生出了HBase在HDFS上的操作。如果需要查询数据,只需要通过键值便可以成功访问。

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) Client也是先访问zookeeper,找到Meta表,并获取Meta表信息。
2) 确定当前将要写入的数据所对应的RegionServer服务器和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一分为二。
提示:因为内存空间有限,溢写的过程必定伴随产生大量的小文件。

你可能感兴趣的:(Hbase)