맵리듀스란?

반응형

맵리듀스란?

맵리듀스는 데이터 처리를 위한 프로그래밍 모델이다. 하둡은 다양한 언어로 작성된 맵리듀스 프로그램을 구동시킬 수 있다. 맵리듀스는 태생 자체가 병행성을 고려하여 설계되었고, 누구든지 충분한 장비만 갖추고 있다면 대규모 데이터 분석을 할 수 있다. 맵리듀스는 대용량 데이터셋에서 그 진가가 드러난다. 예제를 통해서 맵리듀스의 프로그래밍 모델을 살펴보도록 하자.

 

1. 기상 데이터셋

지구 전지역에서 매시간 데이터를 수집하는 기상 센서들은 대량의 로그 데이터를 모으는데, 이러한 데이터는반구조적(semi-structed)이면서 레코드 지향적(record-oriented)이기 때문에 맵리듀스를 이용한 데이터 분석에 적합하다.

데이터는 국립기후자료센터(NCDC, http://www.ncdc.noaa.gov/)에서 가져와서 사용한다.

하나의 행이 하나의 레코드며, 행 단위의 아스키 형식으로 되어 있다. 이 형식은 기상학적 요소들이 데이터의 길이가 가변적이고 선택적인 요소가 많음에도 불구하고 유연한 표현을 가능하게 한다. 단순한 처리를 위해 모든 데이터에 존재하고 고정길이를 가진 기온과 같은 기본 요소에 초점을 두도록 하겠다.

 

데이터 파일은 해당 날짜와 기상관측소를 기준으로 분리되어 있다. 1901년부터 2001년까지 연도별 디렉터리가 존재하고, 기상관측소별로 측정된 정보(파일) gzip으로 압축되어 연도별 디렉터리에 위치한다.

전체 데이터셋은 상대적으로 작은 파일이 매우 많다. 하둡의 특성상 소수의 큰 파일이 처리하기 쉽고 효율적이다. 따라서 다수의 파일을 연도를 기준으로 하나의 파일로 병합하기 위해 먼저 전처리 작업을 수행해야 한다(실행 방식은 부록C 에 기술되어 있다).

 

 

2. 유닉스 도구로 데이터 분석하기

awk는 행 기반 데이터를 처리하기 위한 전통적인 유닉스 도구다.

압축된 연도별 파일을 반복적으로 돌며 처음에는 해당 연도를 출력하고 그 후 awk를 이용해서 각 파일을 처리한다. awk스크립트는 데이터에서 두 개의 필드(기온과 특성코드)를 추출한다. 기온(문자열)0을 더하면 그 값은 정수형으로 변환된다. 다음에는 기온이 유효한 값(9999NCDC 데이터셋에서 누락된 값을 의미)을 가지는지, 특성 코드가 그 측정값을 신뢰할 수 있다고 보는지 점검한다. 측정된 값에 문제가 없다면 현재 최고 기온과 비교하여 새로운 값이 더 높으면 최고 기온을 변경한다. END 영역은 파일에 있는 모든 행이 처리된 후에 실행되는데, 최종 최고 기온을 출력한다.

20세기의 전체 데이터를 한 대의 EC2 고성능 CPU XL(High-CPU Extra Large) 인스턴스에서 실행해본 결과 42분이 걸렸다.

처리속도를 높이기 위해 프로그램의 각 부분을 병렬로 수행할 필요가 있다. 하지만 이 방식에는 몇 가지 문제가 있다

첫째, 일을 동일한 크기로 나눈다는 것이 언제나 쉽고 명확한 것은 아니다. 결국 전체 수행 시간은 가장 긴 파일을 처리하는 프로세스의 처리 시간에 의해 결정된다. 대안 중 하나는 전체 입력 파일을 고정길이의 데이터 청크로 나누고 각 청크를 하나의 프로세스에 할당하는 것이다.

둘째, 독립적인 프로세스의 결과를 모두 합치는데 더 많은 처리가 필요할 수도 있다. 이 예제에서 특정 연도의 데이터는 몇 개의 청크로 나뉠 가능성이 높고, 각 청크는 독립적으로 처리된다. 우리는 각각의 청크에서 최고 기온을 찾고, 마지막 단계에서 연도별 최고 기온을 구할 수 있다.

셋째, 단일 머신의 처리 능력은 여전히 한계가 있다. 단일 머신에서 여러 개의 프로세서로 처리할 수 있는 최적의 수행 시간이 20분이라면 이것이 바로 머신의 한계다. 처리 시간은 더 이상 빨라질 수 없다. 여러 대의 머신을 사용할 때는 코디네이션(coordination, 협력과 조정)과 신뢰성의 범주에 속하는 요소를 추가로 고려해야 한다. 잡의 전체 과정을 누가 조율하고 프로세스의 실패를 어떻게 처리할지 고민해야 한다. 병렬로 처리하는 것이 쉬워 보이지만 실제로는 매우 복잡하다.

이러한 이슈를 처리하기 위해 하둡과 같은 프레임워크를 사용하는 것은 큰 도움이 된다.

 

반응형

댓글

Designed by JB FACTORY