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

时间: 2024-08-02 03:50:39

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

Hadoop权威指南学习笔记一

Hadoop权威指南学习笔记一 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习参考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my_acm 1. 数据的增长远远超过了磁盘的读取速度,传统的数据存储方式和分析方式变得不再适用于大数据的处理. Hadoop分为两大核心技术,HDFS(HadoopDistributed File System-分布式hadoop文件处理系统)和MapReduce(分为Map-数据映射等

Git权威指南学习笔记(一)Git初始化

1.在Git中配置用户名和邮件地址 $ git config --global user.name "Jymn_Chen" $ git config --global user.email "[email protected]" 注意把用户名和邮件地址替换成你自己的资料. 在这里的参数global表示配置的作用范围是当前用户,如果将参数改为system,那么配置的作用范围是系统中的所有用户. 2.创建版本库 新建一个目录并cd到目录中,执行以下命令: $ git i

Git权威指南学习笔记(二)Git暂存区

如下图所示: 左侧为工作区,是我们的工作目录. 右侧为版本库,其中: index标记的是暂存区(stage),所处目录为.git/index,记录了文件的状态和变更信息. master标记的是master分支所代表的目录树.HEAD指向master分支. objects标记的是Git的对象库,所处目录为.git/objects,文件索引建立了文件和对象库中对象实体之间的映射关系. 通过该图我们可以清晰地看出add,commit等命令的转化关系.下面通过git diff和git status两条命

JavaScript权威指南学习笔记之一

1.关于分号 javascript里面不强制使用分号来表示一行语句的结束,但是最好能够在写js之前,特别是在原有的js上面新增时,最好前置一个分号.避免这种情况发生:  2.JavaScript类型转换 3.关于=== ①如果类型不同则不等 ②null===null或undefined===undefined ③true===true或false===false ④NaN不等 ⑤0===0 0===-0 ⑥如果是同一个object,array,function则相等 4.关于== ①如果已经==

MongoDB权威指南学习笔记4---查询相关的知识点

1 find find({查询条件},{"key":1,"email":1})  后面表示返回哪些键 2 可用的比较操作符 $lt , $lte,$gt,$gte 比如db.users.find({"age":{"$gte":18,"$lte":30}}) 3不等于 find(...{"key":{"$ne":"value"}} 4 in find

MongoDB权威指南学习笔记5---索引相关的知识点

1 查看查询计划 db.user.find({"username":"xxx"}) .explain() db.doc.find({"es_y":"2014"}).explain() {  "cursor" : "BasicCursor",  "isMultiKey" : false,  "n" : 0,  "nscannedObject

sencha touch权威指南---学习笔记5-经纬度获取计算直线距离

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta charset="utf-8" />    <title></title>    <link rel="stylesheet" href="sdk-touch/resources/css/sencha-touch.

Hadoop权威指南学习笔记三

HDFS简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考.有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my_acm Hadoop说白了就是一个提供了处理分析大数据的文件集群,当中最重要的无疑是HDFS(Hadoop Distributed File System)即Hadoop分布式文件系统. 1. HDFS是一种以流式数据訪问模式(一次写入多次读取的模式)存储超大文件的系统. 其不须要的高端的硬件系统

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

题外话:HTML是一种结构化语言,而CSS是它的补充:这是一种样式语言.CSS是前端三板斧之一,因此学习CSS很重要.而我还是菜鸟,所以需要加强学习CSS.这个是我学习CSS权威指南的笔记,如有不对,请谅解和指出.谢谢大家.正文: 第一章 CSS和文档---------- 1.CSS,称为层叠样式表.使用CSS的理由有:a.易于使用,样式表能大大减少Web创作人员的工作量:b.在多个页面上使用样式,可以创建一个样式表,然后把这个样式表应用到多个页面:c.层叠,CSS还规定了冲突规则:这些规则统称