개발/Hadoop

[Hadoop] Hdfs dfs 명령어 정리

wonpick 2022. 12. 30. 11:12

(3.2.2 version 기준)

자주쓰이는 명령어 

https://www.geeksforgeeks.org/hdfs-commands/

https://data-flair.training/blogs/hdfs-hadoop-commands/


Hadoop 명령어

Hadoop filesystem command를 사용하기 위함.

hdfs dfs [GENERIC_OPTIONS] [COMMAND_OPTIONS]

 


1. maxdepth (를 쓰지 않고 현재 디렉토리에서만 삭제하기) 

- 상황: 현재 경로에서 8자리 파일명만 삭제하고 싶다.

- 설명: 현재 경로에서 8자리인 폴더를 찾은 뒤에 스크립트를 사용해서 전체 삭제.
find를 사용하려고 하였으나 해당 명령어는 모든 폴더를 돌며(recursive하게) 작동하며, 하둡에서는 maxdepth를 사용할 수 없기에 ls로 해결함. 

표준 Unix 명령과 달리 Hadoop 버전은 예제에 표시된 "maxdepth" 또는 "type" 옵션을 아직 구현하지 않습니다.
- https://issues.apache.org/jira/browse/HADOOP-10578
- https://community.cloudera.com/t5/Support-Questions/How-do-you-move-files-but-not-the-directories-in-hdfs/m-p/123914/highlight/true
  • hdfs dfs -ls [URL] 명령어는 주어진 URL의 디렉토리에 있는 파일 목록을 출력함.
  • awk '{print $8}'는 출력된 파일 목록에서 열 8(파일 이름)만 출력함.
  • grep -P '/.{8}$'는 이름이 8자 이상인 파일만 출력함.
  • 그리고 while read f; do hdfs dfs -rm -r $f; done 부분은 출력된 파일을 하나씩 읽어서 hdfs dfs -rm -r 명령어를 사용하여 삭제하게 됨. -rm -r 옵션은 해당 경로가 디렉토리인 경우 그 안에 있는 모든 파일과 디렉토리까지 재귀적으로 삭제시키게 됨.
  • 주어진 URL의 디렉토리 안에 있는 이름이 8자 이상인 파일을 모두 삭제하는 기능을 구현하나, 주의할 점은 이 명령어는 삭제할 파일이 없는 경우 오류가 발생할 수 있다. 따라서 파일이 존재하는지 확인하고 실행해야 함.
#삭제
hdfs dfs -ls [URL] | awk '{print $8}'| grep -P '/.{8}$'| while read f; do hdfs dfs -rm -r $f; done
#확인
hdfs dfs -ls [URL] | awk '{print $8}'| grep -P '/.{8}$'| while read f; do hdfs dfs -ls $f|echo $f $f; done

참고)

https://stackoverflow.com/questions/11697810/grep-across-multiple-files-in-hadoop-filesystem