1. 맵리듀스(MapReduce)
- 맵리듀스는 간단한 단위 작업을 반복하여 처리할 때 사용하는 프로그래밍 모델
- 하둡에서 분산처리를 담당하는 맵리듀스 작업은 맵과 리듀스로 나누어져 처리
- 맵(Map) 단계
- 간단한 단위작업을 처리
- 리듀스(Reduce) 단계
- 맵 작업의 결과물을 모아서 집계
- 맵(Map) 단계
- 맵, 리듀스 작업은 병렬로 처리가 가능하기 때문에 여러 컴퓨터에서 동시에 작업하여 속도를 높임
2. 처리 단계
- 입력
- 데이터를 입력하는 단계
- 텍스트, csv, gzip 형태의 데이터를 읽어서 맵으로 전달
- 맵(Map)
- 입력을 분할하여 키별로 데이터를 처리
- 컴바이너(Combiner)
- 네트워크를 타고 넘어가는 데이터를 줄이기 위하여 맵의 결과를 정리
- 로컬 리듀서라고 함
- 컴바이너는 작업의 설정에 따라 없을 수도 있음
- 파티셔너(Partitioner)
- 맵의 출력 결과 키 값을 해쉬 처리하여 어떤 리듀서로 넘길지를 결정
- 셔플(Shuffle)
- 각 리듀서로 데이터 이동
- 정렬(Sort)
- 리듀서로 전달된 데이터를 키 값을 기준으로 정렬
- 리듀서(Reducer)
- 리듀서로 데이터를 처리하고 결과를 저장
- 출력
- 리듀서의 결과를 정의된 형태로 저장
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
- yarn.app.mapreduce.am.resource.mb
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 |