Programming/Java

hadoop mapreduce.task.io.sort.mb 에 대해

라우드니스 2014. 12. 12. 15:34
mapreduce.task.io.sort.mb100The total amount of buffer memory to use while sorting files, in megabytes. By default, gives each merge stream 1MB, which should minimize seeks.



http://www.slideshare.net/cloudera/mr-perf


Map task (개별) 가 output을 작성할때, 당연하게도 바로 disk에 이를 적지는 않는다.


자신이 가지고 있는 in-memory buffer가 있는데, 이 크기를 조절하는게 mapreduce.task.io.sort.mb 이다. 

(아무리 생각해도 이름이 너무 직관적이지 못하다...)



default 설정이 100MB이므로 만약 100MB 이상의 데이터를 buffer에 쓰게되면 우선 map task는 disk에 지금까지 buffer에 적힌 내용을 flush한다. 이렇게 쌓인 중간 데이터들은 map task가 최종적으로 끝났을 때 다시 1개의 intermediate file로 merge되고, 이 merge된 file을 reduce에게 전송한다.


매우 중요한 최적화 요소인것으로 보인다. 특히 Sort나 Pagerank와 같은 어플리케이션에서는 가뜩이나 부족한 disk bandwidth를 잡아먹을 수 있는 녀석이니. 


생각해보면 현재 YARN cluster의 default block size가 128MB니까 default로 Sort를 실행시키면 결국 100MB + 28MB를 디스크에 쓰고 이를 다시 128MB로 만드는 일을 하므로 동일한 Sort라도 읽기도 2배, 쓰기도 2배로 원래 양의 3배에 달하는 양을 더 사용한다. 




진짜 시간만 더 있었으면 실험을 전부 새로 돌리고 싶다...




반응형