Как таблица разделов HBase по регионсерверам? - PullRequest
7 голосов
/ 05 августа 2010

Скажите, пожалуйста, как таблица разделов HBase по регионам.

Например, предположим, что мои ключи строк - целые числа от 0 до 10M, и у меня есть 10 регион-серверов.
Означает ли это, что первый регион-сервер будет хранить все строки с ключами со значениями 0 - 10M, второй 1M -2M, третий 2M-3M, ... десятый 9M - 10M?

Я бы хотел, чтобы мой ключ строки был меткой времени, но в моем случае большинство запросов будет применяться к последним датам, все запросы будут обрабатываться только однимregionserver, это правда?

Или, может быть, эти данные будут распространяться по-другому?
Или, может быть, я могу как-то создать больше регионов, чем у меня есть серверов регионов, поэтому (согласно данному примеру) сервер 1 будет иметь ключи0 - 0,5M и 3M - 3,5M, таким образом, мои данные будут распределяться более равномерно, это возможно?


обновление

Я только что обнаружил, что есть опция hbase.hregion.max.filesize, вы думаете, это решит мою проблему?

Ответы [ 2 ]

8 голосов
/ 05 августа 2010

WRT-разделение, вы можете прочитать сообщение в блоге Lars об архитектуре HBase или Google Bigtable, в котором HBase "клонирует".

Если ваш ключ строки - только временная метка, то да, регион с самыми большими ключами всегда будет поражен новыми запросами (так как регион обслуживается только одним сервером региона).

Вы хотите использовать метки времени для коротких сканирований? Если это так, рассмотрите возможность засолки ваших ключей (поищите в Google, как Mozilla сделала это с Сорокко).

Может ли ваш префикс временной метки иметь какой-либо идентификатор? Например, если вы запрашиваете данные только для определенных пользователей, добавьте к этому идентификатору пользователя префикс ts, и это обеспечит вам намного лучшее распределение нагрузки.

Если нет, то используйте UUID или что-то еще, что будет случайным образом распределять ваши ключи.

О hbase.hregion.maxfilesize

Установка maxfilesize для этой таблицы (что вы можете сделать с оболочкой) не означает, что каждая область имеет размер X МБ (где X - значение, которое вы установили). Допустим, все ваши ключи строк - это временные метки, что означает, что каждый новый ключ строки больше предыдущего. Это означает, что он всегда будет вставлен в область с пустым конечным ключом (последний). В какой-то момент один из файлов вырастет больше, чем maxfilesize (за счет уплотнения), и эта область будет разбита по середине. Нижние клавиши будут находиться в своем регионе, верхние - в другом. Но поскольку ваш новый ключ строки всегда больше предыдущего, это означает, что вы будете писать только в этот новый регион (и так далее).

tl; dr, хотя у вас более 1000 регионов, с этой схемой регион с самыми большими ключами строк всегда будет получать записи, что означает, что сервер региона размещения станет узким местом.

0 голосов
/ 06 августа 2010

Опция hbase.hregion.max.filesize, которая по умолчанию составляет 256 МБ, устанавливает максимальный размер региона, после достижения этого предела область разделяется. Это означает, что мои данные будут храниться в нескольких областях размером 256 МБ и, возможно, в одной области меньше.
Итак

Мне бы хотелось, чтобы в качестве ключа строки использовалась метка времени, но в моем случае большинство запросов будет применяться к самым поздним датам, все запросы будут обрабатываться только одним региональным сервером, верно?

Это не так, поскольку последние данные также будут разбиты на области размером 256 МБ и сохранены на разных серверах регионов.

...