HDFS 테스트

2012.08.20 15:23

가을의 곰을... 조회 수:4583

 

HDFS 테스트

 

[출처] http://nadayyh.springnote.com/pages/6064907?print=1

 

지난 포스팅에서는 GFS 및 HDFS의 특징에 대하여 간략하게 소개하는 글을 올렸습니다.
이번 포스팅에서는 Hadoop 의 파일시스템인 HDFS 에 대해여 간단한 기능 테스트를 수행해 보겠습니다.

1. 자바기반의 파일시스템
리눅스나 유닉스 기반의 파일시스템은 대부분 C로 작성되어 있습니다. 또한, 파일시스템 자체가
운영체제의 중요한 기능중 하나이므로 대부분이 커널 코드로 통합되어 동작하고 있습니다. 그러므로,
파일시스템의 코드는 해당 운영체제에 매우 의존적이어서 이기종 플랫폼간의 호환성을 유지하기가
매우 어렵습니다. 물론 파일시스템의 표준화 활동으로 운영체제가 지녀야할 공통 인터페이스를 정의하고
하지만, 네트워크 기반의 클러스터 환경으로 파일시스템 기능을 확장하면 이러한 공통 규약을 준수하기가
매우 어렵습니다.

클러스터 기반의 분산/병렬 파일시스템은 기본적으로 NFS 의 일부라고 간주할 수 있습니다. 그러므로
NFS 표준 규정을 준수해야 합니다만, 확장성과 성능면에 NFS 에서 정의하는 모든 조건을 만족하기는
쉬운 일이 아닙니다. 자세한 정보는 HDFS 나 GFS 관련 기술문서 및 논문을 참고하세요.

현존하는 병렬/분산 파일시스템의 종류는 매우 많습니다. 그러므로 클러스터 구축시 시스템 관리자들은
어떠한 파일시스템을 사용할지 많은 고민을 하게 됩니다. 무엇보다 가장 현명한 방법은 응용 어플리케이션의
워크로드에 가장 적합한 파일시스템을 선택하고 구축하는 것입니다. 앞 포스팅에서도 계속 언급한 바와
같이 HDFS 는 성능중심의 HPC 클러스터보다는 대용량 데이터 처리에 적합한 클러스터 용도에 적합한
파일시스템임을 잊지 마십시오.

HDFS 는 순수하게 자바로 구현된 파일시스템입니다. 운영체제의 입장으로 볼때 HDFS 는 단지 User
영역에서 동작하는 프로세스일 뿐입니다. 그러므로, HDFS는 운영체제의 로컬파일시스템 위에 대용량
데이터 처리가 가능한 분산 파일시스템 계층을 한번 더 추상화 시켜서 사용자에게 제공합니다.
또한, 대부분의 코드가 자바언어로 작성되었기 때문에 운영체제의 종속적인 Native 코드가 다른
파일시스템에 비하여 적다고 봅니다.

[참고] 아직 코드레벨로 분석을 못해서 상식적인 수준에서 위 단락을 언급 하였습니다.

HDFS 는 User 영역에서 구현된 파일시스템이기 때문에 운영체제에서 제공하는 ls, cp, rm 과 같은 명령어와
호환이 되지 않습니다. 위의 명령어는 시스템 콜을 통해 Kernel 영역에 동작하는 파일시스템의 기능을
호출하기 때문입니다. 대신 HDFS 는 hadoop 명령어를 별도로 제공하여 User 영역에서 동작하는 파일시스템
데몬과 통신하여 사용자에게 유사한 파일처리 기능을 제공합니다.

2. 파일의 생성 및 삭제
hadoop 명령어는 다양한 기능을 사용자에게 제공합니다. 그중에서 dfs 옵션을 통해서 HDFS의 기본 기능을
사용자가 쉘 형태로 이용할 수 있게 도와줍니다.

[root@hshhome bin]# pwd
/share/hadoop-0.16.4/bin
[root@hshhome bin]# ./hadoop dfs
Usage: java FsShell
[-ls <path>]
[-lsr <path>]
[-du <path>]
[-dus <path>]
[-mv <src> <dst>]
[-cp <src> <dst>]
[-rm <path>]
[-rmr <path>]
[-expunge]
[-put <localsrc> <dst>]
[-copyFromLocal <localsrc> <dst>]
[-moveFromLocal <localsrc> <dst>]
[-get [-crc] <src> <localdst>]
[-getmerge <src> <localdst> [addnl]]
[-cat <src>]
[-text <src>]
[-copyToLocal [-crc] <src> <localdst>]
[-moveToLocal [-crc] <src> <localdst>]
[-mkdir <path>]
[-setrep [-R] [-w] <rep> <path/file>]
[-touchz <path>]
[-test -[ezd] <path>]
[-stat [format] <path>]
[-tail [-f] <file>]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-chgrp [-R] GROUP PATH...]
[-help [cmd]]
...
[root@hshhome bin]#

위 예제와 같이 dfs 옵션은 다양한 파일처리 기능을 제공합니다. 리눅스 사용자라면 눈에 익은 ls, rm 명령어도
보입니다.

앞서 설명한 바와 같이 HDFS는 User 영역의 파일시스템이므로, 로컬 파일시스템과 상호간 파일을 주고 받는
명령어가 필요합니다. put 명령과 get 명령어가 이러한 기능을 제공합니다. 쉽게 이야기하자면 업로드 (로컬
파일시스템 -> HDFS) 와 다운로드 (HDFS -> 로컬 파일시스템) 의 개념이지요.

[root@hshhome hadoop-0.16.4]# pwd
/share/hadoop-0.16.4
[root@hshhome hadoop-0.16.4]# ls
CHANGES.txt build.xml hadoop-0.16.4-core.jar logs
LICENSE.txt c++ hadoop-0.16.4-examples.jar src
NOTICE.txt conf hadoop-0.16.4-test.jar webapps
README.txt contrib lib
bin docs libhdfs
[root@hshhome hadoop-0.16.4]# bin/hadoop dfs -put conf test_hdfs
[root@hshhome hadoop-0.16.4]# bin/hadoop dfs -ls
Found 1 items
/user/root/test_hdfs <dir> 2008-06-23 22:42 rwxr-xr-x root supergroup
[root@hshhome hadoop-0.16.4]#

위 예제는 로컬 파일시스템의 conf 디렉토리를 HDFS 의 test_hdfs 디렉토리로 복사한 것입니다. ls 명령어를
사용하여 HDFS에 test_hdfs 디렉토리가 생성된 것을 알 수 있습니다.

본 예제가 수행되는 클러스터는 관리노드겸 계산노드 역할을 하는 호스트 운영체제(master) 와 VMWare
상에서 동작하는1개의 계산노드(node01) 로 구성되어 있습니다. 총 2개의 계산노드가 존재하는 셈이니
test_hdfs 파일은 각각의 노드에 동일하게 복제 (Replication) 된 상태입니다.

3. 사용자별 영역 할당
앞 절에서는 root 권한으로 hadoop 명령어를 수행하였기 때문에 HDFS 의 기본 디렉토리가 /user/root 로
설정되어 있습니다. 개인 사용자별로 수행하려면 /user 의 하위 디렉토리에 사용자 이름으로 디렉토리를
생성 하고 권한을 설정해야 합니다.

test 라는 사용자를 위한 HDFS 공간을 생성하고 특정 파일을 복사하는 테스트를 수행해 봅시다.

[root@hshhome ~]# hadoop dfs -mkdir /user/test
[root@hshhome ~]# hadoop dfs -chown -R test:test /user/test
[root@hshhome ~]# hadoop dfs -ls /user
Found 2 items
/user/test <dir> 2008-06-23 23:06 rwxr-xr-x test test
/user/root <dir> 2008-06-23 22:42 rwxr-xr-x root supergroup
[root@hshhome ~]#

[root@hshhome ~]# su - test
[test@hshhome ~]$ ll test
-rw-rw-r-- 1 test test 1048576 6월 23 23:03 test
[test@hshhome ~]$ hadoop dfs -put test user_test
[test@hshhome ~]$ hadoop dfs -ls
Found 1 items
/user/test/user_test <r 2> 1048576 2008-06-23 23:09 rw-r--r-- test test
[test@hshhome ~]$

4. 웹기반 파일시스템 모니터링
HDFS는 웹기반의 관리용 모니터링 기능을 제공합니다. 관리노드에서 수행되고 있는 NameNode 가
이 기능을 제공하고 있습니다. 웹브라우져에서 다음과 같이 입력합니다.

http://<Namenode 호스트 이름:50070>

01_namenode_monitor.png



NameNode 가 관리하는 DataNode의 상태와 더불어 HDFS의 파일시스템 트리를 살펴볼 수 있습니다.
Browser the filesystem 을 클릭하면 위 예제에서 put 명령어로 복사한 test_hdfs 디렉토리 및 uset_test
디렉토리를 찾을 수 있습니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

02_namenode_monitor_2.png



5. 장애유발 시험
HDFS 는 장애복구 기능이 있는 분산파일 시스템입니다. 그러므로 VMWare에서 존재하는 DataNode
데몬을 강제로 종료시켜도 관리노드에 있는 DataNode 가 정상적으로 동작하는 한 클라이언트는
장애에 상관없이 데이터를 사용할 수 있습니다.

[root@hshhome ~]# ssh node01
Last login: Mon Jun 23 23:00:53 2008 from master
[root@node01 ~]# ps -ef | grep java | grep -v grep
root 3515 1 0 22:36 ? 00:00:14 /usr/java/jdk1.6.0_04/bin/java ... org.apache.hadoop.dfs.DataNode
..
[root@node01 ~]# kill 3515
[root@node01 ~]# ps -ef | grep java | grep -v grep
[root@node01 ~]#

[root@hshhome ~]# hadoop dfs -ls
Found 1 items
/user/root/test_hdfs <dir> 2008-06-23 22:42 rwxr-xr-x root supergroup
[root@hshhome ~]#

kill 명령어로 node01 에 수행되는 DataNode 를 종료시켜도 클라이언트는 관리노드에서 수행되는 DataNode
데몬으로 부터 자신이 저장한 파일의 처리가 가능합니다. 물론 이 데몬도 종료하면 I/O 에러가 발생하겠지요.
HDFS 의 가장 큰 장점인 Fault Tolerance 기능입니다.

[맺음말]
클러스터 환경에서의 대규모 데이터 처리를 위해서는 위와 같인 장애복구 기능이 필수 입니다. 본 포스팅에서는
hadoop 명령어를 통한 2노드 기반의 간단한 복구 기능을 보여드렸지만 실제 대규모로 운영하는 싸이트에서는
어플리케이션과 연동되어 동작할 것입니다.

본 포스팅을 끝으로 Hadoop 의 HDFS 에 관련된 내용을 마칠까 합니다. 다음 포스팅에서는 분산/병렬
프로그래밍 모델인 MPI와 Map/Reduce 에 대하여 정리해 보도록 하겠습니다.

참고로 NHN 에서도 자체 개발한 분산 파일시스템이 존재합니다. 흥미가 계신 분은 한번 참고하시기 바랍니다.

[펌글] http://tida.tistory.com/

 

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
180 Ubuntu 복구 가을의 곰을... 2012.08.26 4244
179 인터넷 통계자료가 많은 사이트 모음 가을의 곰을... 2012.08.23 4424
178 넷북 EeePC T101MT에서 Windows 8 구동시키기 file 가을의 곰을... 2012.08.23 4095
177 Ubuntu 12.04에서 Tomcat7과 eclipse 설정하기 file 가을의 곰을... 2012.08.22 12250
176 그 외 OpenAPI 가을의 곰을... 2012.08.22 4361
175 이통사 OpenAPI file 가을의 곰을... 2012.08.22 4190
174 포털 OpenAPI file 가을의 곰을... 2012.08.22 4118
173 공공기관 OpenAPI 가을의 곰을... 2012.08.22 3379
172 멀티부팅시 우분투 GRUB 복구하기.. file 가을의 곰을... 2012.08.21 6053
171 Hadoop HDFS BASIC Usage Over View : 하둡 사용 개요 가을의 곰을... 2012.08.20 5394
» HDFS 테스트 file 가을의 곰을... 2012.08.20 4583
169 클라우드 기반의 재해복구 시스템 (DRS system) 구축 분석에 대한 논문 가을의 곰을... 2012.08.20 4600
168 오픈 소스 클라우드 분석 file 가을의 곰을... 2012.08.20 3921
167 Visual studio 2010 에서 소스파일을 UTF-8 로 자동변환 file 가을의 곰을... 2012.08.19 3645
166 HTML5로 자신만의 3D 엔진을 만들자 file 가을의 곰을... 2012.07.29 8331
165 SQL 쿼리를 NoSQL인 MongoDB 쿼리로 변경하기 가을의 곰을... 2012.07.29 4269
164 GitHub 소개글 - 류광님 가을의 곰을... 2012.07.29 3547
163 GIT Server 구축 : LINUX UBUNTU, MS WIN file 가을의 곰을... 2012.07.28 5807
162 git 서버 설치 요령 file 가을의 곰을... 2012.07.28 4035
161 mongoDB와 PHP 참고자료 가을의 곰을... 2012.07.15 4878
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED