Balancer

Данные HDFS не всегда могут быть размещены равномерно по всем DataNode. Одной из распространенных причин является добавление новых DataNodes в существующий кластер. При размещении новых блоков (данные для файла хранятся в виде серии блоков) NameNode учитывает различные параметры, прежде чем выбирать узлы DataNodes для получения этих блоков. Некоторые из них:

  • Политика для хранения одной из реплик блока на том же узле, что и узел, который записывает блок;
  • Необходимо распределить различные реплики блока по стойкам, чтобы кластер мог пережить потерю всей стойки;
  • Одна из реплик обычно размещается в той же стойке, что и узел, выполняющий запись в файл, что снижает количество операций ввода-вывода между стойками;
  • Данные HDFS распределяются равномерно по узлам DataNodes в кластере.

Из-за множества конкурирующих соображений данные могут быть неравномерно размещены между узлами DataNodes. HDFS предоставляет инструмент для администраторов, который анализирует размещение блоков и осуществляет перебалансировку данных через DataNode.

Пример использования:

hdfs balancer
      [-policy <policy>]
      [-threshold <threshold>]
      [-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
      [-include [-f <hosts-file> | <comma-separated list of hosts>]]
      [-source [-f <hosts-file> | <comma-separated list of hosts>]]
      [-blockpools <comma-separated list of blockpool ids>]
      [-idleiterations <idleiterations>]
      [-runDuringUpgrade]
  • -policy <policy>datanode (по умолчанию): кластер сбалансирован, если каждый datanode сбалансирован; blockpool: кластер сбалансирован, если каждый пул блоков в каждой datanode сбалансирован;
  • -threshold <threshold> – процент емкости диска; перезапись порога по умолчанию;
  • -exclude -f <hosts-file> | <comma-separated list of hosts> – исключение указанных datanode из балансировки;
  • -include -f <hosts-file> | <comma-separated list of hosts> – включение только указанных datanode для балансировки;
  • -source -f <hosts-file> | <comma-separated list of hosts> – выбор только указанных datanode в качестве исходных узлов;
  • -blockpools <comma-separated list of blockpool ids> – работа балансировщика только на blockpools, включенных в этот список;
  • -idleiterations <iterations> – максимальное количество холостых итераций перед выходом; перезапись количества итераций по умолчанию (5);
  • -runDuringUpgrade – следует ли запускать балансировщик во время текущего обновления HDFS. Действие не влияет на используемое пространство на перегруженных машинах, поэтому нежелательно;
  • -h|--help – показывает используемый инструмент и справочную информацию.

Для остановки процесса перебалансировки администратор может просто нажать комбинацию клавиш Ctrl-C.

Important

Политика blockpool является более строгой, чем политика datanode

Помимо указанных параметров введена функция закрепления (pinning feature) для предотвращения перемещения определенных реплик балансировщиком или mover. По умолчанию функция отключена и может быть включена с помощью свойства конфигурации dfs.datanode.block-pinning.enabled. В включенном состоянии она влияет только на блоки, которые записываются в указанные в вызове create() узлы. Функция полезна при необходимости локального сохранения данных для таких приложений, как HBase regionserver.