Как HBase распределяет новые регионы из MapReduce по кластеру? - PullRequest
4 голосов
/ 25 октября 2011

Моя ситуация следующая: у меня 20-узловый кластер Hadoop / HBase с 3 ZooKeepers. Я выполняю большую обработку данных из таблиц HBase в другие таблицы HBase через MapReduce.

Теперь, если я создам новую таблицу и сообщу любому заданию использовать эту таблицу в качестве выходного приемника, все ее данные отправляются на один и тот же регион-сервер. Это не удивило бы меня, если бы было только несколько регионов. В моей конкретной таблице около 450 регионов, и теперь возникает проблема: большинство из этих регионов (около 80%) находятся на одном сервере региона!

Мне было интересно, как HBase распределяет назначение новых регионов по кластеру и является ли это поведение нормальным / желательным или является ошибкой. К сожалению, я не знаю, с чего начать поиск ошибки в моем коде.

Причина, по которой я спрашиваю, заключается в том, что это делает работу невероятно медленной. Только когда задания полностью завершены, таблица балансируется в кластере, но это не объясняет такого поведения. Разве HBase не должен распределять новые регионы в момент создания на разные серверы?

Спасибо за ваш вклад!

Ответы [ 2 ]

0 голосов
/ 25 ноября 2015

По умолчанию он просто балансирует регионы на каждом RS без учета таблицы.

Вы можете установить hbase.master.loadbalance.bytable, чтобы получить его.

0 голосов
/ 25 октября 2011

Я считаю, что это известная проблема.В настоящее время HBase распределяет регионы по кластеру в целом, независимо от того, к какой таблице они принадлежат.

Для справки обратитесь к книге HBase: http://hbase.apache.org/book/regions.arch.html

Возможно, вы старшеверсия hbase: http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/19155

Ниже приведено обсуждение балансировки нагрузки и перемещения области http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/12549

...