복붙노트

[HADOOP] HDFS에서 10 일보다 오래된 파일 삭제

HADOOP

HDFS에서 10 일보다 오래된 파일 삭제

HDFS에서 10 일보다 오래된 파일을 삭제하는 방법이 있습니까?

리눅스에서는 다음을 사용합니다 :

find /path/to/directory/ -type f -mtime +10 -name '*.txt' -execdir rm -- {} \;

HDFS에서이 작업을 수행 할 수있는 방법이 있습니까? (파일 생성 일을 기준으로 삭제)

해결법

  1. ==============================

    1.이것은 어떤가요:

    이것은 어떤가요:

    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) }}'
    

    자세한 설명은 여기에 있습니다.

  2. ==============================

    2.해결 방법 1 : daemon12가 응답 한 여러 명령 사용

    해결 방법 1 : 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) }}'
    

    해결책 2 :  쉘 스크립트 사용하기

    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
    
  3. ==============================

    3.네, HdfsFindTool을 사용해 볼 수 있습니다 :

    네, 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
    
  4. from https://stackoverflow.com/questions/44235019/delete-files-older-than-10days-on-hdfs by cc-by-sa and MIT license