본문으로 바로가기

[Hadoop] 하둡 - HDFS 명령어 #2

category 개발이야기/Hadoop 2019. 9. 17. 13:57
반응형

기본적으로 하둡의 명령어는 유닉스 계열의 명령어와 유사합니다.

거의 같다고 볼수 있는데 다만 hadoop fs -xxxx로 시작한다는점만 살짝 차이가 있습니다.

이미 눈에 많이 익은 명령어 이기 때문에 다행스럽게도 부담스럽지 않네요.

이글은 "시작하세요! 하둡 프로그래밍"을 참고하였습니다.

대부분의 내용이 생략되고 정리된 내용이므로 자세한 내용은 꼭 책을 구입하여 확인하시기 바랍니다.


기본적으로 하둡 설치후 PATH를 설정하지 않았다면 아래 명령어들은  ./bin/hadoop fs -xxxx 로 사용해야 합니다.


help

지원하는 명령어의 전체 설명을 확인할수 있는 명령어 입니다.

~ hadoop fs -help


ls, lsr

파일 목록을 보는 명령어 입니다.
lsr은 하위 디렉토리의 정보까지 모두 표시 합니다.

~ hadoop fs -ls
~ hadoop fs -ls 특정폴더명

~ hadoop fs -lsr
~ hadoop fs -lst 특정폴더명


du, dus

바이트 단위로 폴더나 파일의 사용량을 나타냅니다.

~ hadoop fs -du

~ hadoop fs -du 특정폴더


dus는 폴더의 전체 합산 용량만을 나타냅니다.

~ hadoop fs -dus

~ hadoop fs -dus 특정폴더


추가적으로 -h 옵션 사용시 Mb 단위로 표시되어 읽기가 수월합니다. (유닉스와 똑같죠~)


cat, text

파일의 내용을 출력합니다.
~ hadoop fs -cat readme.txt

text는 일반 텍스트 파일 뿐만 아니라 zip으로 묶여있는 현태도 화면에 출력이 가능합니다.
~ hadoop fs - text readme.txt


mkdir

디렉토리를 생성합니다. 만약 이미 생성된 디렉토리라면 오류가 발생됩니다.

~ hadoop fs -mkdir 생성할 폴더명


put, copyFromLocal

로컬에서 HDFS로 파일을 전송할때 사용합니다.

1. 기본적인 사용
~ hadoop fs -put [로컬파일경로1] [로컬파일경로2] [...] [목적지 파일 경로]

ex) ~ hadoop fs -put readme.txt testFolder

2. 두개의 파일을 전송
ex) ~ hadoop fs -put conf/hadoop-env.sh conf/core-site.xml tesetFolder

3. 디렉토리째 복사
ex) ~ hadoop fs -put conf confcopy

위 명령어의 경우 confcopy 폴더가 자동 생성된 후에 conf 폴더의 내용이 복사됩니다.

copyFromLocal은 put과 사용법이 동일합니다

get, copyToLocal

HDFS의 파일을 로컬로 복사합니다.

HDFS는 파일의 무결성을 위해 체크썸 파일을 숨김파일로 가지고 있는데, 이를 같이 받기 위해서는 -crc 옵션 추가가 가능하며, 체크썸을 무시하기 위해서는 -ignoreCrc 옵션을 사용할 수 있습니다.

~ hadoop fs -get [소스파일경로1]  [소스파일경로2] [...] [목적지디렉토리 또는 파일 경로] 


1. hdfs의 파일을 output 이라는 파일 이름으로 받아옵니다.

ex) ~ hadoop fs -get wordcount_output/part-r-00000 output


2. hdfs의 폴더째 받아옵니다. (wordcount_output -> output이라는 폴더로 받아옴)

ex) ~ hadoop fs -get wordcount_output output


getmerge

HDFS의 파일을 merge하여 하나의 파일로 가져 옵니다.

~ hadoop fs -getmerge [소스폴더명] [로컬 파일명]


ex)

1. hdfs 내부에 임시 폴더를 만듭니다.

~ hadoop fs -mkdir testfolder


2. 두개의 파일을 (test1, test2) hdfs의 폴더에(testfolder) 올립니다.

~ hadooop fs -put test1 test2 testfolder


3. 두개의 파일을 합쳐서 하나의 파일로(mergedtest) 내려 받습니다.

~ hadoop fs -getmerge testfolder mergedtest


cp

파일을 복사합니다. 유닉스 명령어와 동일합니다.

다만 hdfs 내에서 복사됩니다. (당연한 얘기지만~)

또한 소스 파일 여러개를 쓰면 한번에 지정된 폴더로 복사할 수 있습니다.

~ hadoop fs -cp [소스 폴더 또는 파일...] [목적지 폴더 또는 파일]

mv

hdfs 내부에서 파일을 이동시킵니다.

~ hadoop fs -mv [소스 폴더 또는 파일...] [목적지 폴더 또는 파일] 


여러개의 파일을 한번에 이동시킬 경우 목적지를 반드시 폴더로 지정해야 합니다.


moveFromLocal

copyFromLocal과 동일하나 hdfs내의 파일은 삭제됩니다.,


rm, rmr

파일을 삭제합니다.

rm을 사용할 경우 반드시 폴더가 비어있어야만 삭제가 가능합니다.

따라서 폴더 내부의 모든 내용을 recursive하게 삭제하기 위해서는 rmr을 사용해야 합니다.

~ hadoop fs -rm [디렉토리 또는 파일]

~ hadoop fs -rmr [디렉토리]


2.0 버전 이후부터는 -rmr 대신 -rm -r 을 사용합니다.

~ hadoop fs -rm -r [디렉토리]

count

지정한 폴더의 파일의개수, 내부 폴더의 개수등의 정보를 반환합니다.

hdfs는 폴더에 생성가능한 파일의 개수나 용량을 제한할수 있으므로 -q 옵션을 이용하여 이런 정보들을 조회 할 수도 있습니다.

~ hadoop fs -count <-q> [디렉토리 또는 파일]


출력되는 정보의 순서는 아래와 같습니다.

디렉토리 개수 | 전체 파일개수 | 전체 파일 용량 | 조회한 경로


-q 옵션을 준 경우 출력되는 정보의 순서는 아래와 같습니다.

제한한 파일 개수 | 파일개수 잔여 개수 | 제한한 파일 용량 | 남은 파일 용량 | 전체 디렉토리 개수 | 전체 파일 용량 | 조회한 경로 


tail

파일의 마지막 내용을 보여줍니다. (마지막 1kb에 해당하는 부분)

-f 을 줄 경우 해다 파일이 변경되면 화면의 내용도 갱신됩니다.

~ hadoop fs -tail <-f> [파일]


chmod, chown chgrp

권한을 변경하는 기능은 유니그 계열과 동일합니다.

hdfs 내부에서 권한을 변경하는게 얼마나 유의미? 할지는 모르겠지만...

세개의 명령어에서 -R 옵션을 줄 경우 하위 폴더까지 전부 변경 됩니다.

1. chmod: 파일 또는 디렉토리의 권한을(rwx)를 변경

2. chown: 소유자 또는 소유자&그룹을 변경

3. chgrp: 소유 그룹만 변경


~ hadoop fs -chmod <-R> [권한모드..] [디렉토리 또는 파일..]

~ hadoop fs -chown <-R> [변경 사용자명: 변경 그룹명] [디렉토리 또는 파일..]

~ hadoop fs -chgrp <-R> [변경 그룹명] [디렉토리 또는 파일..] 


touchz

0 바이트의 파일을 생성합니다.

~ hadoop fs -touchz [파일1] [파일2] ....


stat

지정된 경로의 정보를 조회합니다. 옵션이 없을경우 최종 변경 시간을 반환하지만, 하기의 옵션을 추가할 경우 다양한 정보를 확인 할 수 있습니다.

- %b 블록단위의 파일크기

- %F 디렉토리 인지, 파일인지

- %n 디렉토리명 또는 파일명

- %o 블록크기

- %r 복제파일 개수

- %y 날짜 표기

- %Y 날짜를 timestamp 형태로 출력

~ hadoop fs -stat <옵션> [디렉토리 또는 파일]


ex)

~ hadoop fs -stat wordcount_output

~ hadoop fs -stat %b-%F-%n-%o-%r-%y-%Y wordcount_output


expunge

HDFS에서는 삭제한 파일을 .Trash/ 라는 폴더에 저장했다가 일정 시간이 지나면 삭제합니다. (휴지통 개념)

휴지통을 강제로 비울때 사용합니다.

 ~ hadoop fs -expunge



반응형