Meta的必要性:   

       HBase一张表的数据是由多个Region构成,而这些Region是分布在整个集群上的RegionServer上的。那么客户端在做任何数据操作时,都要确定数据在哪些Region上,然后再根据Region和RegionServer的对应关系,去相应的RegionServer中读取数据。

        hbase:meta就是专门用来存储和Region相关的信息,这里的hbase表示namespace,meta是系统表,因此用全局统一的命名空间;

        这个表只有一个列簇,即info。并且,HBase保证meta表始终只有一个Region,这是为了确保meta多次操作的原子性(即要不这些操作全成功,要不这些操作一个都没有做)。

Meat表内具体存放哪些信息: 

rowkey:由四个字段拼接起来,分别是 表名-StratRow-TimeStamp-EncodedName。

数据分为4列:

info:regioninfo:EncodedName、RegionName、Region的StartRow、Region的StopRow;

info:seqnumDuringOpen:存储Region打开时的sequenceId;

info:server:存储Region落在哪个RegionServer上;

info:serverstartcode:存储所在的RegionServer启动时间戳;

查看meta表:

客户端定位Region;

问题:面对海量数据查询时,hbase:meta所在region如何承担数千万的流量?

解决思路:把hbase:meta表的Region信息缓存在HBase客户端;

定位Region:HBase客户端有一个叫做MetaCache的缓存,在调用API时,客户端会先去MetaCache中找到业务Rowkey所在的region,这个region在绝大多数情况下都信息不为空,且调用RPC请求到对应的RegionServer后,且该RegionServer是正确的。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐