Hadoop MapReduce

간단한 단위 작업을 처리하는 Map과 그 결과물을 모아서 집계하는 Reduce 단계로 구성된다.
이 작업들은 병렬로 처리가 가능하여 여러 컴퓨터에서 동시에 작업을 처리하여 속도를 높일 수 있다.

하둡 v1의 작업 단위는 Job이고 v2의 작업 단위는 Application이다.
YARN 아키텍쳐가 도입되면서 이름이 바뀌었지만 동일하게 관리된다.
Job은 Map Task와 Reduce Task로 나뉘고, Task는 Attemp단위로 실행된다.

실행 중 오류가 발생하면 설정된 횟수만큼 자동으로 반복한다.

맵의 입력은 InputSplit단위로 분할된다. 스플릿이 작으면 작업 부하가 분산되어 성능을 높일 수 있지만 너무 작으면 작업 개수가 증가하고 맵 작업 생성을 위한 오버헤드가 증가해서 오히려 느려질 수 있다.
일반적으로 가장 적절한 스플릿 크기는 데이터 지역성의 이점을 얻을 수 있는 HDFS블록의 기본 크기인 128MB이다.

맵 작업의 결과는 로컬 디스크에 임시저장된다. 리듀스 작업의 입력으로 쓰이는 임시 결과물이기 때문이다.
리듀스 작업은 지역성의 장점이 없다.
리듀스 작업의 결과는 HDFS에 저장된다.

리듀스 작업이 없는 경우: raw data를 읽고 바로 쓰는 경우. 매퍼 수만큼 파일이 생성된다.
리듀서가 하나인 경우: 모든 데이터의 정렬작업과 같은 경우. 시간이 오래 걸린다.
리듀서가 여러개인 경우: 리듀서의 수만큼 파일이 생성된다.
하둡은 잡의 진행 상황을 확인할 수 있는 카운터를 제공한다.



맵리듀스 처리 단계
1. Input: 데이터를 읽어서 맵으로 전달
2. Map: 입력을 분할하여 키별로 데이터를 정리
3. Combine(로컬 리듀서): 네트워크를 타고 넘어갈 크기를 줄이기 위해 맵의 결과를 정리
4. Partition: 맵의 출력 결과 키 값을 해쉬 처리하여 어떤 리듀서로 넘길 지 결정
5. Shuffle: 각 리듀서로 데이터 이동
6. Sort: 리듀서로 전달된 데이터를 키 값 기준으로 정렬
7. Reduce: 데이터를 처리하고 결과를 저장
8. Output: 리듀서의 결과를 정의된 형태로 저장





----------------------------------
Reference
https://wikidocs.net/22827

댓글

이 블로그의 인기 게시물

논문 정리 - MapReduce: Simplified Data Processing on Large Clusters

논문 정리 - The Google File System

kazoo: Using zookeeper api with python