在为我的 HBase 表设计行键时,我有两个问题要问
- 如何跨 HBase 区域分配行键范围?
- 行插入是否影响行键分配?
(考虑我们只有两个区域)
为了详细说明这个问题,
如果我插入以
axx
、bxx
,...,zxx
开头的行键,HBase 主分配范围作为a-m
到一个区域,n-z
到另一个区域?在另一种情况下,如果我插入仅以
axx
和bxx
开头的行键,它是否将axx
分配给区域一和bxx
到另一个?
最佳答案
在现有区域填满之前,HBase 中不会发生拆分。因此,如果您设置一个具有 2 个区域服务器的 HBase 集群,所有数据最初只会添加到一个区域。当该区域填满时,数据将根据整个区域中间的任何键拆分到两个区域。
对于您的问题 1.
,所有 key 最初都会添加到一个区域。假设 key 均匀分布,在第一次拆分发生后,您应该期望在一个中看到接近 a-m
的东西,在另一个中看到接近 n-z
的东西。
为了以图形方式显示这一点,假设我们的两个区域各只能存储四行。输入四条记录后,您会看到:
REGION 1 REGION 2
+-----+ +-----+
| axx | | |
| bxx | | |
| cxx | | |
| dxx | | |
+-----+ +-----+
现在如果我们想添加 axy
,它不适合 REGION 1,所以 split 发生在区域的中间:
REGION 1 REGION 2
+-----+ +-----+
| axx | | cxx |
| bxx | | dxx |
| | | |
| | | |
+-----+ +-----+
最后添加了我们的新记录:
REGION 1 REGION 2
+-----+ +-----+
| axx | | cxx |
| axy | | dxx |
| bxx | | |
| | | |
+-----+ +-----+
预 split
如果您提前知道可能的 key 分配并希望避免昂贵的自动拆分,您可以 pre-split创建表时:
create 'animals', 'a', {SPLITS => ['e','m','r']}
这将创建四个区域,每个区域包含 0-e
、e-m
、m-r
、r-z
之间的数据.
关于hadoop - HBase 行键范围分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50363460/