Hadoop

Hadoop 과 MapReduce

딜레이라마 2017. 1. 17. 22:10
반응형

1. Hadoop

하둡 분산 파일 시스템 (HDFS) HDFS는 일반적인 분산 파일 시스템의 설계를 따라 마스터 (master) 노드와 슬레이브 (slave) 노드 로 구성되어 있다. HDFS의 마스터 노드는 네임노드 (namenode)라 불리며, 데이터노드 (datanode)로 불리는 슬레이브 노드의 동작 상태를 실시간으로 관리하고 최대 수천 대의 데이터노드에 분산 저장되 어 있는 데이터에 대한 메타데이터를 관리하는 일을 한다 (Figure 3.1 하단). 데이터는 여러 개의 블 록으로 쪼개어져 몇 대의 데이터노드가 한 블록을 복제해서 보관하는 방식으로 분산 저장된다. 네임노 드가 관리하는 메타데이터는 해당 블록이 어느 데이터노드에 저장되어 있는지의 여부 등이다. 이와 같 은 방식을 사용하면 데이터노드 한두 대가 고장나더라도 데이터를 잃지 않기 때문에 고장감내성 (fault tolerance)이 확보된다. HDFS는 수십 PB에 이르는 대용량 데이터를 수천 대의 서버를 이용하여 빠르 게 처리할 수 있도록 설계되었으며, 비용 문제로 저가의 서버를 이용하는 것을 전제로 하고 있다. 이럴 경우 디스크나 서버의 고장이 자주 발생할 수 있기 때문에 고장감내성이 중요한 고려 요소가 된다. 또한 스토리지 용량이 부족해지면 저가의 데이터노드를 추가하여 네임노드에 등록하는 것으로 시스템의 중단 없이 용량을 확장시킬 수 있다. 이러한 방식으로 하둡의 확장성 (scalability)이 구현된다. 여타의 분산 파일 시스템에 비해 HDFS는 메타데이터에 접근하거나 데이터를 변경하는 작업의 대 기시간 (latency)을 희생하는 대신 데이터를 읽어오는 작업의 처리량 (throughput)을 높여 큰 데이터 를 한번에 빠르게 가져올 수 있도록 설계되었다. 한 예로, HDFS에서 한 블록의 크기는 기본적으로 64MB로 설정되어 있는데, 이는 일반적인 파일 시스템의 블록 사이즈인 수십 KB와는 큰 차이를 보인 다. 이러한 설계는 하둡이 웹 페이지 색인 관리라는 기원 상 시시각각 변하는 데이터의 실시간 처리가 아닌 기존에 수집된 데이터의 배치 처리에 최적화된 플랫폼이라는 데에 기인한다. 데이터의 배치 처리 를 위해서는 수집된 데이터를 수정할 필요가 없으므로 HDFS는 한 번 쓰기 완료된 데이터는 수정이 불 가능하고 오직 덮어쓰기만이 가능하도록 설계되었다. 이처럼 데이터 저장 방식이 간단해지면 전체 시스 템의 관리가 간편해져 수천 대의 서버로 구성된 클러스터도 무리 없는 운영이 가능해진다. 또한 후술할 맵리듀스의 구현도 간단해진다.

2. MapReduce

하둡 맵리듀스는 HDFS 상에서 동작하는 데이터 분석 프레임워크이다. 맵리듀스는 일반 프로그래밍 방법과는 다른 데이터 중심 프로그래밍 모형을 제공한다. 일반적인 분산 환경에서의 프로그래밍은 대개 의 프로그래머가 익숙한, 단일 서버에서의 프로그래밍과 달리 분산된 작업의 스케줄링이나 일부 서버의 고장, 서버 간 네트워크 구성 등 많은 문제를 고려해야한다. 맵리듀스에서는 이런 복잡한 문제들이 플랫 폼 차원에서 단순화되어 프로그래머는 데이터의 배치 처리를 위한 맵 (mapper)과 리듀스 (reducer) 함 수만을 작성하면 되도록 구현되어 있다. 맵리듀스 프로그래밍 모형에서는 함수의 입력과 출력이 모두 키 (key)와 값 (value)의 쌍으로 구성 되어 있다. 각 함수는 <키, 값> 쌍의 집합을 또다른 <키, 값> 쌍의 집합으로 변환한다. 맵 함수는 HDFS에서 불러온 데이터를 가공하여 새로운 <키, 값> 집합을 출력한다. 맵리듀스 시스템에서는 같은 키를 갖는 값들을 묶어 <키, (값1, 값2,· · ·)> 식의 새로운 <키, 값> 쌍의 집합을 만든다. 리듀스 함수 는 여기에 집계 연산을 수행하여 또다른 <키, 값> 쌍의 집합을 생성하고 이를 HDFS에 저장한다. 예를 들어 문서 집합에 등장하는 단어의 갯수를 세는 작업을 생각해 보자 (The Apache Software Foundation, 2008). Figure 3.2에서처럼 3개의 문서가 HDFS에서 입력으로 주어졌다고 하면, 3개의 맵 태스크 (task)가 발생한다. 각 맵 태스크는 동일한 맵 함수를 실행하는데, 입력으로 문서의 ID가 키, 문 서 텍스트가 값인 <키, 값> 쌍이 주어지면 이 맵 함수는 문서 텍스트를 단어 단위로 쪼개어 각 단어가 키가 되고 값은 1로 고정된 새로운 <키, 값> 쌍의 집합을 출력한다. 맵리듀스 시스템은 이 집합의 원 1018 Jeong-Hyeok Park · Sang-Yeol Lee · Da Hyun Kang · Joong-Ho Won 소들에 대해 섞기 및 정렬 (shuffle & sort) 과정을 통해 동일한 키를 가지는 값들을 하나로 묶는다. 이 렇게 묶여진 <키, 값> 쌍들은 적절한 기준에 의해 2개의 리듀스 태스크로 분배 (partition)된다. 각 리 듀스 태스크는 역시 동일한 리듀스 함수를 실행하는데, 이 함수는 묶여진 값들을 모두 더하여 입력과 동 일한 키의 새로운 값으로 만든다. 그 결과가 HDFS에 저장되며 이는 3개의 문서 집합에서 나타나는 단 어의 빈도수가 됨을 알 수 있다. (이 예제에서 맵 태스크 및 리듀스 태스크의 갯수는 임의로 잡은 것이 며, 실제로는 맵리듀스 시스템에서 자동적으로 생성한다.) 

반응형