분산처리/빅데이터-하둡, 하이브로 시작하기

3) 맵리듀스

busy맨 2023. 7. 27. 13:59

1. 맵리듀스(MapReduce)

  • 맵리듀스는 간단한 단위 작업을 반복하여 처리할 때 사용하는 프로그래밍 모델
  • 하둡에서 분산처리를 담당하는 맵리듀스 작업은 맵과 리듀스로 나누어져 처리
    • 맵(Map) 단계
      • 간단한 단위작업을 처리
    • 리듀스(Reduce) 단계
      • 맵 작업의 결과물을 모아서 집계
  • 맵, 리듀스 작업은 병렬로 처리가 가능하기 때문에 여러 컴퓨터에서 동시에 작업하여 속도를 높임

 

2. 처리 단계

  1. 입력
    • 데이터를 입력하는 단계
    • 텍스트, csv, gzip 형태의 데이터를 읽어서 맵으로 전달
  2. 맵(Map)
    • 입력을 분할하여 키별로 데이터를 처리
  3. 컴바이너(Combiner)
    • 네트워크를 타고 넘어가는 데이터를 줄이기 위하여 맵의 결과를 정리
    • 로컬 리듀서라고 함
    • 컴바이너는 작업의 설정에 따라 없을 수도 있음
  4. 파티셔너(Partitioner)
    • 맵의 출력 결과 키 값을 해쉬 처리하여 어떤 리듀서로 넘길지를 결정
  5. 셔플(Shuffle)
    • 각 리듀서로 데이터 이동
  6. 정렬(Sort)
    • 리듀서로 전달된 데이터를 키 값을 기준으로 정렬
  7. 리듀서(Reducer)
    • 리듀서로 데이터를 처리하고 결과를 저장
  8. 출력
    • 리듀서의 결과를 정의된 형태로 저장

 

3. 보조 도구

  • 카운터(Counter)
    • 하둡은 맵리듀스 잡의 진행 상황을 확인할 수 있는 카운터 제공
    • 잡은 기본적으로 맵리듀스의 작업상황, 입출력 상황을 확인할 수 있는 카운터를 제공
  • 분산 캐쉬(Distributed Cache)
    • 맵리듀스 잡에서 공유되는 데이터를 이용해야 할 때 분산 캐쉬 사용
    • 데이터를 조인해야하는 경우 사용

 

4. 메모리 설정

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

 

  • Mapper와 Reducer 메모리 설정
    • yarn.app.mapreduce.am.resource.mb
      • 노드에서 애플리케이션 마스터를 실행할 때 할당하는 메모리
    • yarn.app.mapreduce.am.command-opts
      • 애플리케이션 마스터의 힙사이즈
    • mapreduce.map.memory.mb
      • 맵 컨테이너를 생성할 때 설정하는 메모리
    • mapreduce.map.java.opts
      • 맵 컨테이너를 생성할 때 설정하는 자바 옵션
      • Xmx 옵션을 이용하여 힙사이즈를 설정
      • 맵 컨테이너 메모리(mapreduce.map.momory.mb)의 80%로 설정
    • mapreduce.map.cpu.vcores
      • 맵 컨테이너에서 사용 가능한 가상 코어 개수
      • 기본값은 1
    • mapreduce.reduce.memory.mb
      • 리듀스 컨테이너를 생성할 때 설정하는 메모리
      • 맵 컨테이너 메모리(mapreduce.map.memory.mb)의 2배로 설정하는 것이 일반적
    • mapreduce.reduce.java.opts
      • 리듀스 컨테이너를 생성할 때 설정하는 자바 옵션
      • Xmx 옵션을 이용하여 힙사이즈를 설정
      • 리듀스 컨테이너 메모리의 80%로 설정
    • mapreduce.reduce.cpu.vcores
      • 리듀스 컨테이너의 코어 개수
    • mapred.child.java.opts
      • 맵과 리듀스 태스크의 JVM 실행 옵션, Heap 사이즈 설정
      • mapreduce.map.java.opts, mapreduce.reduce.java.opts 설정이 이 설정을 오버라이드 하여 설정
      • 기본 설정은 -Xmx200m

 

5. 성능 최적화

  • 매퍼, 리듀서 수 설정
    • 매퍼 수와 리듀서 수에 따라 작업 속도가 빨라질 수 있음
    • 매퍼 하나에 많은 파일이 모이거나, 메모리를 많이 사용하는 작업이어서 GC에 많은 시간이 걸려서 느려질 수 있음
  • 정렬 속성 튜닝
    • 임시 결과 파일 개수를 줄여서 성능 개선
    • 로컬 디스크에 저장된 파일이 줄어들수록 맵 출력 데이터의 병합, 네트워크 전송, 리듀서의 병합시간이 단축
  • 컴바이너 클래스 적용
    • 컴바이너를 적용하면 맵의 결과가 리듀서로 전송되기 전에 컴바이너 작업을 진행함
    • 데이터와 네트워크 사용량을 줄여서 리듀서의 작업 속도 향상
  • 맵출력 데이터 압축
    • 맵 출력 데이터를 압축하여 네트워크 트래픽을 줄이면 원본을 사용할 때 보다 속도 증가
  • 작은 파일 문제 수정
    • 작은 사이즈의 파일이 여러 개 존재하게 되면 이 파일들을 관리하는 네임노드의 수가 많아지고,
      당연히 더 많은 메모리가 사용됨
    • 이렇게 되면 네임노드에 병목현상이 발생하게 되어 작업 속도가 느려짐
    • 작은 사이즈의 파일을 하나의 파일로 합쳐 HDFS 블록사이즈 크기의 파일로 설정

'분산처리 > 빅데이터-하둡, 하이브로 시작하기' 카테고리의 다른 글

5-1) 하이브(hive)  (0) 2023.07.27
4) YARN  (0) 2023.07.27
2-4) HDFS 기능 2  (0) 2023.07.18
2-3) HDFS 기능 1  (0) 2023.07.17
2-3) 블록과 세컨더리 네임노드  (0) 2023.07.16