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

de90aj5v  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(288)

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

mtb9vblg

mtb9vblg1#

提供了与bigtable论文相同的场景和解释:“客户端库缓存平板电脑的位置。如果客户端不知道平板电脑的位置,或者发现缓存的位置信息不正确,则会递归地向上移动平板电脑位置层次结构。如果客户机的缓存是空的,那么定位算法需要三次网络往返,包括一次从chubby读取。如果客户机的缓存是过时的,那么定位算法可能需要多达六次往返,因为过时的缓存项只在未命中时才被发现(假设元数据表不经常移动)。尽管平板电脑位置存储在内存中,因此不需要gfs访问,但我们通过让客户端库预取平板电脑位置来进一步降低这种成本:每当读取元数据表时,它都会读取多个平板电脑的元数据。”
http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/archive/bigtable-osdi06.pdf

5us2dqdw

5us2dqdw2#

我假设你的问题只是好奇,因为这种行为是从用户那里抽象出来的,你不应该在意。
在hbase中,put/get操作如何知道该行应该写入哪个区域服务器?
从hbase文档手册:
hbase客户端htable负责查找服务于特定行范围的区域服务器。它通过查询.meta来实现。和根目录表(todo:explain)。在找到所需的区域后,客户机直接联系服务于该区域的区域服务器(即,它不通过主服务器),并发出读或写请求。此信息缓存在客户机中,以便后续请求不必经过查找过程。如果某个区域被主负载平衡器重新分配,或者因为某个区域服务器已死亡,客户端将重新查询目录表以确定用户区域的新位置。
所以第一步是在meta和root中查找以确定它在哪里,然后它联系regionserver来完成这项工作。
如果要读取多行,如何联系多个区域服务器并检索结果?
通常有两种读取hbase的方法:scanners和get。
如果运行多个get,则每个get将分别获取这些记录。其中的每一个可能都将被发送到不同的区域服务器。
扫描器只需寻找范围的开始,然后从那里向前移动。有时,当它到达终端时,它需要移动到另一个regionserver,但是客户端在幕后处理这个问题。如果有某种方法来设计表,使您的多个get是一次扫描,而不是一系列get,那么您应该假设具有更好的性能。

相关问题