您的位置:首页 > 运维架构 > Apache

Hbase源码分析之org.apache.hadoop.hbase.client包

2013-04-30 16:27 549 查看


Scan:设置scan记录的条件,buffer size,cache size等
ResultScanner:提供scan的接口,
ClientScaner:客户端 ResultScanner的实现,数据分布在多个region之间的,就依次读取。
用法如下:
HTableInterface tbl = null;

tbl = table.getTable("table_name");

Scan scan = new Scan();
//设置客户端缓存的记录数量,调用next方法时,根据这个参数,一次性从服务端返回cache大小的数据缓存在客户端,下次再调用next方法时,就直接从客户端缓存中取得下一条数据。
scan.setCaching(100);
scan.setCacheBlocks(true);
scan.setStartRow((userNum+"10").getBytes());
scan.setStopRow((userNum+"20").getBytes());

clscaner = (ClientScanner) tbl.getScanner(scan);

Result[] rets = clscaner.next();//获取下一行
Result[] rets = clscaner.limit(start, pageSize);//分页
在next方法中会do while循环调用nextScanner方法进行是否结束scan的判断,
循环结束的条件是,获取的记 录数量到达caching size的大小,或者不能满足server 端的filter的过滤条件而返回数据为空,或者当前是最后一个region或者当scan的stoprowkey比当前的region的endkey要小时,会自动结束scan,不会去下一个region进行scan。

HTable:提供和单个表交互的接口,包括put,get,delete,同时也提供ResultScaner的创建方法,它是非线程安全的,HTablePool是线程安全的。

以上所有的对region的操作,最终都会ServerCallable对RegionServer进行region操作的。下面对这个类重点说一下。
一个ServerCallale是针对一个Server 的某Region操作类,基于startrow定位Region(HRegionLocation),进而获取Region的location在哪个server实例上(HRegionInterface,服务端HRegionServer的客户端代理),调用call方法连接server实例,获取数据。
在实现类ScanerCallable中的call方法中,调用HRegionInterface(HRegionServer的客户端代理)的next方法获取Results。
通过RPC协议连接到HRegionServer后,在Server内部进行当前region的regionScaner(根据设置的startrow和endrow以及filter进行过滤)。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: