hbase的读写机制详解,及flush参数的配置详解
1,HBase的的读写流程图,是一个二次寻址的过程
第一次直接到动物园管理员中找到元的元数据信息,即元对应的储存其他所有用户表的RegionServer的的位置,示意图中所给出的为regionserver1,然后第二次直接到regionserver1中的meta.region查询对应的{namespace:table,rowkey,column_family,column}的位置,这个具体的region根据start key和end key和自身的rowkey来决定,最后在Hmaster的调度下,Hregionserver(示意图中的regionserver2)执行最后的更新或插入操作
插入一个插曲,就是官方对空键的解释
翻译下来为:空键用于表示表开始和表结束。具有空开始的区域是表中的第一个区域。如果一个区域有一个空的开始键和一个空的结束键,它是表中唯一的区域,所以每一个rowkey都能找到自己唯一的区域,进行数据操作。
总结如下
1.1,读数据流程[scan get]
1)客户端访问zookeeper集群,zookeeper集群保存了meta的位置,获取meta被哪台服务器管理
2)client向这台regionserver服务器发起访问请求(-meta-)
3)客户端从元表的rgion获取到用户表信息(区域,所在RegionServer的,rowkey起始范围),向对应的RegionServer的服务器发起数据访问请求4)这台RegionServer的服务器接收到数据请求访问并响应数据给客户端1.2 ,写数据流程[create put delete] 1)客户端访问zookeeper集群,获取meta表位置,并确定当前写入数据属于哪个区域(rowkey),并确定regio对应的regionserver 2)client向这台regionserver服务器发起写入数据请求3)区域服务器接收请求,并响应写入4)先写入WAL(Hlog),再写入memstore(内存)5)当memstore数据达到阀值会冲洗进磁盘形成一个storefile文件(128M) --flush 6)小文件storefile合并成为一个大的storefile文 件 --compact 7)当storefile大小超过10G(默认值)时,会进行split ---拆分
2,HBASE的相关参数设置
##flush机制
<!--当memstore的大小超过这个值的时候,会flush到磁盘,默认为128M -->
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<!--一台服务器regionserver所有memstore总容量(Max Heap=983.4 M)(eg:100个region)达到40%就强制flush -->
<name>hbase.regionserver.global.memstore.upperLimit</name>
<value>0.4</value>
</property>
<!--当强制执行flush操作的时候,当低于这个值的时候,flush会停止。默认是堆大小的 35% -->
<property>
<name>hbase.regionserver.global.memstore.lowerLimit</name>
<value>0.35</value>
</property>
max heap 在hbase-env.sh 中进行设置,默认为1000M
## compacion机制
<! - 当小的storefile文件达到这个值,就会合并成大的storefile,因为同一个rowkey会始终合并成一个storefile - >
<property>
<name> hbase.hstore.compactionThreshold < / name>
<value> 3 </ value>
<source> hbase-default.xml </ source>
</ property>
<! - 一个Region中的所有HStoreFile的主要压缩的时间间隔。默认是1天。设置为0就是禁用这个功能 - >
<property>
<name> hbase.hregion.majorcompaction </ name>
<value> 86400000 </ value>
<source> hbase-default.xml
</ source> </ property>
## split机制
在工具组的命令中,可以对数据进行手动的flush,compact,split操作
组名:tools
命令:assign,balance_switch,balancer,catalogjanitor_enabled,catalogjanitor_run,catalogjanitor_switch,close_region,compact,flush,hlog_roll,major_compact,merge_region,move,split,trace,unassign,zk_dump
<! - 最大HFile大小。如果一个区域的HFiles的大小并且超过此值,则该区域被分割为两个.->
<property>
<name> hbase.hregion.max.filesize </ name>
<value> 10737418240 </ value>
<source> hbase-default。 XML </源>
</属性>