Квоты

Распределенная файловая система Hadoop (HDFS) позволяет администратору устанавливать квоты на количество используемых имен и объем пространства для отдельных каталогов. Квоты имен и квоты пространства работают независимо, но администрирование и реализация этих двух типов квот тесно параллельны.

Квоты имен

Квота имен – это жесткое ограничение на количество имен файлов и каталогов в root-дереве директории со следующими правилами:

  • Создание файлов и каталогов завершается ошибкой в случае превышения квоты;
  • Квоты придерживаются переименованных каталогов, но операция переименования не может быть выполнена в случае, если она приводит к нарушению квоты;
  • Попытка установить квоту будет успешной, даже если каталог нарушает эту новую квоту;
  • Новая созданная директория не имеет связанных квот;
  • Самая большая квота – Long.Max_Value. Установленное значение квоты в 1 заставляет каталог оставаться пустым (получается, сам каталог учитывается квотой).

Квоты постоянны благодаря fsimage. При запуске, если fsimage нарушает квоту (возможно, при скрытном изменении fsimage), выдается предупреждение для каждого из таких нарушений. Установка или удаление квоты создает запись в журнале.

Квоты пространств

Квота пространств – это жесткое ограничение на количество байтов, используемых файлами в root-дереве директории со следующими правилами:

  • Аллокация блоков не выполняется, если квота не позволяет записать полный блок;
  • Каждая реплика блока подсчитывается по квоте;
  • Квоты придерживаются переименованных каталогов, но операция переименования не может быть выполнена в случае, если она приводит к нарушению квоты;
  • Новая созданная директория не имеет связанных квот;
  • Самая большая квота – Long.Max_Value. Нулевая квота по-прежнему позволяет создавать файлы, но в них не могут быть добавлены блоки;
  • Каталоги не используют пространство файловой системы хоста и не учитывают квоту пространства;
  • Пространство файловой системы хоста, используемое для сохранения метаданных файла, не учитывается в квоте;
  • Квоты начисляются с предполагаемым коэффициентом репликации для файла, при этом изменение коэффициента репликации для файла приводит к кредитным или дебетовым квотам.

Квоты постоянны благодаря fsimage. При запуске, если fsimage нарушает квоту (возможно, при скрытном изменении fsimage), выдается предупреждение для каждого из таких нарушений. Установка или удаление квоты создает запись в журнале.

Квоты типа хранилища

Квота типа хранилища – это жесткое ограничение на использование определенного типа хранилища (SSD, DISK, ARCHIVE) для файлов в root-дереве директории. Во многих аспектах она работает аналогично квоте дискового пространства, но предлагает точный контроль над использованием пространства хранения кластера. Для установки квоты в каталоге должны быть настроены политики хранения, чтобы разрешить хранение файлов в разных типах хранилища в соответствии с политикой.

Квота типа хранилища может быть объединена с квотами пространств и квотами имен для эффективного управления используемого хранилища кластера. Например:

  • Для каталогов с настроенной политикой хранения администратор может установить квоты типа хранения для типов хранения с ограничением ресурсов, таких как SSD, и оставить квоты для других типов хранения и общую квоту пространств с менее ограничительными значениями или без ограничений вовсе (по умолчанию). HDFS при этом высчитывает квоты из обоих типов хранилища на основе политики хранения и общей квоты пространств;
  • Для каталогов без настроенной политики хранения администратор может не настраивать квоту типа хранения. Квота может быть настроена, даже если определенный тип хранилища недоступен (или доступен, но не настроен должным образом с информацией о его типе). Однако в этом случае рекомендуется использовать общую квоту пространств, так как информация о типе хранилища либо недоступна, либо неточна для применения квоты на тип хранения;
  • Квота типа хранения DISK ограничена за исключением случаев, когда DISK не является доминирующим носителем данных (например, кластер с преимущественным типом хранения ARCHIVE).

Административные команды

Квоты управляются набором команд, доступных только администратору:

  • hdfs dfsadmin -setQuota <N> <directory>...<directory> – установка квоты имени в значение N для каждого каталога. Наилучшее усилие для каждого каталога с сообщениями о сбоях (файл/каталог не существует, файл/каталог превысил квоту), когда N не является положительным длинным целым числом;
  • hdfs dfsadmin -clrQuota <directory>...<directory> – удаление любой квоты имен для каждого каталога. Это не является ошибкой, если каталог не имеет квоты имен;
  • hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory> – установка квоты пространств в значение N байт для каждого каталога. Это жесткое ограничение на общий размер всех файлов в дереве каталога. Квота пространств также учитывает репликацию, то есть 1 ГБ данных с репликацией 3 потребляет 3 ГБ квоты. Значение N также может быть указано с двоичным префиксом для удобства, например, 50g на 50 ГБ, 2t на 2 ТБ и т.д. Наилучшее усилие для каждого каталога с сообщениями о сбоях (файл/каталог не существует, файл/каталог превысил квоту), когда N не является ни нулем, ни положительным целым числом;
  • hdfs dfsadmin -clrSpaceQuota <directory>...<directory> – удаление любой квоты пространств для каждого каталога. Это не является ошибкой, если каталог не имеет квоты пространств;
  • hdfs dfsadmin -setSpaceQuota <N> -storageType <storagetype> <directory>...<directory> – установка квоты типа хранилища равной N байт для каждого каталога. Это жесткое ограничение на общее использование типа хранилища для всех файлов в дереве каталогов. Использование квоты типа хранилища отражает предполагаемое использование в соответствии с политикой хранения. Например, 1 ГБ данных с репликацией 3 и политикой хранения ALL_SSD потребляет 3 ГБ квоты SSD. Значение N также может быть указано с двоичным префиксом для удобства, например, 50g на 50 ГБ, 2t на 2 ТБ и т.д. Наилучшее усилие для каждого каталога с сообщениями о сбоях (файл/каталог не существует, файл/каталог превысил квоту), когда N не является ни нулем, ни положительным целым числом. Квота для конкретного типа хранилища задается, когда указана опция -storageType. Доступные типы хранения: RAM_DISK, DISK, SSD, ARCHIVE;
  • hdfs dfsadmin -clrSpaceQuota -storageType <storagetype> <directory>...<directory> – удаление квоты типа хранилища, указанной для каждого каталога. Это не является ошибкой, если каталог не имеет квоты для указанного типа хранилища. Квота, относящаяся к типу хранилища, очищается, если указана опция -storageType. Доступные типы хранения: RAM_DISK, DISK, SSD, ARCHIVE.

Команда отчета

Расширение команды count оболочки HDFS сообщает о значениях квот и текущем количестве используемых имен и байт:

hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory>

  • С помощью опции -q сообщается установленное для каждого каталога значение квоты имен, оставшаяся доступная квота имен, установленное значение квоты пространства и оставшаяся квота доступного пространства. Если каталог не имеет установленной квоты, сообщаются значения none и inf;
  • Опция -h показывает размеры в удобочитаемом формате;
  • Опция -v отображает строку заголовка;
  • Опция -t отображает набор квот для каждого типа хранилища и оставшуюся доступную квоту для каждого каталога. Если после опции указаны конкретные типы хранения, то отображается только квота и оставшаяся квота для указанных типов. В противном случае отображается квота и оставшаяся квота всех поддерживающих ее типов хранилищ.