빅데이터 환경에서 생산되는 데이터는 그 규모와 크기가 방대하기 때문에 기존의 파일 시스템 체계를 그대로 사용할 경우 많은 시간과 높은 처리 비용을 필요로 합니다따라서 대용량의 데이터를 분석하기 위해서는 두대 이상의 컴퓨터를 이용하여 적절히 작업을 분배하고 다시 조합하며일부 작업에 문제가 생겼을 경우 문제가 발생된 부분만 재 처리가 가능한 분산 컴퓨팅 환경을 요구합니다.

 

하둡 분산 파일 시스템(HDFS)은 아파치 하둡 프로젝트의 분산 파일 시스템으로 처음에는 아파치 너치(Apache Nutch) 라는 웹 검색 엔진 프로젝트를 위한 하부 구조를 위해서 만들어졌습니다아파치 너치는 확장 가능한 오픈 소스 웹 크롤러 소프트웨어 프로젝트입니다.

 

2002년 미국 출신의 프로그래머인 더그 컷팅(Dug Cutting)과 마이크 카페렐라(Mike Cafarella)가 검색 소프트웨어를 개발하면서 루씬(Lucene)이라는 텍스트 검색 엔진을 만들고 이에 대한 파서(Parser)및 크롤러(Crawler)로서 너치(Nutch)라는 프로젝트를 진행하였는데너치에서 가져오는 웹사이트에 대한 방대한 데이터를 처리할 길이 없어 난감하던 차에2004 Google이 발간한 구글 파일 시스템(GFS, Google File System) 논문과 맵-리듀스(Map-Reduce) 논문을 기초로 하여 약 3~4개월간의 프로그래밍을 통해 하둡 분산 파일 시스템(HDFS)을 너치에 이식하였습니다.

 

하둡 분산 파일 시스템(HDFS)은 대용량 파일을 저장하고 처리하기 위해서 개발된 파일 시스템입니다하둡 분산 파일 시스템(HDFS)은 하나의 서버에서 동작하는 것이 아니라여러 개의 서버에 설치되어서 서비스가 됩니다하둡 분산 파일 시스템(HDFS)만을 위한 별도의 스토리지가 필요 없으며일반 리눅스 장비에 탑재되어 있는 로컬 디스크를 이용해서 확장 가능한 유연성 있는 구조를 가지고 있습니다.

 

 

하둡 클러스터의 이해

하둡 핵심 서비스는 중요한 역할을 담당하는 세가지 모듈로 분류할 수 있습니다세가지 모듈로는 클라이언트 머신(Client machines)과 마스터 노드(Master node) 그리고 슬레이브 노드(Slave node)가 있습니다.

 

하둡 서버의 역할 ]

 

 

마스터 노드(Master node)

마스터 노드(Master node)는 많은 양의 데이터를 하둡 분산 파일 시스템(HDFS)에 저장하고 맵-리듀스(Map-Reduce)를 통하여 병렬 계산(Parallel computation)을 수행하는 두 가지 핵심 기능을 담당합니다잡 트랙커(Jab Tracker)가 맵(Map)과 리듀스(Reduce)를 사용하여 데이터의 병렬 처리(Parallel processing)를 관리하고 조정하는 동안에 네임 노드(Name Node)는 하둡 분산 파일 시스템(HDFS)의 데이터 저장 기능을 관리하고 조정합니다.

 

슬레이브 노드(Slave node)

슬레이브 노드는 머신(Machine)의 대부분을 구성하고 데이터를 저장하고 계산을 실행하는 세부적인 일들을 담당합니다각 슬레이브는 서로간에 통신을 하고마스터 노드(Master Node)의 지시를 받기 위해서 데이터 노드(Data Node)와 태스크 트랙커(Task Tracker) 데몬을 실행합니다태스크 트랙커 데몬(Task Tracker daemon)은 잡 트랙커(Job Tracker)의 슬레이브이며데이터 노드 데몬(Data Node daemon)은 네임 노드(Name Node)의 슬레이브입니다.

 

클라이언트 머신(Client machine)

클라이언트 노드는 모든 클러스터 설정(Cluster setting)이 완료된 하둡 시스템(Hadoop System)을 가지고 있지만이것은 마스터 노드 또는 슬래이브 노드를 말하는 것은 아닙니다클라이언트 머신의 역할은 클러스터에 작업 데이터를 보내어서 맵(Map)과 리듀스(Reduce) 작업을 통하여 데이터를 분석한 후에 완료된 작업 결과를 사용자에게 보여주는 역할을 담당합니다.

 

 

하둡 클러스터(Hadoop Cluster)의 구성

실제로 제품 클러스터(Production cluster)에서는 서버 가상화(Server virtualization)나 하이퍼바이저 레이어(Hypervisor layer)가 없는데이러한 이유로는 성능을 저해하는 불필요한 오버헤드(Overhaed)라고 보기 때문입니다다음 그림은 하둡 클러서터의 일반적인 구조를 나타냅니다.

 

 

하둡 클러스터 ]

 

우선 랙(Rack)이란 용어를 알아야 하는데(Rack)은 전산실을 구성할 때 작은 공간을 효율적으로 사용하고 장비들을 안정적으로 보호하기 위해서 사용하는 도구로써서버나 네트워크 장비들을 수용하기 위해서 사용되는 철제 프레임을 말합니다랙 안에는 여러대의 서버들로 구성되어 있습니다서버의 구성은 마스터(Master)역할을 담당하는 네임 노드(Name Node)와 잡 트랙커(Job Tracker), 슬래이브 역할을 담당하는 데이터 노드(Data Node)와 태스크 트랙커(Task Tracker)로 구성이 되어 있습니다.

 

스위치(Switch)의 역할은 네트워크 단위들을 연결하는 통신 장비로서 허브보다 전송 속도가 빠릅니다속도가 빠른 이유는 컴퓨터에서 주고 받는 데이터를 허브처럼 다른 모든 노드에 전송하는 것이 아니라데이터를 필요로 하는 노드에만 전송하기 때문입니다(Rack)안에 있는 스위치(Switch)는 클러스터를 형성하기 위해서 균일한 대역폭으로 상위의 스위치(Switch)와 연결이 되어 있습니다이 스위치는 다른 랙들과의 연결을 담당합니다.

 

(Rack)

 

(Rack) 안의 존재하는 대부분의 서버들은 슬레이브 노드(Slave Node) 역할을 담당하며몇 개의 서버들만 마스터 노드(Master Node)의 역할을 담당합니다그리고 각각의 서버들은 로컬 디스크 스토리지(Local Disk Storage) CPUDRAM으로 구성되어 있습니다.

 

 

하둡 분산 파일 시스템(HDFS)의 구성

하둡 분산 파일 시스템(HDFS) 클러스터는 일반적으로 네임노드(Namenode)를 담당하는 서버가 한대 존재하며하나의 노드에 붙은 스토리지(Storage)를 관리하는 수 많은 데이터노드(Datanode)로 구성이 됩니다.

 

블록(Block) 단위로 읽기 쓰기 수행

하둡 분산 파일 시스템(HDFS)는 파일을 저장할 때 블록 단위로 읽기(Read)와 쓰기(Write)를 수행합니다하나의 파일이 물리적인 저장소에 저장될 때에도 블록 단위로 분할해서 저장이 됩니다하둡 분산 파일 시스템(HDFS)에서의 블록 사이즈는 기본적으로 64MB로 설정되어 있으며블록의 크기를 변경하고 싶다면 환경설정을 통해서 손 쉽게 변경할 수 있습니다보통은 128MB를 사용합니다.

 

 

하둡 분산 파일 시스템(HDFS)의 구조 ]

 

 

네임노드(Namenode)는 마스터 노드(Master node) 또는 파일 시스템 네임스페이스(File System Namespace) 역할을 담당하는 노드로써파일과 디렉토리에 대한 메타 데이터(Meta data) 정보를 저장하는 역할을 담당합니다메타 데이터에는 디렉토리(Directory)의 구조파일에 대한 정보와 파일이 저장되어 있는 물리적인 위치와 같은 정보가 저장됩니다또한 데이터노드로의 블록 매핑을 판단합니다데이터노드(Datanode)는 요청한 파일을 읽거나 저장하는 역할을 담당하고 네임노드의 지시에 따라 블록을 생성삭제 그리고 복제 작업을 수행합니다.

 

네임노드와 데이터노드는 컴퓨터에서 실행하도록 설계된 소프트웨어의 조각입니다이러한 컴퓨터들은 일반적으로 GNU 리눅스(Linux) 운영체제를 사용합니다하둡 분산 파일 시스템(HDFS)은 자바 언어(Java Language)를 사용하여 만들어졌습니다자바를 지원하는 어떤 컴퓨터에서도 네임노드 또는 데이터노드 소프트웨어를 수행할 수 있습니다높은 이식성의 자바 언어의 사용은 하둡 분산 파일 시스템(HDFS)가 광범위한 컴퓨터에 배포될 수 있음을 의미합니다.

 

 

파일 쓰기 동작 설명

클라이언트(Client)가 파일을 디스크에 저장하기 위해서 먼저 네임노드(Namenode)에게 파일을 저장해도 되는지 물어봅니다쓰기 권한이 있는 경우에는 네임노드(Namenode)에서 블록을 저장할 데이터노드(Datanode)의 정보를 클라이언트에게 알려줍니다클라이언트는 블록(Block)들을 지정된 데이터노드(Datanode)에 저장합니다 

 

 

[ HDFS Write Operation ]

 

 

데이터 복제(Data Replication)

클라이언트(Client)는 파일을 128MB(기본, 64MB) 작은 블록(Block) 단위로 분할하고같은 블록을 클러스터(Cluster)에 있는 세곳의 노드(Node)에 복제(Replication)시킵니다동일한 블록으로 분할되기 때문에 병렬 처리(Parallel Processing)가 가능하며작업 노드(Node)에서 문제가 발생하여 데이터를 참조하지 못할 경우에도 다른 노드에 복제되어 있는 내용으로 작업을 계속할 수 있으므로 지속적인 서비스가 가능합니다하둡에서 동일한 데이터를 복제하는 기본값은 3이며, ‘hdfs-site.xml’에 있는 ‘dfs.replication’ 파라메터를 통하여 재 설정할 수 있습니다.

 

아래의 그림은 클라이언트에서 파일을 A, B, C 블록으로 분할하고, A 블록을 클러스터의 어느 위치에 저장할지를 물어봅니다네임 노드(일반적으로 TCP 9000) A블록을 저장할 데이터 노드의 목록을 클라이언트에게 보냅니다.

 

클라이언트는 데이터 노드(일반적으로 TCP 50010)에 직접 A블록을 기록합니다수신받은 데이터 노드는 다른 데이터 노드에 블록을 복제하고나머지 블록에 대해서도 반복적으로 작업을 합니다네임 노드는 데이터의 경로를 가지고 있지 않으며데이터가 클러스터의 어느 위치에 저장되어 있는지에 대한 지도를 제공합니다즉 네임 노드는 랙안의 노드들의 정보와 메타 데이터에 저장된 노드 정보를 이용하여 데이터의 위치를 찾을수 있습니다.

 

하둡의 데이터 복제 ]

+ Recent posts