Назначение диапазона ключей строки HBase - PullRequest
0 голосов
/ 16 мая 2018

Поскольку я разрабатываю ключ строки для своей таблицы HBase, мне нужно задать два вопроса

  1. Как назначаются диапазоны ключей строки в регионах HBase?
  2. вставки строк влияют на назначение ключей строк?

(рассмотрим, что у нас есть только две области)

Чтобы уточнить вопрос,

  1. ЕслиЯ вставляю ключи строк, начинающиеся с axx, bxx, ..., zxx, задает ли диапазон присвоений HBase Master как a-m для одного региона и n-z для другого региона?

  2. В другом случае, если я вставляю строки, начинающиеся только с axx и bxx, назначает ли axx область один, а bxx - другой?

1 Ответ

0 голосов
/ 16 мая 2018

Разделение не происходит в HBase, пока не заполнятся существующие регионы. Таким образом, если вы настроите кластер HBase с 2-мя серверами региона, все данные будут первоначально добавляться только в один регион. Когда этот регион заполняется, данные будут разделены на две области в зависимости от того, какой ключ находится в середине полной области.

На ваш вопрос 1. все ключи будут добавлены в один регион изначально. Предполагая равномерное распределение ключей, вы должны ожидать увидеть что-то близкое к a-m в одном и n-z в другом после первого разделения.

Чтобы показать это графически, предположим, что наши две области могут хранить только четыре строки каждая. После ввода четырех записей вы увидите:

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

Теперь, если мы хотим добавить axy, он не поместится в РЕГИОН 1, и поэтому разделение происходит по середине области:

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

и наконец добавлена ​​наша новая запись:

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

PRE-SPLITTING

Если вы заранее знаете вероятное распределение ключей и хотите избежать дорогостоящих автоматических разбиений, вы можете pre-split при создании таблицы:

create 'animals', 'a', {SPLITS => ['e','m','r']}

Это создаст четыре области, каждая из которых содержит данные между 0-e, e-m, m-r, r-z.

...