HBase行键范围分配

时间:2018-05-16 06:03:30

标签: hadoop hbase

当我为HBase表设计行键时,我有两个问题要问

  1. 如何跨HBase区域分配行键范围?
  2. 行插入会影响行键分配吗?
  3. (考虑我们只有两个地区)

    详细说明问题,

    1. 如果我插入以axx开头的行密钥,bxx,...,zxx,HBase Master会将范围设为a-m到一个区域和n-z到另一个地区?

    2. 在另一种情况下如果我只插入仅从axxbxx开始的rowkeys,它是否将axx分配给第一个区域并将bxx分配给另一个

1 个答案:

答案 0 :(得分:1)

在现有区域填满之前,HBase中不会发生拆分。因此,如果您设置具有2个区域服务器的HBase群集,则所有数据最初只会添加到一个区域。当该区域填满时,数据将根据整个区域中间的任何键分为两个区域。

对于您的问题[[[1, 95.21],[2, 43.8]],[[0, 95.21],[3, 10.4]],[[0, 43.8],[5, 67.1]] ,所有密钥最初都会添加到一个区域。假设密钥均匀分布,您应该会在第一次拆分后看到一个接近1.而另一个接近a-m的东西。

为了以图形方式显示,假设我们的两个区域每个只能存储四行。输入四个记录后,您将看到:

n-z

现在,如果我们要添加REGION 1 REGION 2 +-----+ +-----+ | axx | | | | bxx | | | | cxx | | | | dxx | | | +-----+ +-----+ ,它就不适合区域1,因此在区域中间发生分裂:

axy

最后添加了我们的新记录:

REGION 1   REGION 2
+-----+    +-----+
| axx |    | cxx |
| bxx |    | dxx |
|     |    |     |
|     |    |     |
+-----+    +-----+

<强>预裂

如果您事先知道可能的密钥分发并希望避免昂贵的自动拆分,则可以在创建表时pre-split

REGION 1   REGION 2
+-----+    +-----+
| axx |    | cxx |
| axy |    | dxx |
| bxx |    |     |
|     |    |     |
+-----+    +-----+

这将创建四个区域,每个区域包含create 'animals', 'a', {SPLITS => ['e','m','r']} 0-ee-mm-r之间的数据。