2013년 1월 19일 토요일

HDFS 셀 명령

Hadoop Homepage에 있는 문서 "File System Shell Guide"를 참고하여 작성하였음!
들어가기
HDFS(Hadoop Distributed File System)는 Linux의 i-node나 Windows의 FAT과 같은 파일을 저장하고 관리, 활용하기 위한 시스템이다. 다른 파일 시스템과 크게 다른 점은 여러 컴퓨터에 파일내용을 나누어 저장한다는 것이다. HDD에서의 i-node나 FAT의 개념을 컴퓨터로 확장해 보면 개념적으로는 HDFS와 거의 같아 보인다. 사용하기 위한 명령도 Linux 명령과 매우 흡사하다.
HDFS 명령 기본형식
HDFS 명령의 기본 형식은 다음과 같다.
[hadoop@alpha ~]$ hadoop fs -[command] [args]
 or
[hadoop@alpha ~]$ hadoop dfs -[command] [args]
"hadoop dfs"가 항상 앞에 붙고 뒤에 명령어(command)가 온다. [command] 앞에 "-" 오타가 아니다. 명령어는 항상 "-"로 시작하기 때문에 명시적으로 표시하였다.
끝에는 명령을 수행하는데 필요한 인수들이 위치한다. HDFS의 모든 명령은 인수(args)로 파일 혹은 파일경로를 가지며, 이들은 URI 형태로 정의된다.
URI
URI(Uniform Resource Identifier)는 말그대로 동일한 리소스를 유일하게 정의하고 식별하기 위한 규약으로 다음과 같은 형태를 가진다.
scheme://authority/path
크게 scheme, authority, path 세 부분으로 구성되며, HDFS 명령의 인수로 사용 시, 각 부분은 HDFS와 Local File System을 나타내기 위하여 다음과 같이 정의된다.
URI HDFS Local FS
scheme 문자열 "hdfs" 문자열 "file"
authority hostname:post (지정안함)
path Linux 파일경로와 동일하게 지정
Exmaple hdfs://alpha.centos:8020/data/README.txt file:///opt/hadoop-1.0.4/README.txt
HDFS의 authority에서 기본 포트를 이용하고 있다면 port는 지정할 필요가 없다. scheme와 authority은 생략가능하며, 생략했을 경우 명령을 수행하는 머신의 설정을 참고한다.
HDFS 셀 명령
이젠 HDFS의 셀 명령에 대하여 본격적으로 알아 보자.
명령어 설명
cat hadoop dfs -cat URI [URI ...]
지정한 파일(들)을 화면에 표시한다.
chgrp hadoop dfs -chgrp [-R] GROUP URI [URI ...]
지정한 파일의 group을 변경한다. 단, 파일의 소유자이거나 슈퍼유저만 변경 가능하다. "-R" 옵션을 붙이면 하위 디렉토리들도 재귀적으로 그룹이 변경된다.
chmod hadoop dfs -chmod [-R] MODE URI [URI ...]
지정한 파일의 권한(Permission)을 변경한다. 파일의 소유자이거나 슈퍼유저만 변경 가능할 수 있으며, "-R" 옵션을 붙이면 하위 디렉토리들도 재귀적으로 권한이 변경된다. MODE는 Linux 명령의 chmod와 똑 같이 지정하면 된다.
chown hadoop dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ...]
슈퍼유저만 사용할 수 있는 파일의 소유자를 변경하는 명령이다. "-R" 옵션을 붙이면 하위 디렉토리들도 재귀적으로 소유자가 변경된다.
copyFromLocal hadoop dfs -copyFromLocal <localsrc> URI
지정한 로컬 파일을 HDFS로 복사한다.
copyToLocal hadoop dfs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
지정한 HDFS 내 파일을 로컬 파일로 복사한다. "-ignorecrc" 옵션을 지정하면 CRC 체크를 실패하더라도 복사해 온다. CRC도 복사해 오고 싶으면 "-crc" 옵션을 사용한다.
count hadoop dfs -count [-q] <path> [path ...]
지정한 디렉토리(들) 내에 있는 디렉토리 개수, 파일 개수, 파일 크기, 디렉토리 명을 순서대로 표시한다. "-q" 옵션은 할당량(quota)에 대한 정보를 추가로 표시한다. QUOTA, REMAINING_QUATA, SPACE_QUOTA, REMAINING_SPACE_QUOTA 값들이 앞쪽에 붙여 나온다.
(왜 이름이 count인지 모르겠다.)
cp hadoop dfs -cp URI [URI ...] <dest>
지정한 파일(들)을 복사한다. 여러 파일이 지정된다면 <dest>는 디렉토리이어야 한다.
du hadoop dfs -du [-s] [-h] URI [URI ...]
지정한 디렉토리에 있는 파일과 디렉토리의 크기를 표시한다. 디렉토리의 경우 디렉토리 내 포함된 파일 및 서브 디렉토리의 크기를 모두 합한 값이 표시된다.
-s 옵션은 표시된 파일의 총크기를 표시한다.
-h 옵션은 사용자 친화적 형태로 크기를 표시한다. (67108864를 64.0m 표시)
※ 1.0.4에서 -s와 -h는 지원하지 않는 듯~
dus hadoop dfs -dus <arg>
지정한 디렉토리 내 파일, 서브 디렉토리의 크기를 모두 더한 값이 표시된다.
expunge hadoop dfs -expunge
휴지통을 비운다. 휴지통에 대한 자세한 내용은 HDFS Architecture Guide 참고.
get hadoop dfs -get [-ignorecrc] [-crc] <src> <localdst>
HDFS 내 지정된 파일을 로컬 파일로 복사한다. copyToLocal 명령과 유사하다.
-ignorecrc 옵션은 CRC 체크를 실패하더라도 파일을 복사해 온다.
파일과 CRC를 복사하려면 "-crc" 옵션을 이용한다.
getmerge hadoop dfs -getmerge <src> <localdst> [addnl]
지정한 HDFS의 디렉토리 내 모든 파일을 붙여 localdst에 저장한다. addnl을 지정하면 저장 시 파일 사이에 addnl에 지정한 문자(열)가 추가로 붙는다.
ls hadoop dfs -ls URI [URI ...]
지정한 HDFS 디렉토리(들)에 포함된 파일, 디렉토리 목록을 표시한다. Linux의 "ls -l" 명령과 비슷하다.
lsr hadoop dfs -lsr URI [URI ...]
ls의 recusive 버전. Linux의 "ls -Rl" 명령과 비슷하다.
mkdir hadoop dfs -mkdir URI [URI ...]
지정한 경로대로 디렉토리를 생성한다. "/data/text" 디렉토리를 생성하려고 할 때 "/data" 디렉토리가 없다면 생성 후 "/data/text"를 생성한다. Linux의 "mkdir -p ..."와 비슷하게 동작한다.
moveFromLocal hadoop dfs -moveFromLocal <localsrc> <dst>
복사 후 파일을 삭제하는 것을 제외하면 put 명령과 동일하다.
put hadoop dfs -put <localsrc> ... <dst>
로컬 PC 내 지정된 파일(들)을 HDFS로 복사한다. 여러 파일을 지정할 경우 <dst>은 디렉토리를 저징해야 한다.
rm hadoop dfs -rm [-skipTrash] URI [URI ...]
지정한 파일(들)을 지운다. 디렉토리를 지우려면 rmr 명령을 이용, 이 명령은 파일에만 가능하다.
"-skipTrash" 옵션을 지정하면 휴지통에 넣지 않고 바로 삭제한다.
rmr hadoop dfs -rmr [-skipTrash] URI [URI ...]
Recursive한 rm 버전이다. 디렉토리를 지정하면 포함된 모든 내용을 지우고 지정한 디렉토리도 지운다.
"-skipTrash" 옵션을 지정하면 휴지통에 넣지 않고 바로 삭제한다.
setrep hadoop dfs -setrep Number [-R] <path>
지정한 파일의 Replication Factor(복제 개수)를 변경한다.
"-R" 옵션을 지정하면 recursive하게 동작한다.
stat hadoop dfs -stat URI [URI ...]
지정한 디렉토리의 통계정보를 표시한다. 그런데 실제로 해보면 뭔가 좀 이상하다.
tail hadoop dfs -tail [-f] URI
지정한 파일의 마지막 1KB를 화면에 표시한다. "-f" 옵션은 Linux의 "tail -f ..."와 같다.
test hadoop dfs -test -[ezd] URI
"-e" 옵션: 지정한 파일이 존재한다면 0을 반환.
"-z" 옵션: 파일 크기가 0이라면 0을 반환.
"-d" 옵션: 지정한 파일이 디렉토리라면 0을 반환.
text hadoop dfs -text <src>
지정한 파일을 텍스트 형태로 화면에 표시한다. zip과 텍스트 형태만 사용할 수 있다.
touchz hadoop dfs -touchz URI [URI ...]
크기가 0인 파일을 생성한다.
명령 실행 샘플
말로만 하면 잘 안 와 닿는다. 직접 해 보는 것이 최고다. 다음은 Hadoop을 "/opt/hadoop-1.0.4"에 설치 후 셀 명령을 실행해 본 결과이다.
[hadoop@alpha hadoop-1.0.4]$ ls -l
합계 7524
-rw-rw-r--.  1 hadoop hadoop  446999 2012-10-03 14:17 CHANGES.txt
-rw-rw-r--.  1 hadoop hadoop   13366 2012-10-03 14:17 LICENSE.txt
-rw-rw-r--.  1 hadoop hadoop     101 2012-10-03 14:17 NOTICE.txt
-rw-rw-r--.  1 hadoop hadoop    1366 2012-10-03 14:17 README.txt
. . . (중략) . . .
drwxr-xr-x.  7 hadoop hadoop    4096 2013-01-11 21:47 docs
-rw-rw-r--.  1 hadoop hadoop    6840 2012-10-03 14:17 hadoop-ant-1.0.4.jar
-rw-rw-r--.  1 hadoop hadoop     410 2012-10-03 14:17 hadoop-client-1.0.4.jar
-rw-rw-r--.  1 hadoop hadoop 3928530 2012-10-03 14:17 hadoop-core-1.0.4.jar
-rw-rw-r--.  1 hadoop hadoop  142452 2012-10-03 14:17 hadoop-examples-1.0.4.jar
-rw-rw-r--.  1 hadoop hadoop     413 2012-10-03 14:17 hadoop-minicluster-1.0.4.jar
-rw-rw-r--.  1 hadoop hadoop 2656646 2012-10-03 14:17 hadoop-test-1.0.4.jar
-rw-rw-r--.  1 hadoop hadoop  287807 2012-10-03 14:17 hadoop-tools-1.0.4.jar
drwxr-xr-x.  2 hadoop hadoop    4096 2013-01-11 21:47 ivy
. . . (중략) . . .
drwxr-xr-x.  9 hadoop hadoop    4096 2012-10-03 14:17 webapps
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -mkdir /data/text
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -copyFromLocal *.txt /data/text
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -ls /data/text
Found 4 items
-rw-r--r--   3 hadoop supergroup     446999 2013-01-25 22:41 /data/text/CHANGES.txt
-rw-r--r--   3 hadoop supergroup      13366 2013-01-25 22:41 /data/text/LICENSE.txt
-rw-r--r--   3 hadoop supergroup        101 2013-01-25 22:41 /data/text/NOTICE.txt
-rw-r--r--   3 hadoop supergroup       1366 2013-01-25 22:41 /data/text/README.txt
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -mkdir /data/bin
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -copyFromLocal *.jar /data/bin
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -ls /data/bin
Found 7 items
-rw-r--r--   3 hadoop supergroup       6840 2013-01-25 23:21 /data/bin/hadoop-ant-1.0.4.jar
-rw-r--r--   3 hadoop supergroup        410 2013-01-25 23:21 /data/bin/hadoop-client-1.0.4.jar
-rw-r--r--   3 hadoop supergroup    3928530 2013-01-25 23:21 /data/bin/hadoop-core-1.0.4.jar
-rw-r--r--   3 hadoop supergroup     142452 2013-01-25 23:21 /data/bin/hadoop-examples-1.0.4.jar
-rw-r--r--   3 hadoop supergroup        413 2013-01-25 23:21 /data/bin/hadoop-minicluster-1.0.4.jar
-rw-r--r--   3 hadoop supergroup    2656646 2013-01-25 23:21 /data/bin/hadoop-test-1.0.4.jar
-rw-r--r--   3 hadoop supergroup     287807 2013-01-25 23:21 /data/bin/hadoop-tools-1.0.4.jar
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -count /data/text
           1            4             461832 hdfs://alpha.centos:8020/data/text
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -count /data/bin
           1            7            7023098 hdfs://alpha.centos:8020/data/bin
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -count /data
           3           11            7484930 hdfs://alpha.centos:8020/data
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -count -q /data
        none             inf            none             inf            3           11            7484930 hdfs://alpha.centos:8020/data
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -cat /data/text/NOTICE.txt
This product includes software developed by The Apache Software
Foundation (http://www.apache.org/).
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -chmod 666 /data/text/NOTICE.txt
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -ls /data/text
Found 4 items
-rw-r--r--   3 hadoop supergroup     446999 2013-01-25 22:41 /data/text/CHANGES.txt
-rw-r--r--   3 hadoop supergroup      13366 2013-01-25 22:41 /data/text/LICENSE.txt
-rw-rw-rw-   3 hadoop supergroup        101 2013-01-25 22:41 /data/text/NOTICE.txt
-rw-r--r--   3 hadoop supergroup       1366 2013-01-25 22:41 /data/text/README.txt
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -du /data
7023098     hdfs://alpha.centos:8020/data/bin
461832      hdfs://alpha.centos:8020/data/text
[hadoop@alpha hadoop-1.0.4]$ hadoop dfs -dus /data
hdfs://alpha.centos:8020/data   7484930
[hadoop@alpha hadoop-1.0.4]$ mkdir test
[hadoop@alpha hadoop-1.0.4]$ cd test
[hadoop@alpha test]$ hadoop dfs -getmerge /data/text/ ./MERGED.txt "\n\n\n"
13/01/27 00:41:32 INFO util.NativeCodeLoader: Loaded the native-hadoop library
[hadoop@alpha test]$ ls -l
합계 456
-rwxrwxrwx. 1 hadoop hadoop 461832 2013-01-27 00:41 MERGED.txt
[hadoop@alpha test]$ 
저작자: Yes, 상업적 이용: No, 컨텐츠 변경: No

댓글 없음:

댓글 쓰기