读取数据
读取数据的难点在于,有可能一行数据储存在多个文件中,也有可能在memstore中。例如,同一个row key在不同的时间写入不同列的数据,那么取这个row key所有列的时候就需要扫描多个文件。
get操作从实现上来说,和scan操作是一样的。
get或者scan操作内部实现机制步骤如下:
- 根据时间戳、布隆过滤器快速排除一些文件,这些文件中绝不可能包含需要取的KeyValue。
- 从最新的store file开始扫描,每个文件只扫描需要的block,根据行键进行扫描
region的生命周期
region的生命周期总共有如下几种状态:
- offline:下线状态
- pending open:打开region的请求已经发送到了服务器
- opening:服务器开始打开region
- open:region已经打开,并且可以使用了
- pending close:关闭region的请求已经发送到了服务器
- closing:服务器开始关闭region
- closed:服务器已关闭region
- splitting:正在切分region
- splitted:region切分完成
Zookeeper
zk中包含以下重要信息:
/hbase/hbaseid
:集群编号/hbase/master
:主节点的编号/hbase/repli