Hadoop и hbase перебалансировка после node дополнений

У меня есть фундаментальный вопрос о балансировке нагрузки. Я только что закончил добавлять новые узлы в наш кластер hadoop (2.3), который также имеет hbase v0.98. После добавления и наличия всех узлов онлайн в hadoop и hbase,

  • Как hbase влияет на rebaancer? Нужно ли явно пытаться перебалансировать hbase после перебалансировки hadoop?

  • Мой кластер Hadoop полностью занят hbase. Установка balancer_switch = true, будет ли она автоматически перебалансировать hbase и hadoop?

  • Каков наилучший способ убедиться, что оба hasoop и hbase перебалансированы и работают отлично?

Ответ 1

  • Балансер Hadoop (HDFS) перемещает блоки вокруг одного node в другой, чтобы попытаться сделать так, чтобы каждый datanode имел одинаковый объем данных (в пределах настраиваемого порога). Это испортит локальность данных HBases, а это означает, что конкретный регион может обслуживать файл, который больше не находится на нем локальным хостом.

  • HBase balance_switch балансирует кластер, так что каждый сервер регистров имеет одинаковое количество областей (или близко к ним). Это отдельно от балансира Hadoop (HDFS).

  • Если вы используете только HBase, я рекомендую не запускать балансировщик Hadoop (HDFS), поскольку это приведет к тому, что определенные регионы потеряют свою локальность данных. Это приводит к тому, что любой запрос в этот регион должен переходить по сети на один из datanodes, обслуживающий его HFile.

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

Ответ 2

Hadoop по умолчанию не выполняет балансировку уровня блока. Есть несколько инструментов, которые можно использовать для ручной балансировки в Hadoop, а именно https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/CommandsManual.html#balancer. Обратите внимание, что балансировка HDFS на самом деле довольно дорого, если у вас есть небольшое количество полностью пустых или новых узлов, которые вы только что добавили в кластер в противном случае, и мой опыт работы с ним заключается в том, что он выполняет только правильную работу по балансировке блоков HDFS, Запуск балансира несколько раз может улучшить общий баланс. Существуют также некоторые альтернативные реализации, которые могут лучше выполнять балансировку, чем одна встроенная в Hadoop.

Вы можете проверить баланс блоков из интерфейса HDFS NameNode, если вы нажмете ссылку "Live Nodes". Столбец "Блокированный пул" является полезным столбцом для этой цели. Если вы видите высокую долю в процентах блоков, используемых на разных машинах, вам может понадобиться перебалансировать ваш кластер HDFS.

balancer_switch влияет только на баланс сервера серверов. HBase будет автоматически балансировать ваши регионы в кластере по умолчанию, но вы можете вручную запустить balancer в любое время из hbase shell.

Вы можете проверить баланс региона с главной страницы главного пользовательского интерфейса HBase в разделе "Областные серверы" в столбце с именем "Загрузить", есть значение с именем "numberOfOnlineRegions". В целом, HBase делает довольно хорошую работу по поддержанию этого баланса. Я видел только несколько раз, когда я изначально создавал таблицы, которые по умолчанию балансируют алгоритм с перекошенным набором регионов. Несмотря на это, балансировка региона на самом деле довольно дешевая и может быть выполнена довольно быстро. Запуск его один раз обычно достаточно, чтобы привести вас в очень сбалансированное состояние.