Hbase的基本架构以及对应的读写流程

1、HBase简介

1,定义:

  HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。数据库

2,HBase的架构图:

      

 

  架构角色:

  1)Master缓存

  Master是全部Region Server的管理者,其实现为HRegionServer,主要做用有:架构

a>对于表的DDL操做:create,delete,alter

b>对于RegionServer的操做:分配regions到每一个RegionServer,监控每一个RegionServer的状态,负载均衡和故障转移。

  2)Zookeeper:负载均衡

HBase经过Zookeeper来作Master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工做。

  3)WAL:分布式

因为数据要经MemStore排序后才能刷写到HFile,但把数据保存在内存中会有很高的几率致使数据丢失,为了解决这个问题,数据会先写入Write-Ahead logfile的文件中,而后再写入到Memstore中。因此在系统出现故障的时候,数据能够经过这个日志文件重建。

  4)MemStore:spa

写缓存,因为HFile中的数据要求是有序的,因此数据是先存储在MemStore中,排好序后,等到达刷写时机才会刷写到HFile,每次刷写都会造成一个新的HFile。

  5)StoreFile:日志

保存实际数据的物理文件,StoreFile以HFile的形式存储在HDFS上。每一个Store会有一个或多个StoreFile(HFile),数据在StoreFile上是有序的。

3,数据模型:

  

     1)Name Spacecode

命名空间,相似于关系型数据库的DataBase概念,每一个命名空间下有多个表。HBase有两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase的内置表,default表示用户默认使用的命名空间。

  2)Regionserver

相似于关系型数据库的表概念。不一样的是,HBase定义表时只须要生命列簇便可,不须要声明具体的列。这意味着,往HBase写入数据时,字段能够动态、按需指定。

    3)Rowblog

HBase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照RowKey的字典顺序存储的,而且查询时智能根据RowKey进行检索,因此RowKey的书籍十分重要。

   4)Cloumn

HBase中的每一个列都由Cloumn Family(列簇)和Cloumn Qualifier(列限定符)进行限定,例如info:name,info:age。建表时,只需指明列簇,而列限定符无需预先定义。

 5)Time Stamp

用于标识数据的不一样版本(version),每条数据写入时,若是不指定时间戳,系统会自动为其加上该字段,其值为写入HBase的时间。

   6)Cell

由{rowkey, column Family:column Qualifier, time Stamp} 惟一肯定的单元。cell 中的数据是没有类型的,所有是字节码形式存贮。

 

2、HBase写数据流程

  

1)Client 先访问 zookeeper,获取 hbase:meta 表位于哪一个 Region Server。 #zk   get /hbase/meta-region-server 2)访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey,查询出目标数据位于哪一个 Region Server 中的哪一个 Region 中。
  并将该 table 的 region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问。 #hbase scan 'hbase:meta' 查询到具体哪张表由哪一个Region Server维护
3)与目标 Region Server 进行通信; 4)将数据顺序写入(追加)到 WAL; 5)将数据写入对应的 MemStore,数据会在 MemStore 进行排序; 6)向客户端发送 ack; 7)等达到 MemStore 的刷写时机后,将数据刷写到 HFile。

 

3、HBase读数据流程

    

1)Client 先访问 zookeeper,获取 hbase:meta 表位于哪一个 Region Server。
2)访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey,查询出目标数据位于哪一个 Region Server 中的哪一个 Region 中。并将该 table 的 region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问。
3)与目标 Region Server 进行通信;
4)分别在 Block Cache(读缓存),MemStore 和 Store File(HFile)中查询目标数据,并将查到的全部数据进行合并。此处全部数据是指同一条数据的不一样版本(time stamp)或者不一样的类型(Put/Delete)。
5将从文件中查询到的数据块(Block,HFile 数据存储单元,默认大小为 64KB)缓存到Block Cache6)将合并后的最终结果返回给客户端。
相关文章
相关标签/搜索