Hbase底层实现——HBASE架构、HBASE数据存储、HBASE数据访问、HBASE的shell操作

多次面试都提到了这个问题,这次来系统的总结一下答题的要点吧。

一、HBASE底层设计,也即HBASE的底层架构:

1、HBASE中有多个RegionServer

2、RegionServer是调度者,Region负责存储。

因此HBASE是一个分布式的数据库,使用zookeeper来管理集群。


在Hbase中每一个regionserver分别对应于一个集群的节点,每一个regionserver负责管理多个region。其中一个region代表一张HBASE表中的一部分数据,所以HBASE中的一张表可能需要多个region来存储数据,但是region的分布并不是杂乱无章的,HBASE在管理region的时候会给每一个region定义一个rowkey的范围,落在特定范围内的数据将交给特定的region,从而将负载分摊到多个节点上,充分利用分布式的优点。

二、数据存储

数据存储是region的工作。

一个region代表的是一张HBASE表中特定rowkey范围内的数据,而HBASE是面向列存储的数据库,在一个region中,有多个文件来存储这些列。HBASE中数据是由列族来组织的,所以每一个列族都会对应一个数据机构,HBASE将列族的存储数据结构抽象为store,一个store代表一个列族。每一个store里边又有一些storefile来存储数据,最底层是Hfile来存储到hdfs上。


扫描二维码关注公众号,回复: 927757 查看本文章

所以,我们查询的时候尽量减少不需要的列,而经常一起查询的列要组织到一个列族里:因为需要查询的列族越多,意味着要扫描的store文件就越多,这就需要越多的时间。

三、访问HBASE数据

client发起访问数据请求,请求将首先交由Zookeper处理,Zookeper接到请求后将查询root表,然后通过root表映射到META表来查询,最后META表映射到regionserver来查询,regionserver查询到相应的region,然后定位到region中特定的rowkey上。


四、HBASE常用shell指令

describe、create、get、put、scan、drop、list、delete、alter

猜你喜欢

转载自blog.csdn.net/data8866/article/details/80103000