MapReduce - 셔플(Shuffle)

Posted 05 15, 2013 13:27, Filed under: BigData/MapReduce


# 셔플(Shuffle)

셔플은 맵 태스크와 리듀스 태스크 사이의 전달 과정입니다.
셔플은 내부적으로 복잡한 단계로 구성돼 있고, 셔플을 위한 환경설정에 따라 잡의 성능에 영향을 줄 수 있습니다.

셔플은 메모리에 저장돼 있는 매퍼의 출력 데이터를 파티셔닝과 정렬을 해서 로컬 디스크에 저장한 후, 네트워크를 통해 리듀서의 입력 데이터로 전달되는 과정을 의미합니다.

사용자 삽입 이미지


# 셔플 세부 작업

1) 맵리듀스 잡의 입력 데이터는 논리적인 단위인 입력 스플릿으로 분리된 후, 스플릿별로 하나의 맵 태스크가 실행됩니다.

2) 맵 태스크는 메모리 버퍼를 생성한 후, 맵의 출력 데이터를 버퍼에 기록합니다.
   이때 버퍼의 크기는 하둡 환경설정 파일인 mapred-site.xml에 정의된 io.sort.mb 속성을 참고 합니다.
   별도로 정의하지 않을 경우 기본값으로 100MB의 버퍼를 생성합니다.

3) 버퍼가 일정한 크기에 도달하면 하둡은 해당 데이터를 로컬 디스크로 스필(spill)합니다.
   참고로 스필을 진행하는 중에도 2번 단계를 계속 진행합니다.
   이때 버퍼의 일정한 크기는 mapred-site.xml에 정의된 io.sort.spill.percent 속성을 참조합니다.
   이 속성의 기본값은 0.80인데, 이는 버퍼를 80% 사용하면 스필을 실행한다는 의미 입니다.
   하둡은 로컬 디스크에 데이터를 저장하기 전에 데이터를 분리해서 파티션을 생성합니다.
   파티션들은 맵의 출력 데이터를 사용할 리듀스 태스크와 일치하도록 생성됩니다.
   이때 파티션은 잡에서 설정한 파티셔너 클래스를 사용합니다.

4) 맵 태스크가 종료되기 전에 스필 파일들은 하나의 정렬된 출력 파일로 병합됩니다.
   병합할 스필 파일의 수는 mapred-site.xml에 정의된 io.sort.factor 속성을 기준으로 합니다.
   이 속성은 기본값으로 10개의 스필 파일을 병합하도록 설정되 있습니다.
   또한 출력 파일의 파티션들은 리듀서가 HTTP 프로토콜로 접근할 수 있게 생성됩니다.
   이때 출력 파일에 접근하는 작업 스레드의 개수는 mapred-site.xml에 정의된 tasktracker.http.threads 속성을 기준으로 합니다.
   기본적으로 40개의 스레드를 생성하게 되 있습니다.

5) 리듀서는 맵 태스크가 완료되면 즉시 필요한 출력 데이터를 네트워크를 통해 복사합니다.
   이때 복사하는 스레드의 개수는 mapred-site.xml에 정의된 mapred.reduce.parallel.copies 속성을 기준으로 하며, 기본적으로 5개의 스레드가 구동하게 되 있습니다.
  
   네트워크를 통해 복사된 맵 출력 데이터는 리듀스용 태스크트래커의 메모리 버퍼로 복사됩니다.
   이때 메모리 버퍼의 크기는 리듀스용 태스크트래커의 힙 메모리 사이즈의 일정 부분을 사용하는데, 이 비율은 mapred-site.xml에 정의된 mapred.job.shuffle.input.bufer.percent 속성을 참고합니다.
   기본적으로 힙 메모리의 70%를 사용하도록 설정되 있습니다.

   버퍼에 저장된 내용은 다음과 같은 경우에 병합되어 파일로 저장됩니다.
   첫째, 버퍼가 일정한 크기에 도달할 때이며, 해당 임계치는 mapred-site.xml에 정의된 mapred.job.shuffle.merge.percent 속성을 기준으로 합니다. 기본값은 66%입니다.
   둘째, 메모리 버퍼에서 처리해야 할 파일 개수가 일정 개수가 돼도 병합을 실행합니다.
   이때 파일 개수는 mapred-site.xml에 정의된 mapred.inmem.merge.threshold 을 사용하며, 기본값은 1000 입니다.

6) 모든 맵 출력 데이터가 복사되면 해당 데이터를 병합합니다.
   이 단계에서 키값을 기준으로 별도의 병렬 작업을 진행하지는 않습니다.
   왜냐하면 맵에서 정렬 작업이 완료됐기 때문입니다.
   이 단계에서는 정렬을 유지하고 있는 맵 출력 데이터를 병합하기만 하면 됩니다.
   병합은 라운드 방식으로 진행하며, 라운드 기준은 mapred-site.xml에 정의된 io.sort.fact 를 사용합니다.
   예를 들어, 30개의 맵 출력 데이터를 복사하고, io.sort.fact에는 10이 정의돼 있다고 가정합니다.
   이 경우 각 라운드는 파일 10개당 하나의 병합 파일을 만들어 최종적으로 세 개의 병합된 파일이 생성됩니다.
   이때 세 개의 파일은 하나의 파일로 병합되지 않고, 즉시 리듀스 태스크의 입력 데이터로 전달됩니다.

7) 리듀스 메서드는 정렬된 출력 데이터에서 키별로 호출됩니다.



# 셔플 정렬 속성 수정


io.sort.mb
: 메모리 버퍼
mapred.child.java.opts : JVM 힙 메모리 크기
io.sort.factor : 병합할 스필 파일의 수

[hadoop@master conf]$ vi mapred-site.xml
<property>
 <name>io.sort.mb</name>
 <value>200</value>
</property>                    
<property>
 <name>io.sort.factor</name>
 <value>30</value>
</property>                    
<property>
 <name>mapred.child.java.opts</name>
 <value>-Xmx512m</value>
</property>


참고 : 시작하세요! 하둡 프로그래밍


※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
05 15, 2013 13:27 05 15, 2013 13:27


Trackback URL : http://develop.sunshiny.co.kr/trackback/897

Leave a comment
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다

« Previous : 1 : ... 119 : 120 : 121 : 122 : 123 : 124 : 125 : 126 : 127 : ... 648 : Next »

Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. 안녕하세요^^ 배그핵
  2. 안녕하세요^^ 도움이 되셨다니, 저... sunshiny
  3. 정말 큰 도움이 되었습니다.. 감사합... 사랑은
  4. 네, 안녕하세요. 댓글 남겨 주셔서... sunshiny
  5. 감사합니다 많은 도움 되었습니다!ㅎㅎ 프리시퀸스

Recent Trackbacks

  1. clock synchronization software clock synchronization software 2 06
  2. print and mailing services print and mailing services 2 06
  3. print and mail service print and mail service 1 06
  4. clocks large facilities clocks large facilities 1 06
  5. print and mail service print and mail service 31 05

Calendar

«   06 2020   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2968378 HIT
TODAY 83 HIT
YESTERDAY 1325 HIT