Hbase读写流程和StoreFile合并

1.简述hbase读写流程

1.1 读流程
  • 客户端与zk进行连接;从zk找到meta表的region的位置,即meta表的数据存储在某个HReginServer上;客户端与这个HRegionServer建立连接,然后读取meta表中的数据;
  • 根据要查询的namespace、表名、rowkey信息。找到对应的的region信息
  • 找到相应的HRegionServer
  • 找到对应的region
  • 先从memstore里面查找数据,如果没有再到BlockCache上读取
  • 如果BlockCache上也没有找到再到StoreFile上仅从读取
  • 从StoreFile中读取数据到数据后,先写入到BlockCache中然后再返回给客户端
1.2 写流程
  • client与zk建立链接,从zookeeper中找到meta表中region的位置,然后读取meta表中的数据
  • meta表中存储了用户表的region信息,根据要查询的namespace、表名、rowkey信息。找到写入数据对应的的region信息
  • 找到对应的HRegionServer然后发送写请求
  • 把数据写入到HLog和memstore中
  • memstore中的数据到达阀值后会把数据刷写到磁盘,生成一个storeFile,即一个HFile
  • 当达到一定条件后,会把小的HFile合并成大的HFile,避免hdfs有大量的小文件
1.3 文件合并的逻辑
  • hbase中有两种类型的合并
    • minor compaction 小合并
    • major compaction 大合并
1.3.1 minor compaction 小合并
  • 多个StoreFile合并成一个更大的StoreFile

    这个过程是将多个小的、相近的StoreFile合并成一个更大的StoreFile,对于超过TTL(Time To Live)的数据、更新的数据和删除的数据仅仅做个了标记(即新增了一个带有标记的版本号),并没有进行物理删除,一次minor compaction的结果会得到更少、更大的StoreFile。这种合并的触发频率很高

  • minor compaction触发的条件

    <!--表示至少需要三个满足条件的store file时,minor compaction才会启动-->
    <property>
    	<name>hbase.hstore.compactionThreshold</name>
    	<value>3</value>
    </property>
    
    <!--表示一次minor compaction中最多选取10个store file-->
    <property>
    	<name>hbase.hstore.compaction.max</name>
    	<value>10</value>
    </property>
    
    <!--默认值为128m,
    表示文件大小小于该值的store file 一定会加入到minor compaction的store file中
    -->
    <property>
    	<name>hbase.hstore.compaction.min.size</name>
    	<value>134217728</value>
    </property>
    
    <!--默认值为LONG.MAX_VALUE,表示文件大小大于该值的store file 会被minor compaction排除-->
    <property>
    	<name>hbase.hstore.compaction.max.size</name>
    	<value>9223372036854775807</value>
    </property>  
    
1.3.2 major compaction 大合并
  • 讲一个Store中的所有StoreFile合并成一个HFile

    这个过程会把已经删除的、TTL过期的数据,版本号超过设定版本号的数据(版本太多的老数据)。这种合并频率比较低,默认是7天执行一次,并且性能消耗很大,一般都是手动控制合并,防止自动合并出现在业务高峰期

  • major compactiom的触发条件

    <!--默认值为7天进行一次大合并,-->
    <property>
    	<name>hbase.hregion.majorcompaction</name>
    	<value>604800000</value>
    </property>
    
  • 手动触发

    ##使用major_compact命令
    major_compact tableName
    
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值