1. 맵리듀스의 개념
- 맵(Map)과 리듀스(Reduce)라는 두 가지 단계로 처리를 한다.
- 맵은 입력 파일을 한 줄씩 읽어서 데이터를 변형(transformation)한다.
- 리듀스는 맵의 결과 데이터를 집계(aggregation)한다.
2. 맵리듀스 모델의 처리 과정
-
맵은 한 줄에 있는 단어 개수를 계산해 한 줄씩 출력한다. 그 후 리듀스는 맵의 출력 데이터를 집계한다.
-
맵 : (k1, v1) → list(k2, v2) , 리듀스 : (k2, list(v2)) → (k3, list(v3))
-
맵은 키(k1)와 값(v1)으로 구성된 데이터를 입력 받아 이를 가공하고 분류한 후, 새로운 키(k2)와 값(v2)으로 구성된 목록을 출력한다. → 여러 개의 데이터 생성
-
맵의 입력키는 각 줄 번호, 입력 값은 각 줄을 의미한다. 맵의 출력키는 단어, 출력값은 단어의 개수를 의미한다.
- 리듀스는 새로운 키(k2)로 그룹핑된 값의 목록(list(v2))을 입력 데이터로 전달받고, 값의 목록(list(v2))에 대한 집계 연산을 실행해 새로운 키(k3)로 그룹핑된 새로운 값(v3)의 목록을 생성한다.
-
리듀스의 입력 키는 단어이고, 입력 값은 단어 개수 목록이며, 출력키는 단어, 출력값은 단어 개수의 합계를 의미한다.
3. 맵리듀스 아키텍처
- 맵리듀스 프레임워크는 개발자가 분석 로직을 구현하는데 집중하게 하고, 데이터에 대한 분산과 병렬 처리를 프레임워크가 전담한다.
-
맵리듀스 프레임워크의 시스템 구성과 데이터의 흐름을 모르더라도 개발을 진행하는데 지장은 없으나, 아키텍처를 모른다면 성능을 고려하지 않은 채로 개발하게 되고, 결국에는 서비스에 사용 못할 수 도 있다.
-
맵리듀스 시스템은 클라이언트, 잡트래커, 태스크트래커로 구성
3-1. 클라이언트
클라이언트는 사용자가 실행한 맵리듀스 프로그램과 하둡에서 제공하는 맵리듀스 API를 의미한다. 사용자는 맵리듀스 API로 맵리듀스 프로그램을 개발하고, 개발한 프로그램을 하둡에서 실행할 수 있다.
3-2. 잡트래커
- 맵리듀스 프로그램은 잡(job)이라는 하나의 작업 단위로 관리된다.
- 잡트래커는 하둡 클러스터에 등록된 전체 잡의 스케줄링을 관리하고 모니터링한다.
- 보통 하둡의 네임노드 서버에서 실행된다. 그렇다고 무조건 잡트래커를 반드시 네임노드 서버에서 실행할 필요는 없다.
- 잡트래커는 잡을 처리하기 위해 몇 개의 맵과 리듀스를 실행할지 계산한다. 이렇게 계산된 맵과 리듀스를 어떤 태스크트래커에서 실행할지 결정하고, 해당 태스크트래커에 잡을 할당한다.
- 태스크트래커는 잡트래커의 작업 수행 요청을 받아 맵리듀스 프로그램을 실행한다.
- 잡트래커와 태스크트래커는 하트비트라는 메서드로 네트워크 통신을 하면서 태스크트래커의 상태와 작업 실행 정보를 주고 받게 된다. 만약 태스크트래커에 장애가 발생하면 잡트래커는 다른 대기 중인 태스크트래커를 찾아 태스크를 실행하게 된다.
3-3. 태스크트래커
- 태스크트래커는 사용자가 설정한 맵리듀스 프로그램을 실행하며, 하둡의 데이터 노드에서 실행되는 데몬이다.
- 태스크트래커는 잡트래커의 작업을 요청 받고, 잡트래커가 요청한 맵과 리듀스 만큼 맵 태스크와 리듀스 태스크를 생성한다.
- 맵 태스크와 리듀스 태스크가 생성되면 새로운 JVM을 구동해 맵 태스크와 리듀스 태스크를 실행한다.
댓글 영역