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

hbase权威指南学习笔记--架构--存储的更多相关文章

  1. hbase权威指南学习笔记--过滤器

    1.使用hbase是shell客户端进行过滤查询 scan 'testtable',{COLUMNS=>'colfam1:col-0',FILTER=>RowFilter.new(Comp ...

  2. HTTP权威指南-学习笔记

    目录 HTTP权威指南-学习笔记 HTTP: Web的基础 URL与资源 HTTP报文 连接管理 HTTP结构 Web服务器 代理 缓存 集成点: 网关,隧道及中继 Web机器人 识别,认证与安全 客 ...

  3. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...

  4. Hadoop权威指南学习笔记一

    Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ...

  5. Hadoop权威指南学习笔记三

    HDFS简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考.有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my ...

  6. CSS权威指南学习笔记系列(1)CSS和文档

    题外话:HTML是一种结构化语言,而CSS是它的补充:这是一种样式语言.CSS是前端三板斧之一,因此学习CSS很重要.而我还是菜鸟,所以需要加强学习CSS.这个是我学习CSS权威指南的笔记,如有不对, ...

  7. Hadoop权威指南学习笔记二

    MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...

  8. IDA Pro权威指南学习笔记(一)

    一直不懂逆向,最近刚好不忙,于是学习逆向,用来做笔记,顺便和大家分享交流. 参考书籍<IAD PRO权威指南> 工具: PETools: ETools 是另一款很好的PE文件编辑工具,以前 ...

  9. JavaScript权威指南学习笔记6

    这两天主要翻看了书中的第18-22章,重点看了第17章:事件化处理,其它几章节主要是翻了下书知道有相关的概念,没有真正理解其中的内容,或者没有考虑究竟如何能把里面的内容应用到实际的项目中.说的讽刺一点 ...

随机推荐

  1. Jquery:Jquery中的事件<一>

    由于今天有一个比较重要的面试,所以昨天晚上对以前做的一些项目做了一下总结,直接导致昨天的学习笔记断更了,哎,计划永远赶不上变化啊!今天学习了Jquery中是事件,就此做一个笔记,便于日后复习. 一.加 ...

  2. iOS — Autolayout之Masonry解读

    前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时 ...

  3. mysql-5.7.12-winx64.zip Windows (x86, 64-bit), ZIP Archive版免安装配置

    1.下载免安装版压缩包 下载地址:http://dev.mysql.com/downloads/mysql/ 选择符合你的操作系统的版本,点击download进入下载页面 不用注册也可以点击下载连接进 ...

  4. vc2015编译protobuf

    下载地址:https://github.com/google/protobuf 1.编译通过cmake生成sln文件来编译用cmd命令 cd 到3.0.0-beta-4\cmake mkdir bui ...

  5. Mysql学习(慕课学习笔记3)数据类型

    数据类型 数据类型是指.存储过程参数.表达式和局部变量的数据特征, 它决定了数据的存储格式,代表了不同的信息类型. 整型 Tinyint      有符号位 -128到127   无符号位 0到255 ...

  6. Bootstrap定制(二)less基础语法

    前几日花了一天去看less,这几日在捣鼓其他东西,项目也在有序的进行中,今天花点时间整理下less的基础语法,也分享实际中的一些经验,与众人共享. 本篇笔者以less的基础语法着手,并配合bootst ...

  7. HTML5 video 事件

    1.获取视频时间长度 当视频载入video后,使用 onloadedmetadata 事件获取视频的时间长度. video.onloadedmetadata = function () { var v ...

  8. ubuntu 下搭建一个python3的虚拟环境(用于django配合postgresql数据库开发)

     #安装python pip  (在物理环境中安装) sudo apt-get install python-pip       sudo apt-get install python3-pipsud ...

  9. 【转】myget编译过程中make出错的解决办法

    源链接:http://www.tangqizhong.info/?p=741 myget(至今不明白为什么它对应的命令是mytget…)是我从用linux之后就开一直在用的命令行下载工具(其次也会用到 ...

  10. XJOI网上同步训练DAY1 T3

    思路:一开始看到这题的时候想DP,可是发现貌似不行..因为有前缀也有后缀,而且有的后缀会覆盖到现在的前缀,这就不满足无后效性了啊! 但是有个很巧妙的思路:如果我们知道a[i]的最大值,那么p的数量和q ...