Моя ситуация следующая: у меня 20-узловый кластер Hadoop / HBase с 3 ZooKeepers. Я выполняю большую обработку данных из таблиц HBase в другие таблицы HBase через MapReduce.
Теперь, если я создам новую таблицу и сообщу любому заданию использовать эту таблицу в качестве выходного приемника, все ее данные отправляются на один и тот же регион-сервер. Это не удивило бы меня, если бы было только несколько регионов. В моей конкретной таблице около 450 регионов, и теперь возникает проблема: большинство из этих регионов (около 80%) находятся на одном сервере региона!
Мне было интересно, как HBase распределяет назначение новых регионов по кластеру и является ли это поведение нормальным / желательным или является ошибкой. К сожалению, я не знаю, с чего начать поиск ошибки в моем коде.
Причина, по которой я спрашиваю, заключается в том, что это делает работу невероятно медленной. Только когда задания полностью завершены, таблица балансируется в кластере, но это не объясняет такого поведения. Разве HBase не должен распределять новые регионы в момент создания на разные серверы?
Спасибо за ваш вклад!