【问题标题】:HBase: how put/get knows which region server to write to?HBase:put/get 如何知道要写入哪个区域服务器?
【发布时间】:2013-09-14 04:05:22
【问题描述】:

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

【问题讨论】:

    标签: hadoop nosql hbase hdfs bigdata


    【解决方案1】:

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


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

    来自hbase documentation book

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

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


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

    一般有两种从 HBase 读取的方法:scannersgets

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

    扫描器将简单地寻找范围的起点,然后从那里向前移动。有时它需要在到达终点时移动到不同的区域服务器,但客户端会在幕后处理。如果有某种方法可以设计表格,使您的多次获取是一次扫描而不是一系列获取,那么假设您应该有更好的性能。

    【讨论】:

    • 谢谢唐纳德。它帮助我理解。正如我从您的回答中了解到的那样,定位区域服务器完全是客户的责任(在后台使用元信息)。
    【解决方案2】:

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

    http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/archive/bigtable-osdi06.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      相关资源
      最近更新 更多