客户端有两种方式查询数据,一种是Get,另一种是Scan。这两种操作请求传递到RegionServer,都是通过Scanner对文件扫描实现查询。注意,客户端Scanner与RegionServer器端的Scanner是两个不同的概念,客户端Scanner用于客户端对查询结果进行迭代,而RegionServer端的Scanner用于扫描数据文件获取查询结果。本节讲解RegionServer端的Scanner。
每个Scanner内部都有一个指针,指向下一次读取的位置。该指正可以通过seek操作重定位。Scanner相关接口
Hbase定义了两个与Scanner相关的接口,KeyValueScanner和InternalScanner。两个接口的区别在于对数据文件next操作不同,KeyValueScanner一次next操作只能取出指针指向的KeyValue,InternalScanner可以取出指针及其后面的同行KeyValues。KeyValueScanner有三个基本操作peek,seek,next。peek取出当前KeyValue,但指针不移动。next取出当前KeyValue,且指针移动到下一个KeyValue。seek用于指正重定位。
InternalScanner的next操作取出当前行的KeyValue序列,并移动指针。