Разделение не происходит в 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
.