A Column

[이응수의 IT노트] 하둡분산파일시스템 (HDFS)

장성민

view : 838

 

[이응수의 IT노트] 하둡분산파일시스템(HDFS:Hadoop Distributed File System)


안녕하세요. 중앙HTA 이응수 강사입니다.

오늘은 하둡분산파일시스템에 대해 알아보도록 하겠습니다.

 

하둡분산파일시스템(HDFS:Hadoop Distributed File System)은 수십 테라바이트 혹은 페타바이트 이상의 대용량 파일을 여러 서버에 저장하고, 다양한 클라이언트가 저장된 데이터를 빠르게 처리할 수 있도록 설계된 파일시스템입니다.

HDFS는 저사양의 서버를 이용해서 대용량의 스토리지를 구성하고, 하나의 서버처럼 사용할 수 있도록 지원합니다. HDFS가 제공하는 다양한 API를 활용해서 파일을 읽고 저장할 수 있습니다.

HDFS는 장애복구, 대용량 데이터 저장, 데이터 무결성을 지원합니다. HDFS에 데이터를 저장할 때는 복제본을 여러 서버에 함께 저장하기 때문에 데이터의 유실을 예방할 수 있고, 분산서버간에 주기적인 상태체크를 통해서 장애를 인지하고 대처할 수 있습니다. HDFS는 하나의 파일크기가 테라바이트 이상인 파일도 클러스터내의 여러 서버에 분산해서 저장할 수 있습니다. HDFS는 한번 저장된 파일은 수정할 수 없고, 읽기만 가능하기 때문에 데이터의 무결성을 유지시킬 수 있습니다.

HDFS는 블록구조의 파일시스템입니다. HDFS에 저장되는 파일은 특정 크기의 블록으로 나누어서 분산된 서버에 저장되고, 기본 블록크기는 128MB입니다. HDFS는 파일을 여러 개의 블록으로 나누어서 동일한 서버에 저장하는 것이 아니라, 클러스터내의 여러 서버에 저장합니다. 그리고, 블록을 저장할 때는 복제본을 만들어서 블록당 3개씩 HDFS에 저장합니다.



HDFS는 마스터-슬레이브(Mater-Slave) 형식의 아키텍처를 가지고 있습니다. HDFS에서 마스터서버를 네임노드(NameNode)라고 하고, 슬레이브 서버를 데이터노드(DataNode)라고 부릅니다.

네임노드는 하둡 분산파일시스템의 메타데이터(파일명, 디렉토리, 크기, 권한 및 파일에 대한 블록매핑정보)를 관리하고, 데이터노드를 모니터링하며, 클라이언트의 다양한 요청을 접수받습니다.

데이터노드는 HDFS에 저장되는 파일이 블록으로 나뉘어져서 저장되는 서버입니다.

 


네임노드는 HDFS 시스템을 유지시키기위한 메타데이터를 메모리에서 관리하고, 재부팅시 유실을 방지하기 위하여 fsimage와 editslog파일을 생성해서 hdfs의 모든 변경이력을 저장합니다.

데이터노드는 네임노드로 3초마다 하트비트(heartbeat)메세지를 전송합니다. 하트비트에는 데이터노드의 상태정보와 데이터노드에 저장된 블록에 대한 블록리포트가 포함되어 있습니다. 네임노드는 하트비트를 이용해서 데이터노드를 모니터링하고, 일정시간동안 하트비트가 전송되지 않는 데이터노드를 장애가 발생한 노드로 판단합니다. 데이터노드에서 장애가 발생하면 해당 데이터노드에 저장되었던 블록을 새로운 데이터노드를 복제해서 복제본 수가 일정하게 유지되도록 합니다.

이와 같은 방식으로 HDFS는 클러스터내의 분산된 데이터노드에 대용량의 파일을 블록으로 나누어서 저장하고, 네임노드는 HDFS내의 디렉토리정보, 저장된 파일의 정보, 블록의 매핑정보등을 관리하고, 장애발생에 대처합니다.

 

하둡은 사용자가 HDFS를 쉽게 할 수 있도록 유닉스 계열의 명령어와 유사한 형태의 셸명령어를 제공합니다.

하둡 셸명령어는

$HADOOP_HOME/bin/hadoop fs -명령어 매개변수

와 같은 형식으로 실행할 수 있고, 자세한 사용법은

$HADOOP_HOME/bin/hadoop fs -help

로 확인할 수 있습니다.

셸명령어 중에서 자주 사용되는 명령어 몇 가지를 사용해보도록 하겠습니다.

먼저 HDFS에 디렉토리를 생성해보도록 하겠습니다.

HDFS는 /user/사용자명 디렉토리가 필요합니다.

절대경로없이 파일이나 디렉토리를 생성하게 되면 전부 /user/사용자명 디렉토리 아래에 생성되기 때문에 가장 먼저 사용자디렉토리를 생성해야 합니다.

$HADOOP_HOME/bin/hadoop fs -mkdir /user

$HADOOP_HOME/bin/hadoop fs -mkdir /user/hta 혹은

    $HADOOP_HOME/bin/hadoop fs -mkdir -p /user/hta 명령을 실행시켜서 사용자디렉토리를 생성합니다.

디렉토리 생성시 절대경로 없이 디렉토리명만 적으면 /user/hta 디렉토리 아래에 생성됩니다.

    $HADOOP_HOME/bin/hadoop fs -mkdir testdir

생성된 디렉토리나 파일은

    $HADOOP_HOME/bin/hadoop fs -ls / 명령으로 확인할 수 있습니다.



로컬파일시스템의 test.txt 파일을 앞에서 생성한 HDFS의 testdir 디렉토리에에 저장해보겠습니다.

    $HADOOP_HOME/bin/hadoop fs -put test.txt testdir/

$HADOOP_HOME/bin/hadoop fs -copyFromLocal test.txt testdir/



HDFS에 저장된 파일을 위와 같이 확인해볼 수 있습니다. 맵리듀스 프로그램을 이용해서 대용량의 파일을 처리하기 위해서는 위의 명령어를 이용해서 파일을 HDFS로 복사한 다음에 맵리듀스 프로그램을 실행합니다.

HDFS에 저장된 파일을 내용을 확인해보겠습니다.

    $HADOOP_HOME/bin/hadoop fs -cat testdir/test.txt


    $HADOOP_HOME/bin/hadoop fs -tail testdir/test.txt

실행하면 파일의 맨 마지막 내용을 확인해볼 수 있습니다.

HDFS에 복사된 파일의 내용을 확인하거나 맵리듀스 프로그램을 실행한 후 출력결과를 확인할 때 사용할 수 있습니다.

마지막으로 HDFS에 저장된 디렉토리나 파일을 삭제해보도록 하겠습니다.

    $HADOOP_HOME/bin/hadoop -rm testdir/test.txt

$HADOOP_HOME/bin/hadoop -rm -r testdir * 하우디렉토리까지 삭제.

을 실행하면 파일이나 디렉토리를 삭제할 수 있습니다.



하둡은 다양한 셸명령어를 지원합니다. 셸명령어에 대한 자세한 내용은 하둡 도큐먼트를 참조하시기 바랍니다.


지금까지 하둡분산파일시스템의 간단한 특징과 셸명령어를 살펴보았습니다.

다음에는 하둡분산파일시스템으로 빅 데이터를 수집하는 방법에 대해서 다루어 보도록 하겠습니다.

 




<저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>



먼저 비밀번호를 입력하여 주세요.

창닫기확인

TOP