MapReduce 작업 및 자원 할당 개념 정리 [3]

map

input file (big file on hdfs, ex 1024MB) -> splitting (dfs.blocksize, hadoop default 64MB)

-> 16 (1024/64) map task 필요 -> memory 에서 작업 (map의 출력 데이터 저장할 버퍼 크기, mapreduce.task.io.sort.mb)

-> partition (map 결과를 key 에 해쉬 함수를 적용하여 나눈다)

-> 버퍼 사용률이 일정 비율(mapreduce.map.sort.spill.percent, default 80%) 이 넘어갈 시 로컬 디스크에 파일로 저장하는 과정을 spill 이라 부름

-> 분산된 파티션들을 sort & merge 하여 reduce 입력으로 보냄

 

dfs.blocksize 값에 따라 최초 파일 저장 시 map task 수가 결정된다. ( file MB / dfs.blocksize MB, 이후 변경은 가능함 )

map task 수가 N 개라고 N 개의 노드에서 실행되는것은 아니다. 해당 input file block 이 존재하는 노드에서 map task 가 실행됨으로 block 이 복제(replication) 됨으로 (하둡 기본 철학, 로컬 데이터 처리)

그러므로 CPU 및 기타 자원들의 사용률 (map task )에 따라 노드당 적정 map task 를 계산하여 작업이 분할될수 있도록 blocksize 조정이 필요

 

reduce

여러 map task 에서 생성되어 전달된 데이터를 sort & merge 하여 최종 결과물을 만든다.

 

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...