У нас есть кластер Hadoop версии HDP - 26, на машинах redhat версии 7.x
Мы запускаем следующую команду, чтобы захватить файлы с поврежденными блоками.
Пример 1
[root@master_3 ~]# su hdfs
[hdfs@master_3 root]$ hdfs fsck -list-corruptfileblocks
blk_1097240344/localhdp/Rtrone/intercept_by_type/2018/4/10/16/2018_4_03_11_45.parquet/part-00002-be0f80a9-2c7c-4c50-b18d-db0f94a98cff.snly.parquet
blk_1097240348/localhdp/Rtrone/intkjd_country/2018/4/10/16/2018_4_03_11_45.parquet/part-00003-8600d0e2-c6b6-49b7-89cd-ef243cda4c5e.snly.parquet
The filesystem under path '/' has 2 CORRUPT files
так что файлы:
/localhdp/Rtrone/intercept_by_type/2018/4/10/16/2018_4_03_11_45.parquet/part-00002-be0f80a9-2c7c-4c50-b18d-db0f94a98cff.snly.parquet
/localhdp/Rtrone/intkjd_country/2018/4/10/16/2018_4_03_11_45.parquet/part-00003-8600d0e2-c6b6-49b7-89cd-ef243cda4c5e.snly.parquet
поискав в Google, я понимаю, что процедура обработки поврежденного блока в файлах должна быть следующей:
Это удалит поврежденные блоки HDFS:
hdfs fsck / -delete
снова запустите hdfs fsck -list-correctedfileblocks, чтобы узнать, успешно ли удален поврежденный блок.
hdfs fsck -list-correctedfileblocks
если поврежденные блоки все еще существуют (как в примере 1), нам нужно удалить файлы следующим образом
hdfs fs -rm /localhdp/Rtrone/intercept_by_type/2018/4/10/16/2018_4_03_11_45.parquet/part-00002-be0f80a9-2c7c-4c50-b18d-db0f94a98cff.snly.parquet
hdfs fs -rm /localhdp/Rtrone/intkjd_country/2018/4/10/16/2018_4_03_11_45.parquet/part-00003-8600d0e2-c6b6-49b7-89cd-ef243cda4c5e.snly.parquet
я прав или я что-то упускаю?
Пожалуйста, дайте мне знать, что нужно добавить или обновить в отношении моей процедуры
Я вижу в переполнении стека много похожих вопросов с тем же предметом, что и мой вопрос, как - stackoverflow.com/questions/19205057/…, так в чем разница, почему мой вопрос не подходит для stackoverflow?
Правила сайтов могут меняться с годами. Но, учитывая, что вопрос заключается в администрировании сервера, а не в программировании, его имеет смысл задать в другом месте. (хотя Stackoverflow почти всегда будет лучшим хитом Google)
@ cricket_007, поскольку я не получил ответа до сих пор, не могли бы вы помочь мне понять, является ли мое решение правильным?
Да, нужно удалить поврежденные блоки. Если вы их перечисляете, то вы их находите и удаляете. В чем проблема?
@ cricket_007, мои шаги 1-3 в порядке?
Вы неправильно употребляете слово «делает». И правильный способ сказать это: «Мои шаги в порядке?». Но, как написано в ответе, и ссылка у вас есть, да ... Удалите перечисленные файлы
Процедура очень проста.
Найдите поврежденные блоки
hdfs fsck / | egrep -v '^\.+$' | grep -v eplica
Найдите файлы, связанные с поврежденными блоками
hdfs fsck /path/to/corrupt/file -locations -blocks -files
Удалите поврежденный файл
hdfs fs -rm /Corrupted_File_Path
После этих шагов повторно запустите "hdfs fsck /", чтобы убедиться, что пропущенные блоки исчезли.
Stack Overflow - это сайт для вопросов по программированию и разработке. Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. О каких темах я могу спросить здесь в Справочном центре. Возможно, лучше спросить Суперпользователь или Обмен стеков Unix и Linux.