ITPub博客

首页 > 大数据 > > Hbase架构及读写过程分析

Hbase架构及读写过程分析

作者:浪花小雨滴 时间:2020-05-09 11:08:10 0 删除 编辑

一、物理存储

一张表在行的方向上可以切分为多个Region,也就是说一个Region就是若干行数据的集合,初始阶段只有一个Region;

每行都有一个rowkey且按rowkey的字典序排序;

一张表的逻辑结构


Region是分布式存储(但不是存储的最小单元)和负载均衡的最小单元,也就是说一个RegionServer上可以有多个Region,但是一个Region只能在一个RegionServer上;


一个Region中包含一个或多个Store,一个Store对应一个列族;

每个Store有一个memStore和若干个StoreFile组成以及rowkey索引(记录每个StoreFile中rowkey的范围,方便get数据),写一行数据时,Hbase不会直接写到磁盘,而是先写到内存memStrore中,当memStore达到阈值后才刷写到磁盘,此时的写入是按rowkey+版本+列名顺序写入的,所以StoreFile中的数据是有序的(但是StoreFile之间没有顺序),当StoreFile文件数量达到阈值后,会触发合并,将多个小的StoreFile合并为大的StoreFile


StoreFile是以HFile的形式存储在HDFS中的,HFile的结构如下:

其中KeyType有两种类型,1:Put,2Delete




WAL log

每个Region Server维护一个Hlog,而不是每个Region一个。这样不同region(来自不同table)的日志会混在一起,这样做的目的是不断追加单个文件相对于同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对table的写性能。带来的麻烦是,如果一台region server下线,为了恢复其上的region,需要将region server上的log进行拆分,然后分发到其它region server上进行恢复。


二、系统架构

Client

包含访问Hbase的接口及一些cache信息,如Region的位置信息;

Zookeeper

保证任何时候,集群中只有一个master;

存贮所有Region的寻址入口;

实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master;

存储Hbase的schema,包括有哪些table,每个table有哪些column family;

HMaster

为Region server分配region,负责region server的负载均衡;

管理用户对Table的增、删、改、查操作;

发现失效的region server并重新分配其上的region;

GFS上的垃圾文件回收;

在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移;


三、分析通过rowkey获得一条数据的过程

1、确定region位置

HBase有两张系统表META和ROOT,结构如下:

可以通过startKey和endKey确定某个rowkey所在的Region,但是有个问题当数据量特别大的时候,META表也是分布在多个Region上的,如何找到全部的META表中的数据进行匹配呢?

Hbase的做法是再创建一张表ROOT,在其中记录所有的META数据所在的Region,然后把ROOT所在的Region放到Zookeeper中,这样我们就可以通过rowkey找到数据在哪个Region中了。

2、确定在哪些StoreFile中;

一个Region中有若干个Store,一个Store钟又有多个SoteFile,数据是存放到StoreFile中的,那么我们如何找到StoreFile呢?

首先Region中的Store是和列族对应的(所以应该尽量将经常要查询的列放到一个列族中,避免在多个Store中查找数据),所以定位Store很简单。接下来是定位StoreFile,StoreFile内部是有序的,在Store中做一个StoreFile的索引也是比较方便的,所以可以通过这个索引获取到rowkey在哪些StoreFile中,为什么会在多个StoreFile中?因为Hbase的增、删、改操作本质上都是增,只是做了一些标记而已。在StoreFile合并前,一个rowkey确实可能分散在多个StoreFile中(个人理解即使合并也未必能把一个rowkey合并到一起)。找到了StoreFiles之后接下来应该就是多线程并发去筛选了,最终合并结果返回。


四、增、删、改分析


五、思考

1、列存储体现在哪里?

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3163711/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39905