Ответ 1
Вы можете использовать
hdfs fsck /
чтобы определить, какие файлы имеют проблемы. Просмотрите выходные данные для отсутствующих или поврежденных блоков (на данный момент игнорируйте блоки под репликацией). Эта команда действительно особенно в большой файловой системе HDFS, поэтому я обычно прихожу к значимый вывод с помощью
hdfs fsck / | egrep -v '^\.+$' | grep -v eplica
который игнорирует строки, содержащие только точки и строки, говорящие о репликации.
Как только вы обнаружите поврежденный файл
hdfs fsck /path/to/corrupt/file -locations -blocks -files
Используйте этот вывод, чтобы определить, где могут жить блоки. Если файл чем размер вашего блока, он может иметь несколько блоков.
Вы можете использовать номера зарегистрированных блоков, чтобы перейти к datanodes и журналы номенелодов, которые ищут машину или машины на котором жили кварталы. Попробуйте найти ошибки файловой системы на этих машинах. Отсутствующие точки монтирования, datanode не работает, файловая система переформатирована/воспроизведена. Если вы можете найти проблему таким образом и вернуть блок обратно в файл, который будет полезен еще раз.
Смыть полоскание и повторить до тех пор, пока все файлы не станут здоровыми или вы не выдохнете все альтернативы, которые ищут блоки.
Как только вы определите, что произошло, и вы не сможете восстановить больше блоков, просто используйте
hdfs fs -rm /path/to/file/with/permanently/missing/blocks
чтобы восстановить файловую систему HDFS, чтобы вы могли начать отслеживая новые ошибки по мере их возникновения.