Für echte Cluster ist es keine gute Idee, ls zu verwenden. Wenn Sie Administratorrechte haben, ist besser geeignet, fsimage zu verwenden.
ich ändern Skript oben Idee zu illustrieren.
zuerst holen fsimage
curl "http://localhost:50070/getimage?getimage=1&txid=latest" > img.dump
wandeln es (gleiche Ausgabe wie lsr gibt), um Text
hdfs oiv -i img.dump -o fsimage.txt
Script:
#!/bin/bash
usage="Usage: dir_diff.sh [days]"
if [ ! "$1" ]
then
echo $usage
exit 1
fi
now=$(date +%s)
curl "http://localhost:50070/getimage?getimage=1&txid=latest" > img.dump
hdfs oiv -i img.dump -o fsimage.txt
cat fsimage.txt | grep "^d" | while read f; do
dir_date=`echo $f | awk '{print $6}'`
difference=$((($now - $(date -d "$dir_date" +%s))/(24 * 60 * 60)))
if [ $difference -gt $1 ]; then
echo $f;
fi
done
Einer der früheren Lösungen war teilweise hilfreich. Ich könnte ein Shell-Skript schreiben, um alle Verzeichnisse zu finden und zu löschen, die einem Muster entsprechen, aber was ich wirklich tun musste, war nur diejenigen zu löschen, die älter als N Tage waren. (Http://stackoverflow.com/questions/7733096/hadoop-bash-delete-filenames-matching-range) – vid12