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触发的条件

    
    <property>
    	<name>hbase.hstore.compactionThresholdname>
    	<value>3value>
    property>
    
    
    <property>
    	<name>hbase.hstore.compaction.maxname>
    	<value>10value>
    property>
    
    
    <property>
    	<name>hbase.hstore.compaction.min.sizename>
    	<value>134217728value>
    property>
    
    
    <property>
    	<name>hbase.hstore.compaction.max.sizename>
    	<value>9223372036854775807value>
    property>  
    

#####1.3.2 major compaction 大合并

  • 讲一个Store中的所有StoreFile合并成一个HFile

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

  • major compactiom的触发条件

    
    <property>
    	<name>hbase.hregion.majorcompactionname>
    	<value>604800000value>
    property>
    
  • 手动触发

    ##使用major_compact命令
    major_compact tableName
    

你可能感兴趣的:(大数据,#,-------HBase,HBase)