[HADOOP] HDFS에서 10 일보다 오래된 파일 삭제
HADOOPHDFS에서 10 일보다 오래된 파일 삭제
HDFS에서 10 일보다 오래된 파일을 삭제하는 방법이 있습니까?
리눅스에서는 다음을 사용합니다 :
find /path/to/directory/ -type f -mtime +10 -name '*.txt' -execdir rm -- {} \;
HDFS에서이 작업을 수행 할 수있는 방법이 있습니까? (파일 생성 일을 기준으로 삭제)
해결법
-
==============================
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.해결 방법 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.네, 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
from https://stackoverflow.com/questions/44235019/delete-files-older-than-10days-on-hdfs by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 지원되는 버전 라이브러리 Spark은 무엇입니까? (0) | 2019.06.08 |
---|---|
[HADOOP] 로컬 시스템에서 디렉토리를 hdfs java 코드로 복사 (0) | 2019.06.08 |
[HADOOP] 문제 : Hbase에서 데이터를 검색하는 Spark 셸의 스칼라 코드 (0) | 2019.06.08 |
[HADOOP] hadoop 메소드를 사용하여 여러 디렉토리에 출력 보내기 (0) | 2019.06.08 |
[HADOOP] RDBMS와의 Hadoop 비교 (0) | 2019.06.08 |