Балансировка блоков
Новые узлы могут быть напрямую доабвлены в кластер. На новом узле должна быть установлена та же версия Hadoop с той же конфигурацией, как в кластере (conf/hadoop-site.xml). Запуск демона DataNode заставит соединиться с NameNode и присоединиться к кластеру. (Также новый узел должен быть добавлен в файл slaves на главном сервере, чтобы сообщить мастеру, как вызвать команды на базе скрипта на новый узел.)
Но изначально у нового DataNode нет в себе данных; и поэтому свободное место зависит от существующих узлов. Новые файлы будут храниться на новом DataNode в дополнение к уже существующим, но для оптимального использования хранилище должно быть равномерно сбалансировано между всеми узлами.
Этого можно достичь с автоматическим инструментом балансировки от Hadoop. Класс Balancer будет разумно распределять блоки между узлами для достижения равномерного распределения блоков, начиная с определенного отправного пункта, выражая значение в процентах. (По умолчанию — 10%) Меньшее процентное содержание делает узлы более равномерно сбалансированными, но может потребовать больше времени на достижение этого состояния. Идеальная балансировка (0%) нежелательна к применению.
Скрипт балансировки может быть запущен путем старта bin/start-balancer.sh в каталоге Hadoop. Скрипт может обеспечить начало балансирующего процентного содержания, используя параметр -threshold ; например, bin/start-balancer.sh -threshold 5. Балансировщик автоматически закроется, когда достигнет своей цели, или когда случится ошибка, или когда не сможет найти больше перемещаемых блоков для улучшения баланса. Также балансировщик может быть безопасно выключен администратором, через запуск bin/stop-balancer.sh.
Скрипт балансировки может быть запущен когда никто больше не использует кластер (скажем, ночью), но также может быть запущен в модели «online», когда выполняется много иных задач. Чтобы предотвратить использование процессом ребалансировки всей ширины канала, тем самым значительно снижая производительность других процессов кластера, параметр конфигурации dfs.balance.bandwidthPerSec может использоваться для ограничения числа байт в секунду, которые может выделять каждый узел на восстановление равновесия.