hadoop - HBase 行键范围分配

标签 hadoop hbase

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

  1. 如何跨 HBase 区域分配行键范围?
  2. 行插入是否影响行键分配?

(考虑我们只有两个区域)

为了详细说明这个问题,

  1. 如果我插入以 axxbxx,...,zxx 开头的行键,HBase 主分配范围作为 a-m 到一个区域,n-z 到另一个区域?

  2. 在另一种情况下,如果我插入仅以 axxbxx 开头的行键,它是否将 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-ee-mm-rr-z 之间的数据.

关于hadoop - HBase 行键范围分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50363460/

相关文章:

hadoop 减少上下文和另一个输入文件的侧连接

hadoop - 如何解压hadoop中的gz文件

mysql - 使用 sqoop 将 mysql 查询导入到 hbase

hadoop - 使用主机系统上的客户端访问在 VM 中运行的 HBase

java - 如何在HBase中设置In-Memory

apache-spark - apache-spark部署:独立于多个VM

shell - shell 脚本中的 SQOOP 导出失败

database - Splunk 和其他数据库解决方案

architecture - HBase 反模式

hadoop - 获取trafodion中最后插入的行ID