본문 바로가기

AI/빅데이터

3.하둡-맵리듀스

맵리듀스는 8단계의 처리과정을 거침


1.입력
-데이터를 입력하는 단계
2.맵
-입력을 분할하여 키별로 데이터를 처리
3.컴바이너
-데이터 전송을 줄이기위하여 맵의 결과를 정리
4.파티셔너
-맵의 출력 결과 키 값을 해쉬 처리하여 어떤 리듀서로 넘길지 결정
5.셔플
-각 리듀서로 데이터를 이동
6.정렬
-리듀서로 전달된 데이터를 키 값 기준으로 정렬
7.리듀서
-리듀서로 데이터를 처리하고 결과를 저장
8.출력
리듀서의 결과를 정의된 형태로 저장

 

보조 도구
-Counter
하둡에서 맵리듀스의 잡 진행 상황을 확인할 수 있는 카운터를 제공. 잡은 맵리듀스의 작업, 입출력 상황을 확인할 수 있는 카운터를 제공하고 사용자가 카운터를 생성하여 사용하기도 가능

 

-Distributed Cache
맵리듀스 잡에서 공유되는 데이터를 이용해야 할 때 분산 캐쉬를 사용. 맵리듀스 잡에서 데이터를 조인해야 할 경우 이용할 수 있음

 

메모리 설정

맵리듀스 메모리 설정은 mapred-site.xml 파일을 수정하여 변경할 수 있다.


-yarn.app.mapreduce.am.resource.mb
노드에서 애플리케이션 마스터를 실행할 때 할당하는 메모리

 

-yarn.app.mapreduce.am.command-opts
애플리케이션 마스터의 힙 사이즈

 

-mapreduce.map.moemory.mb
맵 컨테이너를 생성할 때 설정하는 메모리

 

-mapreduce.map.java.opts
맵컨테이너를 생성할 때 설정하는 자바 옵션

 

-mapreduce.map.cpu.vcores
맵 컨테이너에서 사용 가능한 가상 코어 개수

 

-mapred.child.java.opts
맵과 리듀스 태스크의 JVM 실행 옵션, Heap 사이즈 설정

 

ex)

<property>
    <name>yarn.app.mapreduce.am.resource.mb</name>
    <value>2880</value>
  </property>

  <property>
    <name>mapreduce.map.memory.mb</name>
    <value>1024</value>
  </property>
  <property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx820m</value>
  </property>
  <property>
    <name>mapreduce.map.cpu.vcores</name>
    <value>1</value>
  </property>

매퍼 설정
매퍼 처리중 발생하는 임시 데이터의 처리를 위한 설정

 

-mapreduce.task.io.sort.mb
맵의 출력 데이터를 저장할 환형 버퍼의 메모리 크기

 

-mapreduce.map.sort.spill.percent
맵의 출력 데이터를 저장하는 버퍼가 설정한 비율에 도달하면 로컬 디스크에 임시 파일 출력

 

-mapreduce.task.io.sort.factor
하나의 정렬된 출력 파일로 병합하기 위한 임시 파일의 개수

 

-mapreduce.cluster.local.dir
임시 파일이 저장되는 위치

 

ex)

 <property>
    <name>mapreduce.task.io.sort.mb</name>
    <value>200</value>
  </property>
  <property>
    <name>mapreduce.map.sort.spill.percent</name>
    <value>0.80</value>
  </property>
  <property>
    <name>mapreduce.task.io.sort.factor</name>
    <value>100</value>
  </property>
  <property>
    <name>mapreduce.cluster.local.dir</name>
    <value>${hadoop.tmp.dir}/mapred/temp</value>
  </property>

 

셔플 설정
-mapreduce.reduces.shuffle.parallelcopies
셔플단계에서 맵의 결과를 리듀서로 전달하는 스레드의 개수

 

-mapreduce.reduces.memory.total.bytes
셔플단계에서 전달된 맵의 데이터를 복사하는 메모리 버퍼의 크기

 

-mapreduce.reduces.shuffle.input.buffet.precent
메모리 버퍼 크기의 비율을 설정

 

-mapreduce.reduces.shuffle.memory.limit.percent
메모리 버퍼의 크기에 비해 파일의 비율이 설정을 넘어서면 디스크에 쓰임

 

ex)

  <property>
    <name>mapreduce.reduce.shuffle.parallelcopies</name>
    <value>10</value>
  </property>
  <property>
    <name>mapreduce.reduce.memory.total.bytes</name>
    <value>1024MB</value>
  </property>
  <property>
    <name>mapreduce.reduce.shuffle.input.buffer.percent</name>
    <value>0.8</value>
  </property>
  <property>
    <name>mapreduce.reduce.shuffle.memory.limit.percent/name>
    <value>0.25</value>
  </property>

 

매퍼, 리듀서 개수 설정

-mapreduce.job.maps
매퍼의 개수 설정

 

-mapreduce.job.reduces
리듀서 개수 설정

 

-mapreduce.input.fileinputformat.split.maxsize
매퍼에 입력가능한 최댇 사이즈

 

-mapreduce.input.fileinputformat.split.minsize
매퍼에 입력가능한 최소 사이즈

 

 

 

-성능 최적화
맵리듀스의 성능을 높이기 위해서는 특정 설정하나로는 성능을 높이기 힘듬.

여러단계를 거치기 때문에 여러 방식으로 설정을을 수정해야함


1.매퍼, 리듀서 개수 설정
2.정렬 속성 설정
3.컴바이너 클래스 적용
4.맵출력 데이터 압축
5.작은 파일 문제 수정
등 여러가지 방식이 있음.

'AI > 빅데이터' 카테고리의 다른 글

수치형 데이터 다루기  (0) 2021.06.22
3.하둡-YARN  (0) 2021.02.18
3.하둡-2  (0) 2021.02.18
3.하둡-1  (0) 2021.02.17
2.빅데이터 처리단계  (0) 2021.02.16