大数据学习之路49-hbase的存储原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37050372/article/details/82109738

现在学习hbase的存储原理不是目的,是为了理解生产中的一种需求:

当一个表很大的话会被拆分成多个region。

从上图中我们可以看出region在存储数据的时候是按照列族分开存储的。

所以如果我们要读取一行数据的时候,如果列族有很多就代表着我们需要读取的文件也很多。所以列族还是少一点好。除非我们真的有必要把他们分开。

但是按照列族分也有一个好处,因为有时候我们可能并不需要一整行的数据,我们可能只需要一个列族的数据,这个时候就方便了。

每一个region的一个列族存成的文件,格式不是普通的文本文件。而是HFile文件。Hfile文件是有特定格式的:

region server为了更好的服务客户会把需要的数据存到内存缓冲区,而且会把用户插入的数据也放入缓冲区,因为hdfs是不提供对文件的修改功能的。这个缓冲区就叫MEMSTORE。可是内存中容易丢失,于是便会有WALs预写日志,预写日志不是存在本地,而是存在hdfs中的。每台机器可能有很多的region,而WALs对于这台机器来说是共用的。一台region server管理一个WALs实例。

为了防止日志越来越大,所以region server会定期进行Merge。Merge分为两种,一种是Minor Merge,另一种是Major Merge。

Minor Merge做的不彻底,而Major Merge做的彻底,它会把所有的历史数据全部拿过来合并。把该删除的数据全部删掉,把改去掉的旧版本数据全部去掉。所以Minor Merge会比较频繁。

假如随着操作的增加,一个region可能会变的很大,这个时候,为了减轻负担,这个region可能会被拆成两半。可是假如不断的拆分,region越来越多,服务器也会受不了。这个时候怎么办呢?我们要知道,region server的负载是会被写到zookeeper上的。region server管理着几个region zookeeper都知道。而HMaster会经常看这个数据。如果发现负载过多则会重现挑选一台region server来接管其中的几个region。

于是就有这样的场景,我们有大量的数据需要去查询,可是使用hdfs 或者hive去查询的话都会很慢,于是我们便会将数据批量导入到hbase中去查询。所以利用上面的原理,我们最快的导入方式就是直接生成数据文件HFile.这样就可以避免一条一条插入数据所造成的region server的负载。我们只需要将文件通过hbase提供的API放入目录,然后告诉它一些源信息就好了。

猜你喜欢

转载自blog.csdn.net/qq_37050372/article/details/82109738
今日推荐