hbase权威指南学习笔记--架构--存储

时间:2022-08-08 14:26:21

hbase权威指南学习笔记--架构--存储

HBase主要处理两种文件:预写日志(Write-Ahead Log,WAL),实际的数据文件。

一个基本的流程是客户端首先联系ZooKeeper子集群查找行健数据所在的region服务器名。(通过ZooKeeper获取含有-ROOT-的region服务器名【主机名】来完成,通过含有-ROOT-的region服务器可以查询含有.META.表中对应的region服务器名,其中含有行健信息。这两处的主要内容都被缓存下来,并且都只查询一次。最终通过查询.META.服务器来获取客户端查询的行健数据所在region的服务器名。)。一旦知道了数据的实际位置,即region的位置,HBase会缓存这次的查询的信息,同时直接联系管理实际数据的HRegionServer。所以,之后客户端可以通过缓存的信息很好的定位所需的数据位置,不用再次查找.META.表。

HRegionServer负责打开region,并创建对应的HRegion实例。当HRegion被打开后,它会为每个表的HColumnFamily创建一个Store实例,这些列族是用户以前创建表时定义的。每个Store实例包含一个或多个StoreFile实例,它们是实际数据存储文件HFile的轻量级封装。每个Store还有其对应的一个MemStore,一个HRegionServer分享了一个HLog实例。

当数据写入到WAL中,数据就会在放到MemStore中,同时会检查MemStore是否已满,如果满了,会请求刷写到磁盘中去(刷写请求有另外一个HRegionServer的线程处理)。如果配置了hbase.hregion.preclose.flush.size(默认5MB),此时有出发了关闭region服务器操作时,会先运行“pre-flush”操作,清理这个需要关闭的memstore,然后将这个region下线。当一个region下线了,我们无法再进行任何写操作。如果一个memstore很大的时候,flush操作会消耗很多时间。"pre-flush"操作意味着在region下线之前,会先把memstore清空。这样在最终执行close操作的时候,flush操作会很快。关闭region服务器会强制所有的memstore被刷写到磁盘,而不会关心memstore是否达到了配置的最大值。

当一个region里存储的文件增长到大于配置的hbase.hregion.max.filesize大小或者在列族层面配置的大小时,region会被一分为二。region服务器通过在父region中创建splits目录来完成这个过程,接下来关闭该region不在接收任何请求。然后region服务器在splits目录中建立必须的文件结构来准备新的子region,这个过程完成后。将两个子region移到表目录中,在同一个服务器中并行打开,同时更新.META.表 ,这时也会对region中的内容进行合并,合并过在替换引用文件之前会把父region的存储文件异步重写道两个子region中。

HBase支持两种合并:minor和major。minor合并负责重写最后生成的几个文件到一个更大的文件;major把所有的文件压缩成一个单独的文件。

hbase为了防止小文件(被刷到磁盘的menstore)过多,以保证保证查询效率,hbase需要在必要的时候将这些小的store file合并成相对较大的store     file,这个过程就称之为compaction。在hbase中,主要存在两种类型的compaction:minor  compaction和major compaction。

          major compaction 的功能是将所有的store file合并成一个,触发major compaction的可能条件有:major_compact 命令、majorCompact() API、region server自动运行(相关参数:hbase.hregion.majoucompaction 默认为24 小时、hbase.hregion.majorcompaction.jetter 默认值为0.2 防止region server 在同一时间进行major compaction)。hbase.hregion.majorcompaction.jetter参数的作用是:对参数hbase.hregion.majoucompaction 规定的值起到浮动的作用,假如两个参数都为默认值24和0,2,那么major compact最终使用的数值为:19.2~28.8 这个范围。

         minor compaction的运行机制要复杂一些,它由一下几个参数共同决定:

                   hbase.hstore.compaction.min :默认值为 3,表示至少需要三个满足条件的store file时,minor compaction才会启动

                   hbase.hstore.compaction.max 默认值为10,表示一次minor compaction中最多选取10个store file

                   hbase.hstore.compaction.min.size 表示文件大小小于该值的store file 一定会加入到minor compaction的store file中

                   hbase.hstore.compaction.max.size 表示文件大小大于该值的store file 一定会被minor compaction排除

                   hbase.hstore.compaction.ratio 将store file 按照文件年龄排序(older to younger),minor compaction总是从older store file开始选择,如果该文件的size 小于它后面hbase.hstore.compaction.max 个store file size 之和乘以 该ratio,则该store file 也将加入到minor compaction 中。

Reference

             1.http://blog.csdn.net/azhao_dn/article/details/8867036