HBase学习

其余更多java基础文章:
java基础学习(目录)java


HBase框架

HBase内置有zookeeper,但通常咱们会有其余的Zookeeper集群来监管master和regionserver,Zookeeper经过选举,保证任什么时候候,集群中只有一个活跃的HMaster,HMaster与HRegionServer 启动时会向ZooKeeper注册,存储全部HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBase的schema和table元数据,默认状况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster再也不是单点故障。通常状况下会启动两个HMaster,非Active的HMaster会按期的和Active HMaster通讯以获取其最新状态,从而保证它是实时更新的,于是若是启动了多个HMaster反而增长了Active HMaster的负担。

一个RegionServer能够包含多个HRegion,每一个RegionServer维护一个HLog,和多个HFiles以及其对应的MemStore。RegionServer运行于DataNode上,数量能够与DatNode数量一致。缓存

HBase重要概念

HMaster

  • 监控RegionServer
  • 处理RegionServer故障转移
  • 处理元数据的变动
  • 处理region的分配或移除
  • 在空闲时间进行数据的负载均衡
  • 经过Zookeeper发布本身的位置给客户端

Write-Ahead logs

HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值能够设定)。若是机器忽然原地爆炸,把数据保存在内存中会引发数据丢失,为了解决这个问题,数据会先写在一个叫作Write-Ahead logfile的文件中,而后再写入内存中。因此在系统出现故障的时候,数据能够经过这个日志文件重建。服务器

RegionServer

  • 负责存储HBase的实际数据
  • 处理分配给它的Region
  • 刷新缓存到HDFS
  • 维护HLog
  • 执行压缩
  • 负责处理Region分片

Region

Hbase表的分片,HBase表会根据RowKey值被切分红不一样的region存储在RegionServer中,在一个RegionServer中能够有多个不一样的region负载均衡

HFile

这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。框架

Store

HFile存储在Store中,一个Store对应HBase表中的一个列族post

MemStore

顾名思义,就是内存存储,位于内存中,用来保存当前的数据操做,因此当数据保存在WAL中以后,RegsionServer会在内存中存储键值对。学习

Zookeeper

HMaster与HRegionServer 启动时会向ZooKeeper注册,存储全部HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBase的schema和table元数据,默认状况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster再也不是单点故障。通常状况下会启动两个HMaster,非Active的HMaster会按期的和Active HMaster通讯以获取其最新状态,从而保证它是实时更新的,于是若是启动了多个HMaster反而增长了Active HMaster的负担。3d

HBase读写流程

HBase读数据流程

  1. HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在的位置信息,即找到这个meta表在哪一个HRegionServer上保存着。日志

  2. 接着Client经过刚才获取到的HRegionServer的IP来访问Meta表所在的HRegionServer,从而读取到Meta,进而获取到Meta表中存放的元数据。cdn

  3. Client经过元数据中存储的信息,访问对应的HRegionServer,而后扫描所在HRegionServer的Memstore和Storefile来查询数据。

  4. 最后HRegionServer把查询到的数据响应给Client。

HBase写数据流程

  1. Client也是先访问zookeeper,找到Meta表,并获取Meta表元数据。肯定当前将要写入的数据所对应的HRegion和HRegionServer服务器。

  2. Client向该HRegionServer服务器发起写入数据请求,而后HRegionServer收到请求并响应。

  3. Client先把数据写入到HLog,以防止数据丢失。而后将数据写入到Memstore。若是HLog和Memstore均写入成功,则这条数据写入成功。

    • 若是Memstore达到阈值,会把Memstore中的数据flush到Storefile中。
    • 当Storefile愈来愈多,会触发Compact合并操做,把过多的Storefile合并成一个大的Storefile。
    • 当Storefile愈来愈大,Region也会愈来愈大,达到阈值后,会触发Split操做,将Region一分为二。
相关文章
相关标签/搜索