Hbase如何拆分多个regionServer中的记录?

Posted

技术标签:

【中文标题】Hbase如何拆分多个regionServer中的记录?【英文标题】:How Hbase split the records in multiple regionServer? 【发布时间】:2012-12-04 16:16:51 【问题描述】:

我有Hbase的集群设置:

1 HMaster 节点和 3 个 Region Servers

我想知道:当我们在 table 中插入多行时,Hbase 如何将记录拆分到多个 regionServer ?

Hfile 是否已排序键值记录(rowKey:cf:TimeStamp)?

如果是,则 Hbase 如何维护事务表中的排序键顺序。

我读到 META 表包含表信息,如 (Table_name, Region(StartKey-EndKey)) 是否正确?

【问题讨论】:

我在一定程度上理解了你的观点。如果你能给我一些关于这个例子的想法,那就太好了。即我有表 T1,它的 rowKey 为 studentID(Integer)。我有 1 个主服务器和 3 个区域服务器(R1、R2、R3)。假设我将记录拆分为 300 行。现在多人输入 T1 中的记录,键在 [1-1000] 之间。那么现在谁在维护 Hfile 中 Key 的排序顺序?我读到 META 表有 [T1,R1[1-300], [T1,R2[301-600]] 之类的信息,对吗?如果是,那么谁负责这个条目? 【参考方案1】:

我对你的问题有点困惑,但是当你在表中插入多行时,会查找 .META. 表以查找应该获得突变的区域,然后客户端将其发送到相应的 hbase regionserver .

HFiles 确实是带有键值的排序文件,看起来更像

<keylength> <valuelength> <rowlength> <row> <columnfamilylength> <columnfamily> <columnqualifier> <timestamp> <keytype> <value>

http://hbase.apache.org/book/hfilev2.html

http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/KeyValue.html

排序发生在所有压缩中,即当你添加一行时,它被添加到memtable,一旦在memtable中填充了足够多的行,它将对它们进行排序并将它们转储到HFile(即合并压缩)。当 region 存在多个 HFile 时,HBase 将以排序方式将它们全部合并在一起(称为主要压缩)。

META Table 维护 Region 信息,例如表名、区域开始键、结束键以及为它提供服务的服务器。

【讨论】:

我在一定程度上理解了你的观点。如果你能给我一些关于这个例子的想法,那就太好了。即我有表 T1,它的 rowKey 为 studentID(Integer)。我有 1 个主服务器和 3 个区域服务器(R1、R2、R3)。假设我将记录拆分为 300 行。现在多人输入 T1 中的记录,键在 [1-1000] 之间。那么现在谁在维护 Hfile 中 Key 的排序顺序?我读到 META 表有 [T1,R1[1-300], [T1,R2[301-600]] 之类的信息,对吗?如果是,那么谁负责这个条目? 如果您的意思是跨多个区域批量放置行怎么办,客户端将使用 .META 联系区域服务器。表用于发送每一行(区域服务器),然后将它们发送到各自的目的地。 META 表确实有这些信息。因此,如果您在同一操作中发送 ID(250) 和 ID(350) 的用户,他们将转到正确的区域服务器,这将使他们保持排序。 我读到 Hbase 使用 LSM(Log Structured Merge) Tree 将内存树与磁盘树合并。在这种情况下,客户端将数据放在 R1 和区域上,该数据是 R2,而不是 R1 的内存数据与 R2 的磁盘数据合并?对吗? 不,客户端不应该将数据发送到不包含数据应该去的区域的区域服务器。我不确定如果是这种情况会发生什么,可能会发送到主服务器,然后再发送到正确的区域服务器。无论如何,大部分信息都可以在这里找到:hbase.apache.org/book.html 我浏览了以下描述读/写流程的链接。 blog.cloudera.com/blog/2012/06/hbase-write-path 我没有得到任何一部分:当数据来自客户端时,它将内存存储在 MemStore 中,然后排序并转储到 Hfile(合并压缩)中。那么在这种情况下,当 LSM 出现时?

以上是关于Hbase如何拆分多个regionServer中的记录?的主要内容,如果未能解决你的问题,请参考以下文章

HBase 数据读写流程

hbase中啥是Region,啥是RegionServer

hbase里的hlog存在哪?regionserver里还是zookeeper里?

大数据之Hbase:RegionServer 架构

HBase原理分析

hbase 基础 —— 架构