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

Hadoop HBase:put/get如何知道要写入哪个区域服务器?,hadoop,nosql,hbase,hdfs,bigdata,Hadoop,Nosql,Hbase,Hdfs,Bigdata,在HBase中,put/get操作如何知道该行应写入哪个区域服务器? 如果要读取多个行,那么如何联系多个区域服务器并检索结果?我认为您的问题只是好奇,因为这种行为是从用户那里抽象出来的,您不应该在意 在HBase中,put/get操作如何知道该行应写入哪个区域服务器 从: HBase客户端HTable负责查找为特定感兴趣行范围提供服务的RegionServer。它通过查询.META来实现这一点。和根目录表(TODO:Explain)。在定位所需的区域后,客户端直接联系服务于该区域的Region

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

我认为您的问题只是好奇,因为这种行为是从用户那里抽象出来的,您不应该在意


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

从:

HBase客户端HTable负责查找为特定感兴趣行范围提供服务的RegionServer。它通过查询.META来实现这一点。和根目录表(TODO:Explain)。在定位所需的区域后,客户端直接联系服务于该区域的RegionServer(即,它不通过主服务器),并发出读或写请求。此信息缓存在客户机中,以便后续请求不必经过查找过程。如果某个区域被主负载平衡器重新分配,或者因为某个RegionServer已死亡,客户端将重新查询目录表以确定用户区域的新位置

所以第一步是查找meta和root以确定它在哪里,然后它联系regionserver来完成这项工作


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

通常有两种读取HBase的方法:和

如果运行多个get,则每个get将分别获取这些记录。其中的每一个都可能会发送到不同的区域服务器


扫描器只需查找范围的起始点,然后从那里向前移动。有时,当它到达终点时,它需要移动到另一个regionserver,但客户端会在幕后处理。如果有某种方法来设计表格,使您的多个GET是一次扫描而不是一系列GET,那么您应该假设具有更好的性能。

提供了与BigTable论文相同的场景和解释:“客户端库缓存平板电脑位置。如果客户端 不知道平板电脑的位置,或者它是否发现 缓存的位置信息不正确,则 它递归地向上移动平板电脑位置层次结构。 如果客户端的缓存为空,则定位算法 需要三次网络往返,包括一次读取 如果客户端的缓存已过时,则 算法可能需要多达六次往返,因为过时了 缓存项仅在未命中时才被发现(假设 元数据平板电脑不经常移动)。 虽然平板电脑的位置存储在内存中,但没有 需要GFS访问,我们进一步降低了成本 在常见情况下,通过让客户端库预取 tablet位置:它读取多个位置的元数据 每次读取元数据表时,tablet都会显示。”


谢谢你,唐纳德。这有助于我理解。从您的回答中我了解到,客户完全有责任(在后台使用元信息)定位区域服务器。