HBase的架构和原理(二)--HRegion和HLog的描述

Hegion的描述

  • 一个Table可以有一个或多个HRegion,它们可以在一个相同的HRegionServer上,也可以分布在不同的HRegionServer上。

  • 一个HRegionServer可以有多个HRegion,他们分别属于不同的Table

  • HRegion实际上是行键排序(默认是字典排序)后的按规则分割的连续的存储空间
    HBase的架构和原理(二)--HRegion和HLog的描述

  • 每个HRegion达到一定大小(默认是10GB)时,进行平等分裂。
    HBase的架构和原理(二)--HRegion和HLog的描述
    每个HRegion的大小可以是1~20GB。这个大小由hbase.hregion.max.filesize指定,默认为10GB

  • HRegion由一个或者多个Store(HStore)构成,每个HStore对应了一个Table中的一个Column Family。HStore是HBase中存储的核心,它实现了读写HDFS功能,一个HStore由一个MemStore 和0个或多个StoreFile组成
    HBase的架构和原理(二)--HRegion和HLog的描述

  • 通常每个HRegion中的每个 Column Family有一个自己的MemStore。MemStore是一个写缓存(In Memory Sorted Buffer),所有数据的写在完成WAL日志写后,会写入MemStore中。由MemStore根据一定的算法(LSM-TREE算法,这个算法的作用是将数据顺序写入磁盘,而不是随机写,减少磁头调度时间,从而提高写入性能)将数据Flush到底层的HDFS文件中(HFile)。

  • HFile(StoreFile) 用于存储HBase的数据(Cell/KeyValue)。在HFile中的数据是按RowKey、Column Family、Column排序,对相同的Cell(即这三个值都一样),则按timestamp倒序排列(即最新的数据在最前面)

WAL(HLog)的描述

  • HLog文件就是HDFS上的一个普通的Hadoop Sequence File,
    Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,table名称、region名字、sequence number(起始值为0,或者是最近一次存入文件系统中sequence number)、timestamp(写入时间)。
    HLog Sequece File的Value是HBase的KeyValue对象,即对应HFile中的KeyValue
  • HLog文件会定期Roll出新的文件(或者HLog文件达到1G大小时触发),那些旧的HLog文件可以定期清理(因为这些HLog中的数据,可能已经持久化到HFile)。WAL文件存储在/hbase/WALs/${HRegionServer_Name}的目录中(在0.94之前,存储在/hbase/.logs/目录中)