Удаление файлов из HDFS не освобождает место на диске

после обновления нашего небольшого кластера Cloudera Hadoop до CDH 5 Удаление файлов больше не освобождает доступное пространство для хранения. Несмотря на то, что мы удаляем больше данных, чем добавляем, файловая система продолжает заполняться.

настройка кластера

мы запускаем кластер из четырех узлов на физическом, выделенном оборудовании с общей емкостью хранения около 110 ТБ. 3 апреля мы обновили программное обеспечение CDH с версии 5.0.0-beta2 до версии 5.0.0-1.

мы уже привыкли поместите данные журнала на hdfs в текстовом формате со скоростью примерно 700 ГБ / день. 1 апреля мы перешли на импорт данных as .вместо этого GZ-файлы, которые снизили ежедневную скорость приема до 130 Гб.

поскольку мы хотим сохранить данные только до определенного возраста, есть ночная работа по удалению устаревших файлов. Результат этого раньше был хорошо виден на диаграмме мониторинга емкости hdfs, но больше не может быть виден.

синус мы импортируем около 570 ГБ меньше данных, чем мы удалить каждый день, можно было бы ожидать, что емкость используется, чтобы пойти вниз. Но вместо этого наше использование hdfs постоянно растет с момента обновления программного обеспечения кластера.

описание

под управлением hdfs hadoop fs -du -h / дает следующий результат:

0       /system
1.3 T   /tmp
24.3 T  /user

Это согласуется с тем, что мы ожидали увидеть, учитывая размер импортируемых файлов. Используя коэффициент репликации 3, это должно соответствовать использованию физического диска около 76.8 ТЕРАБАЙТ.

когда вместо hdfs dfsadmin -report результат разный:

Configured Capacity: 125179101388800 (113.85 TB)
Present Capacity: 119134820995005 (108.35 TB)
DFS Remaining: 10020134191104 (9.11 TB)
DFS Used: 109114686803901 (99.24 TB)
DFS Used%: 91.59%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0

здесь используется DFS сообщается как 99.24 TB, что мы видим на диаграмме мониторинга. Откуда взялись все эти данные?

что мы пробовали

наша проблема очень похожа на то, что произойдет, если обновление метаданных hdfs было выполнено, но не завершено. Я не думаю, что это необходимо при обновлении между этими версиями, но все равно выполнил оба шага "на всякий случай".

на томах хранения DN в локальной файловой системе есть много данных под "предыдущим / завершенным". У меня слишком мало знаний о деталях реализации hdsf, чтобы знать, является ли это значительным, но это может указывать что-то с завершением не синхронизировано.

у нас скоро закончится дисковое пространство на кластере, поэтому любая помощь очень ценится.

1 ответов


Я нашел аналогичную проблему в нашем кластере, которая возникла, вероятно, из-за неудачного обновления.

сначала убедитесь, что завершить обновление на namenode

hdfs dfsadmin -finalizeUpgrade

Я обнаружил, что datanodes по какой-то причине не завершили свои каталоги вообще.

на вашем datanode, вы должны увидеть следующий макет каталога

/[mountpoint}/dfs/dn/current/{blockpool}/current

и

/[mountpoint}/dfs/dn/current/{blockpool}/previous

если вы не оформили содержит все данные, созданные до обновления. Если вы удалите что - либо, оно не удалит его-следовательно, ваше хранилище никогда не уменьшается.

на самом деле самого простого решения было достаточно

перезапустите namenode

смотрите журнал datanode, вы должны увидеть что-то вроде этого

INFO org.apache.hadoop.hdfs.server.common.Storage: Finalizing upgrade for storage directory

после этого каталоги будут очищены в фоновом режиме и хранилище будет восстановлено.