Повторяющаяся ошибка HDFS: недореплицированные блоки

Каждый день наш кластер Hadoop сообщает о наличии недостаточно реплицированных блоков. Управляется через Cloudera Manager. Пример предупреждения о вреде для здоровья:

! Недостаточно реплицированные блоки

Относительно: 767 под реплицированными блоками в кластере. Всего 3115 блоков в кластере. Процент под реплицированными блоками: 24,62%. Порог предупреждения: 10,00%.

Я запускал команды, которые устраняют проблему, но на следующее утро предупреждение возвращается, а иногда и без добавления каких-либо новых данных. Одной из временно успешных команд была

hdfs dfs -setrep -R 2 /*

Я также попробовал другую рекомендуемую команду< /а>

su hdfs
hdfs fsck / | grep 'Under replicated' | awk -F':' '{print $1}' >> /tmp/under_replicated_files 
for hdfsfile in `cat /tmp/under_replicated_files`; do echo "Fixing $hdfsfile :" ;  hadoop fs -setrep 2 $hdfsfile; done

Оба работают, но исправление не является постоянным.

В Cloudera Manager для Replication Factor и Minimal Block Replication установлено значение 2.

Из-за того, что проблема возникает только примерно раз в 24 часа, трудно и требует много времени, чтобы попытаться исправить ее, а метод проб и ошибок является моим единственным средством. Я понятия не имею, почему эта ошибка продолжает возвращаться! Мы ценим любые предложения. Спасибо


person Smittey    schedule 25.09.2017    source источник
comment
По сути, если у вас есть недостаточно реплицированные данные, HDFS должна просто автоматически реплицировать блоки на другие узлы данных, чтобы соответствовать коэффициенту репликации. Вы также можете запустить Balancer, указанный в раскрывающемся списке CM › HDFS › Actions, чтобы исправить эту ошибку. Сколько узлов данных у вас есть в вашем кластере? Вы видели через веб-интерфейс NN, в каких файлах есть недореплицированные блоки? Являются ли эти файлы временными файлами, созданными заданием. Вы видели, исчезают ли эти предупреждения без каких-либо действий через некоторое время после завершения соответствующей работы?   -  person Salim    schedule 27.09.2017
comment
У вас есть работа, которая выполняется с той же частотой, что и при возникновении проблемы?   -  person tk421    schedule 02.10.2017
comment
@ tk421 К сожалению, нет, похоже, это происходит само по себе, без выполнения каких-либо заданий по приему данных (или любых заданий, если на то пошло).   -  person Smittey    schedule 04.10.2017
comment
@Салим Спасибо за ваш ответ. У меня есть 3 узла данных и 1 узел имени в кластере. Выполнив команду grep для недостаточно реплицированных блоков, я вижу, что почти все файлы находятся в /user/x/.Trash! Я понятия не имею, почему они появляются в одночасье. Возможно, это результат внутренней работы Hadoop?   -  person Smittey    schedule 04.10.2017
comment
Корзина ежедневно очищается в CDH (cloudera.com/documentation/enterprise /последние/темы/). Это, вероятно, то, что вызывает это.   -  person tk421    schedule 04.10.2017
comment
@ tk421 А, понятно, большое спасибо, что указали на это. Очень признателен! Мне все еще нужно выяснить, почему в первую очередь создаются файлы Trash, поскольку я ничего не удаляю намеренно...   -  person Smittey    schedule 05.10.2017


Ответы (1)


Проблема решена путем установки следующей конфигурации HDFS в Cloudera Manager:

  1. Перейдите в службу HDFS.
  2. Щелкните вкладку Конфигурация.
  3. Выберите Область > NameNode.
  4. Filesystem Trash Interval: 0 day(s)

    Ввод «0» отключает функцию корзины.

Это свойство также можно настроить с помощью fs.trash.interval

После того, как я установил это, я удалил все оскорбительные нереплицированные блоки мусора, что видно из просмотра файла under_replicated_files, созданного с помощью следующей команды:

hdfs fsck / | grep 'Under replicated' | awk -F':' '{print $1}' >> /tmp/under_replicated_files 

В итоге я просто удалил все .Trash для пользователей.

Все это затем предотвратило перемещение чего-либо еще в .Trash после его удаления (что, как я понимаю, может быть приемлемым решением не для всех, но это было прекрасно для моего варианта использования). Также удаление всех нереплицированных блоков означало, что предупреждение исчезло.

person Smittey    schedule 30.11.2017