map task 내의 buffer 크기 = io.sort.mb
map task 내의 record buffer 크기= io.sort.mb * io.sort.record.percent
map task 내의 data buffer 크기 = io.sort.mb * (1 - io.sort.record.percent)
map task 내의 max spill 크기 = io.sort.mb * (1 - io.sort.record.percent) * io.sort.spill.percent

record 당 16 byte (partition offset + key offset + value offset + offset) 의 record buffer 가 사용되므로 1개의 record 당 평균 크기가 n byte 라 할때 최적의 io.sort.record.percent 는 다음과 같다.

io.sort.record.percent = 16 / (n + 16)

io.sort.record.percent 의 default 값은 0.05 이므로 대략 300 byte 정도의 레코드를 가정한다고 할 수 있다.

combiner 를 별도로 지정하지 않았는데 mapred.local.dir 의 trasktracker 내에 저장되는 spill file 의 크기가 앞서 설명한 max spill 크기보다 많이 작다면 io.sort.record.percent 를 조절할 필요가 있다.
이 게시물을..