[하둡 분산파일시스템]

하둡 분산파일시스템은 빅데이터의 안정적인 저장 및 검색을 위해 설계된 하둡의 분산 파일 시스템으로서, 하나의  마스터와 여러 개의 슬레이브로 클러스터를 구성합니다. 마스터 노드를 하둡 분산파일시스템에서는 네임노드라고  하고, 슬레이브 노드를 데이터노드라고 합니다. 대용량 파일은 분산되어 여러 데이터노드에 저장되고 네임노드는  데이터노드들을 관리하는 메타데이터와 모니터링 시스템으로 그것을 관리합니다. 

이와 같은 방식을 사용하면 분산 저장으로 인해 데이터의 안정성을 갖게 되고, 혹시라도 데이터노드 한 두대가  고장나더라도 데이터를 잃지 않기 때문에 고장에 대한 감내성이 확보됩니다.  




하둡분산파일시스템의 구조와 동작






네임노드 할은 하둡 분산파일시스템을 구성하는 파일, 디렉토리 등의 메타데이터를 메인 메모리에 유지함으로써  HDFS를 전반적으로 관리하는 것입니다. 따라서 이 노드에 문제가 생겨 동작하지 않을 경우 하둡 분산파일시스템  전체를 사용할 수 없기 때문에 3개의 보조 노드를 같이 운용하는데,이를 통해 시스템의 안정성을 높일 수 있습니다.  체크포인트 노드와 세컨더리 노드는 네임노드의 데이터를 자체 저장장치에 파일로 백업하며, 백업 노드는 네임노드의  메타 데이터 정보를 자신의 메인 메모리에 백업합니다.  세 노드는 하둡 버전마다지원 여부가 상이하고, 역할이 일부 겹쳐서 동시에 사용할 수 없도록 제한되는 경우가  있으므로, 상황에 따라 탄력적으로 사용합니다.


데이터노드는 분산 처리할 정보가 실제로 저장되는 노드로써, 여러 데이터노드가 하나의 Rack으로 묶여있는데, 이러한 Rack은 하둡의 분산파일시스템에 여러 개가 존재합니다.  여기서의 Rack은 데이터 센터 등에서 서버 등의 다양한 장비들을 물리적으로, 효율적으로 장착하기 위한 프레임을  의미하는데요. 또한, 이는 하둡의 분산파일시스템에서 데이터의 복사본을 배치할 때 고려하는 요소이기도 합니다. 

즉 하둡 분산파일시스템에서는 데이터를 저장할 때 기본적으로 블록 단위로 분할한 뒤 각 블록마다 두 개의 복사본을  만들어 총 세 개의 같은 블록을 유지합니다. 그럼 이 복사본들은 어떻게 배치될까요? 

분홍색 블록으로 예를 들어 설명하겠습니다. 첫 번째 블록이 저장되지 않은 Rack을 찾아 그 Rack에 포함된  데이터노드 두 개를 선정하여 두 번째와 세 번째 블록을 저장합니다. 이를 통해 어떤 Rack 전체가 문제가 생기더라도  다른 Rack에서 해당 데이터를 구성하는 블록을 가져올 수 있게 되어 하둡 분산파일시스템에서의 데이터의 신뢰성을  높이게 됩니다.



클라이언트 는 하둡 분산파일시스템의 데이터를 사용하거나, 기록하는 애플리케이션으로 하둡의 맵리듀스  모듈이 이에 해당합니다. 하둡 분산파일시스템에서 데이터를 읽거나 작성할 때 우선적으로 네임노드에 해당 요청을  보낸 뒤, 네임노드에서 반환해 준 데이터노드와 직접 통신하여 연산을 수행합니다.  하둡 분산파일시스템은 수십 페타바이트에 이르는 대용량 데이터를 수천 대의 서버를 이용하여 빠르게 처리할 수  있도록 설계되었습니다. 하둡 분산파일시스템은 비용 문제로 저가의 서버를 이용하는 것을 전제로 하고 있는데  이럴 경우 디스크나 서버의 고장이 자주 발생할 수 있기 때문에 고장 감내성이 중요한 고려 요소가 됩니다.  그리고 스토리지 용량이 부족해지면 저가의 데이터노드를 네임노드에 추가 등록하는데, 이를 통해 시스템의 중단  없이 용량을 확장시킬 수 있습니다.


하둡 분산파일시스템은 여타의 분산 파일 시스템에 비해 메타데이터에 접근하거나 데이터를 변경하는 작업의  대기시간을 희생하는 대신 데이터를 읽어오는 작업의 처리량을 높여 큰 데이터를 한 번에 빠르게 가져올 수 있도록  설계되었습니다. 예를 들어 설명하자면 일반적인 파일 시스템의 블록사이즈가 수십 킬로바이트인 것에 비해  하둡 분산파일시스템의 한 블록의 크기는 기본적으로 64메가바이트로 설정되어 큰 차이를 보입니다. 


그리고 하둡 분산파일시스템은 한번 쓰기 완료된 데이터는 수정이 불가능하고 오직 덮어쓰기만 가능하도록   설계되었습니다. 왜냐하면 하둡 분산파일시스템은 데이터의 배치 처리를 위해서는 수집된 데이터를 수정할 필요가   없기 때문입니다. 이처럼 데이터 저장 방식이 간단해지면 전체 시스템의 관리가 간편해져 수천 대의 서버로 구성된  클러스터도 무리 없이 운영 가능해집니다. 




[맵리듀스](#09c181)


맵리듀스 는 저렴한 머신들을 이용하여 빅 데이터를 병렬로 분산 처리하기 위한 프로그래밍 모델인데요.  대용량 데이터를 신뢰할 수 없는 컴퓨터로 구성된 분산 클러스터 환경에서 대규모 데이터를 병렬로 처리하기 위해 개발되었습니다. 맵리듀스의 혁신적인 부분은 데이터 집합에 대한 쿼리를 입력 받아, 분할 한 후, 여러 개의  노드에서 병렬로 처리하는데 있으며 이러한 분산 처리는 단일 장비에서 처리하기에는 부적합한 대규모 데이터 처리  문제를 해결한다는 특징이 있습니다.


맵리듀스는 맵 단계와 리듀스 단계로 처리 과정을 나누어 작업합니다. 맵은 맵퍼라는 데이터 처리 함수를 통해  흩어져 있는 데이터를 관련 있는 데이터끼리 묶는 작업을 통해서 임시 데이터 집합으로 변형됩니다. 그리고 리듀스는  리듀서라는 데이터 처리 함수를 통해 맵 작업에서 생성된 임시 데이터 집합에서 중복 데이터를 제거하고 원하는  데이터를 추출하는 작업을 진행합니다. 즉, 맵리듀스에서는 파일을 맵 작업에 의해서 생성된 중간의 (키, 값) 쌍으로  변환하고 다음 스텝인 셔플 과정에서 정렬과 파티셔닝 작업을 동시에 수행하여 리듀스 작업의 입력값으로 사용하기  위해서 맵 작업에서 나온 결과물을 나눠주는 역할을 합니다. 


다음으로 리듀스 작업에서는 맵 작업의 결과물로 받은 입력값 중 중복 데이터를 제거하며, 마지막 생산에서 최종  결과파일을 생성합니다.  맵 작업과 리듀스 작업들은 전체 맵리듀스 구조에서 살펴봤을 때, 태스크 트래커가 관리합니다.  태스크 트래커는 각각의 슬레이브 노드들에서 실행하는 태스크들을 관리하는 것입니다. 잡 트래커는 태스크들의  스케줄링을 담당하며, 하나의 마스터 노드는 여러 슬레이브 노드들의 실행을 관리하는 것입니다. 





문서 집합에 등장하는 단어의 개수를 세는 작업을 생각해봅시다. 
 



그림에서처럼 3개의 문서가 하둡 분산파일시스템에서 입력으로 주어졌다고 가정해 보겠습니다.   그러면 3개의 맵 태스크 (task)가 발생합니다. 각 맵 태스크는 동일한 맵 함수를 실행하는데, 입력으로 문서의 ID가  키, 문서 텍스트가 값인 [키, 값] 쌍이 주어지면, 이 맵 함수는 문서 텍스트를 단어 단위로 쪼개어 각 단어가 키가  되고 값은 1로 고정된 새로운 [키, 값] 쌍의 집합을 출력합니다. 

맵리듀스 시스템은 이 집합의 원소들에 대해 섞기 및 정렬과정을 통해 동일한 키를 가지는 값들을 하나로 묶습니다.  이렇게 묶여진 [키, 값] 쌍들은 적절한 기준에 의해 2개의 리듀스 태스크로 분배됩니다.  각 리듀스 태스크는 역시 동일한 리듀스 함수를 실행하는데, 이 함수는 묶여진 값들을 모두 더하여 입력과 동일한  키의 새로운 값으로 만듭니다. 그 결과가 하둡 분산파일시스템에 저장되며 이는 3개의 문서 집합에서 나타나는  단어의 빈도수가 됩니다. 여기서, 맵 태스크 및 리듀스 태스크의 갯수는 임의로 잡은 것이며, 실제로는 맵리듀스  시스템에서 자동적으로 생성합니다.










'빅데이터분석개론' 카테고리의 다른 글

비즈니스 인텔리전스 (Business Intelligence)  (8) 2015.12.13
빅데이터 분석 방법론  (13) 2015.12.13
Hadoop 설치  (9) 2015.12.09
Hadoop 이해  (305) 2015.12.09
[강의] 빅데이터분석개론  (7) 2015.11.24