简 介:HBase是谷歌BigData论文的一个代码实现,在大数据处理领域应用广泛。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。
关键词:大数据组件、HBase、NoSQL
一、Compact合并StoreFile文件
我们每次put一条数据,都会将其写入到MemStore中,然后达到一定条件后,将其flush到HDFS中,久而久之这样就会产生过多的小文件,我们就需要定期或者按照一定约束进行合并,产生的多个StoreFile如下图:
此时可以看到有两个HFile文件,对应着MemStore刷写两次到HDFS中。
由于我们每个字段的不同版本可能在不同的HFile中,当我们查询时就要去遍历所有的HFile,拿到最新的data,这样效率就会较低,所以需要减少HFile的个数,清理掉过期不生效的数据,进行StoreFile Compaction合并。
从上图可以看出,合并分为两种,一种是Minor Compaction,另外一种是Major Compaction。
Minor Compaction:它会将临近的若干个较小的HFile合并成一个较大的HFile,但是它并不会清理过期和删除的数据。
Major Compaction:会将一个Store下的所有的HFile合并成一个大HFile,并且会清理掉过期和删除的数据。
这些定期合并以及相关的配置可以在配置文件中进行修改。
下面测试一下合并文件。
上图我们的HFile文件中有两个,我们尝试put两条新的数据,然后flush到磁盘中。
现在可以发现HDFS上存在4个HFile文件,我们用命令手动合并一下。
现在会比之前多一个文件,就是刚才的4个文件合并后的,但是并没有马上删除其它4个文件,可能是延迟或者是一种安全措施,并不会马上删除,过了一段时间还是会被删除的。