Hadoop удалить файл, который имеет нулевой байт

Я ищу команду в hadoop 2.x для удаления файлов с нулевыми байтами в hdfs. Может ли кто-нибудь, пожалуйста, дайте мне знать соответствующую команду. Я пытаюсь найти файлы с нулевыми байтами в hdfs и удалить их из каталога.


person hadoopsbx    schedule 21.11.2016    source источник


Ответы (2)


for f in $(hdfs dfs -ls -R / | awk '$1 !~ /^d/ && $5 == "0" { print $8 }'); do hdfs dfs -rm "$f"; done

Шаг за шагом:

hdfs dfs -ls -R / - рекурсивно перечислить все файлы в HDFS

awk '$1 !~ /^d/ && $5 == "0" { print $8 }') - вывести полный путь к тем, которые не являются каталогами и имеют размер 0

for f in $(...); do hdfs dfs -rm "$f"; done - итеративно удалить

person Kombajn zbożowy    schedule 22.11.2016

Основываясь на ответе Комбайна, если у вас есть много файлов для удаления, будет быстрее использовать xargs. Это позволит вам удалить несколько файлов за одну команду hdfs, что довольно дорого.

hdfs dfs -ls -R / | awk '$1 !~ /^d/ && $5 == "0" { print $8 }' | xargs -n100 hdfs dfs -rm
person highlycaffeinated    schedule 01.09.2017
comment
@ylabidi, чтобы расширить то, что описал Комбайн, он печатает поле 8 (имя файла) для строк из ls, которые не начинаются с «d» (каталоги) и где 5-е поле (размер) не равно 0 - person highlycaffeinated; 15.02.2018