Existe-t-il un moyen de supprimer des fichiers de plus de 10 jours sur HDFS?
Sous Linux, j'utiliserais:
find /path/to/directory/ -type f -mtime +10 -name '*.txt' -execdir rm -- {} \;
Existe-t-il un moyen de le faire sur HDFS? (Suppression à effectuer en fonction de la date de création du fichier)
Solution 1: en utilisant plusieurs commandes comme l'a répondu daemon12
hdfs dfs -ls /file/Path | tr -s " " | cut -d' ' -f6-8 | grep "^[0-9]" | awk 'BEGIN{ MIN=14400; LAST=60*MIN; "date +%s" | getline NOW } { cmd="date -d'\''"$1" "$2"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-WHEN; if(DIFF > LAST){ print "Deleting: "$3; system("hdfs dfs -rm -r "$3) }}'
Solution 2: à l'aide du script Shell
today=`date +'%s'`
hdfs dfs -ls /file/Path/ | grep "^d" | while read line ; do
dir_date=$(echo ${line} | awk '{print $6}')
difference=$(( ( ${today} - $(date -d ${dir_date} +%s) ) / ( 24*60*60 ) ))
filePath=$(echo ${line} | awk '{print $8}')
if [ ${difference} -gt 10 ]; then
hdfs dfs -rm -r $filePath
fi
done
Que dis-tu de ça:
hdfs dfs -ls /tmp | tr -s " " | cut -d' ' -f6-8 | grep "^[0-9]" | awk 'BEGIN{ MIN=14400; LAST=60*MIN; "date +%s" | getline NOW } { cmd="date -d'\''"$1" "$2"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-WHEN; if(DIFF > LAST){ print "Deleting: "$3; system("hdfs dfs -rm -r "$3) }}'
Une description détaillée est ici .
Oui, vous pouvez essayer avec HdfsFindTool:
hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-job.jar \
org.Apache.solr.hadoop.HdfsFindTool \
-find /pathhodir -mtime +10 -name ^.*\.txt$ \
| xargs hdfs dfs -rm -r -skipTrash