MR은 데이터 처리를 위한 프로그래밍 “모델”이다. MR은 태생 자체가 병행성을 고려해서 설계되었고, 누구든지 충분한 장비만 있다면 대규모 데이터 분석을 할 수 있다.
2.1 기상 데이터셋
지구 전지역에서 매시간 데이터를 수집하는 기상 센서들은 대량의 로그 데이터를 모은다. 이 데이터는 semi-structured 데이터이면서 record-oriented하기 때문에 MR에 적합하다.
2.2 유닉스 도구를 데이터 분석하기
<aside>
❓ 연도별 전 세계 최고 기온은 얼마일까?
</aside>
일단 하둡을 사용하지 않고 이 문제를 해결해보자.
awk
명령어를 이용해서 압축된 연도별 파일을 반복해서 돌며, 연도를 출력하고, awk
를 이용해서 각 파일을 처리한다. 즉, 최댓값은 모든 행이 처리된 후에 출력된다.
20세기 전체 데이터를 한 대로 처리해본 결과 42분이 걸렸다고 한다.
처리 속도를 높이려면, 프로그램의 각 부분을 병렬로 수행할 필요가 있다.
→ 이론적으로는 해당 머신의 모든 하드웨어 스레드를 이용해 연도별 파일을 서로 다른 프로세스에 할당해서 처리하면 된다. 그러나 몇 가지 문제점이 있다.
- 일을 동일한 크기로 나눈다는 것이 언제나 쉽고 명확한 것은 아니다.
- 연도별로 파일의 크기가 다르기 때문에, 일부 프로세스는 상대적으로 빨리 끝날 수 있다.
- 빨리 끝난 프로세스에게는 일을 추가로 맡길 수 있겠지만, 결국 전체 수행 시간은 가장 긴 파일을 처리하는 프로세스의 처리 시간에 의해 결정된다.
- 대안으로, 전체 입력 파일을 fixed-size의 데이터 청크로 나누고, 각 청크를 하나의 프로세스에 할당하는 방식이 있다.
- 독립적인 프로세스의 결과를 모두 합치는 데 더 많은 처리가 필요할 수도 있다.
- 각 연도의 결과는 다른 연도와는 무관하므로, 개별 프로세스의 모든 결과를 합친 다음에 연도를 기준으로 정렬하면 전체 결과를 얻을 수 있다.
- 어쨌든 각 청크는 독립적으로 처리되며, 각각의 청크에서 최고 기온을 찾고, 마지막 단계에서 연도별 최고 기온을 구할 수 있다. (MR이네..)
- 단일 머신의 처리 능력은 여전히 한계가 있다.
- 단일 머신에서 여러 개의 프로세서로 처리할 수 있는 최적의 수행시간이 있다면, 그게 머신의 한계라고 보면 된다.
- 즉, 잡의 전체 과정을 조율하고 프로세스의 실패를 어떻게 처리할지 고민해봐야 하는 시점이다.
이렇듯, 병렬로 처리하는 것은 어찌보면 쉬워보일 수 있지만, 실제론 매우 복잡하다.
그래서, 하둡과 같은 프레임워크를 사용하는 것이다. ㅎㅎ
2.3 하둡으로 데이터 분석하기
하둡으로 이 문제를 해결하기 위해선, 우리의 요구사항을 MR 잡의 형태로 표현할 필요가 있다.
2.3.1 맵과 리듀스
- MR은 크게 M과 R 단계로 구성된다.
- 각 단계는 Input과 Output으로 Key-Value 형태로 나타나며, 그 형식은 프로그래머가 선택하면 된다.