HBase:put/get如何知道要写入哪个区域服务器?

Vin*_*odh 9 hadoop hbase bigdata nosql hdfs

在HBase中,put/get操作如何知道该行应该写入哪个区域服务器?如果要读取多行,如何联系多个区域服务器并检索结果?

Don*_*ner 8

我认为你的问题只是好奇心,因为这种行为是从用户中抽象出来的,你不应该在乎.


在HBase中,put/get操作如何知道该行应该写入哪个区域服务器?

hbase文档书中:

HBase客户端HTable负责查找为所关注的特定行范围提供服务的RegionServers.它通过查询.META来做到这一点.和-ROOT-目录表(TODO:Explain).在找到所需区域之后,客户端直接联系服务该区域的RegionServer(即,它不通过主区域)并发出读取或写入请求.此信息缓存在客户端中,以便后续请求无需经过查找过程.如果区域由主负载均衡器重新分配,或者因为RegionServer已经死亡,则客户端将重新查询目录表以确定用户区域的新位置.

因此,第一步是查看meta和root来确定它的位置,然后它联系该regionserver来完成这项工作.


如果要读取多行,如何联系多个区域服务器并检索结果?

一般来说,有两种方法可以从HBase读取:扫描仪获取.

如果您运行多个获取,那么每个将分别单独获取这些记录.其中每一个都可能会转到不同的区域服务器.

扫描仪只需查找范围的开始,然后从那里向前移动.有时它需要在到达末尾时移动到不同的区域服务器,但客户端在后台处理它.如果有一些方法可以设计表格,使得你的多次获取是扫描而不是一系列获取,那么你应该假设有更好的性能.