2장 맵리듀스를 읽고 책내용에 관한 정리해보려 한다.
2장
1.맵리듀스는 어떤 프로그래밍 모델인가?
맵리듀스는 대규모 데이터를 여러 노드에서 병렬로 처리하기 위해 데이터를 Map과 Reduce 단계로 나누어 계산하는 분산 프로그래밍이다.
Map → 데이터 변환
Reduce → 데이터 집계
이 구조로 분산 처리, 병렬 처리 가 가능해진다. 쉽게 얘기하면 데이터 처리 방식을 단순한 두 단계로 나눈 것
2.맵리듀스가 병렬 처리를 고려해 설계되었다는 것은 무엇을 의미하는가?
맵리듀스가 병렬 처리를 고려해 설계되었다는 것은 데이터를 여러 조각으로 나누고 각 조각을 여러 노드에서 동시에 처리하도록 구조가 설계되었다는 의미입니다. 즉, 하나의 프로그램이 여러 서버에서 동시에 실행되며 대규모 데이터를 빠르게 처리할 수 있도록 만들어진 분산 병렬 처리 모델입니다.
3. 왜 맵리듀스는 대용량 데이터셋에서 특히 강한가?
맵리듀스는 데이터를 여러 노드에 분산 저장하고 병렬로 처리하며 장애 발생시 자동 복구까지 지원하기 때문에 대용량 데이터셋 처리에 강하다.
데이터 분산 저장
데이터를
한 서버 ❌
여러 서버 ⭕
에 나눠 저장.
→ 한 번에 처리 가능
4. 맵리듀스 프로그램을 다양한 언어로 실행할 수 있는 이유는 무엇인가?
맵리듀스는 표준 입력·출력 기반 인터페이스(하둡 스트리밍)를 제공하기 때문에 자바뿐 아니라 파이썬, 쉘 등 다양한 언어로 작성된 프로그램도 실행할 수 있다. 언어에 종속되지 않고 데이터 처리 모델을 중심으로 동작하는 구조입니다.
5. 2장을 읽으면서 기상 데이터셋을 분석하는 프로그램을 작성해보았는데 반구조적이면서 레코드 지향적인 데이터란?
반구조적 데이터는 완전히 고정된 테이블 구조는 없지만 일정한 패턴을 가진 데이터를 의미하고, 레코드 지향적 데이터는 한줄이 하나의 데이터 단위로 구성된 형태를 말합니다. 기상 로그처럼 필드가 일부 가변적이지만 행 단위로 구분되는 데이터가 여기에 해당하며, 이런 데이터는 한 레코드씩 처리하는 맵리듀스 모델에 적합합니다.
6. 다수의 파일을 하나로 병합하는 전처리가 필요한 이유는?
하둡은 작은 파일이 많을수록 처리 효율이 떨어지기 때문에, 다수의 작은 파일을 큰 파일로 병합하여 처리 성능을 높이기 위해 전처리가 필요하다.
작은 파일이 많으면 NameNode 메모리에 부담이 된다.
따라서 다수의 작은 파일을 하나의 큰파일로 병합하는 전처리를 통해 처리 효율을 높일 필요가 있다.
7.awk 같은 유닉스 도구로데이터 분석이 가능한 이유는?
awk는 행(line) 단위로 데이터를 읽고 필드를 추출-조건 처리-집계할 수 있는 도구이기 때문에 로그나 텍스트 기반 데이터를 간단하게 분석할 수 있다. 다만 단일머신 기반이기 때문에 데이터가 매우 커지면 한계가 있어 Hadoop 같은 분산 처리 시스템이 필요하다.
awk : 텍스트 처리 전용 도구
특징은 한줄씩 읽고 필드 분리가 가능하며 조건처리 가능 집계도 가능하다.
8.하둡을 사용하기 전 기준선 성능 측정이 필요한 이유는?
하둡을 적용했을때 성능이 얼마나 개선되었는지 비교 검증하기위해 기존 방식의 처리 속도를 기준선으로 먼저 측정한다.
9.맵리듀스 작업이 맵단계와 리듀스 단계로 나뉘는 이유는 무엇일까?
데이터를 먼저 병렬로 나눠 처리하고(MAP)단계, 이후 결과를 모아 집계(Reduce)하기 위해 두 단계로 분리되어 있다. 대용량 데이터 처리의 기본 흐름은
- 나눠서 처리
- 모아서 계산
이렇게 분리하면 대규모 데이터를 효율적으로 분산 처리하면서도 최종 결과를 정확하게 집계할 수 있기 때문입니다.
10.맵 단계의 역할은 무엇인가?
맵 단계는 입력 데이터를 한 레코드씩 읽어 필요한 정보만 추출하고 key-value 형태로 변환하여 리듀스 단계로 전달하는 역할을 한다.또한 잘못된 데이터를 제거하고 분석에 필요한 형태로 전처리하는 단계이기도 합니다.
맵단계 : 데이터를 쪼개고,정리하고,필요한 형태로 바꾸는 단계
이 데이터가 리듀스로 전달됨.
11.리듀스 단계의 역할은 무엇인가?
리듀스 단계는 맵 단계에서 생성된 key-value 데이터를 같은 키 끼리 묶어 집계하고 최종 결과를 생성하는 역할을 한다.즉, 분산 처리된 데이터를 하나의 결과로 정리하는 역할을 합니다.
리듀스 단계 : 결과를 모아서 계산하는 단계
같은 key끼리 묶기
맵 출력:
(연도, 기온)
(연도, 기온)
(연도, 기온)
리듀스 입력:
연도 →[기온, 기온, 기온]
집계/연산 수행
합계,평균,최대값,계수
최종 결과 생성
리듀스 출력: 연도 → 최고 기온
Map
hello →1
hello →1
world →1
Reduce
hello →2
world →1
12.맵리듀스에서 키-값 쌍을 사용하는 이유는 무엇인가?
데이터를 키를 기준으로 자동으로 묶고 정렬하여 병렬 처리와 집계를 쉽게 하기 위해 키-값 형태를 사용한다.
맵리듀스는 기본적으로 데이터를 나눠 처리→ 같은 것끼리 모아 계산해야한다.
키는 데이터를 묶는 기준이 되고, 값은 실제 계산 대상 데이터가 되며, 이를 통해 병렬 처리와 자동 집계가 가능해집니다.
13.맵 함수와 리듀스 함수는 각각 어떤 일을 하는가?
맵 함수는 입력 데이터를 읽어 key-value 형태로 변환하고, 리듀스 함수는 같은 키를 가진 데이터를 모아 집계하여 최종 결과를 만든다.
맵 함수 리듀스 함수
| 목적 | 데이터 변환 | 데이터 집계 |
| 역할 | 준비 | 계산 |
| 입력 | 원본 데이터 | 맵 결과 |
| 출력 | key-value | 최종 결과 |
14.텍스트 입력 포맷(TextInputFormat)은 무엇인가?
텍스트입력포맷은 입력 파일을 한줄씩 읽어 각 줄을 하나의 레코드로 처리하도록 하는 맵리듀스의 기본 입력 형식이다 이때 키는 해당 줄의 파일 내 위치(오프셋)이고 값은 한 줄의 텍스트 데이터가 된다.
쉽게 말하면 맵리듀스가 데이터를 읽을때 어떤방식으로 읽을지 정하는 규칙
15.맵 입력에서 키가 의미없는 이유는?
키는 단순히 파일에서 해당 행의 시작 위치를 나타내는 값일 뿐, 실제 데이터 분석에는 필요 없는 메타정보이기 때문이다.
TextInputFormat에서 맵 입력의 키는 파일 내에서 해당 행이 시작되는 바이트 위치를 의미하는 오프셋 값입니다. 이는 레코드를 구분하기 위한 메타정보 일 뿐 실제 데이터 분석에는 필요하지 않기 때문에 대부분의 맵리듀스 작업에서는 값만 사용하고 키는 무시한다.
16. 맵 함수에서 데이터 전처리를 수행하는 이유는?
리듀스 단계에서 효율적으로 집계할 수 있도록 데이터를 정리하고 불필요하거나 잘못된 데이터를 미리 제거하기 위해 맵 단계에서 전처리를 수행한다.
맵리듀스 흐름
Map →Shuffle →Reduce
여기서:
- 맵은 데이터 “준비 단계”
- 리듀스는 “계산 단계”
따라서:
계산 전에 데이터 정리가 필요
정리: 맵 함수는 리듀스 단계에서 효율적으로 집계할 수 있도록 데이터를 정리하고 필요한 정보만 추출하며 잘못된 레코드를 제거하는 전처리 역할을 한다. 이를 통해 리듀스로 전달되는 데이터 양을 줄이고 전체 처리 성능을 높일 수 있다.
17. 맵리듀스의 전체 데이터 흐름은?
맵리듀스는 입력 데이터를 Map에서 처리한 뒤 Shuffle 단계에서 키 기준으로 정렬·분배하고, Reduce에서 집계하여 최종 결과를 출력하는 흐름으로 동작한다. 전체 흐름은 입력→ map→ shuffle → Reduce → 출력 순서로 이루어집니다.
입력 → Map → Shuffle → Reduce → 출력
입력(Input)
- HDFS에 저장된 데이터
- 파일을 스플릿 단위로 분할
- 맵 태스크에 전달
Map
- 한 레코드씩 읽음
- 필요한 정보 추출
- key-value 생성
Shuffle
맵 결과를
key 기준 정렬
같은key끼리 묶기
리듀스로 전달
Reduce
같은 key 데이터 집계
합계/최대값/평균 계산
최종 결과 생성
ex:) 연도 → 최고 기온
출력(Output)
- 결과를 HDFS에 저장
- 분석 결과 파일 생성
흐름
원본 데이터
↓
[Map]
↓
(key, value)
↓
[Shuffle]
↓
(key → values[])
↓
[Reduce]
↓
최종 결과
↓
HDFS 저장
18. 셔플(Shuffle)단계는 무엇을 하는 과정인가?
셔플 단계는 맵에서 생성된 key-value 데이터를 키 기준으로 정렬하고 같은 키끼리 묶어 리듀스 태스크로 전달하는 과정이다. 이 단계에서 데이터가 네트워크를 통해 이동하고 정렬되기 때문에 맵리듀스 전체 흐름에서 중요한 역할을 합니다.
셔플에서 하는일
데이터 이동
맵 태스크 결과를 리듀스가 있는 노드로 전송
정렬(Sort)
key 기준 정렬
그룹화(Grouping)
같은 key 끼리 묶음
리듀스로 전달
19. 맵 출력이 리듀스 입력으로 전달되는 과정은 어떻게 이루어지는가?
맵 출력은 셔플 단계에서 키 기준으로 정렬-그룹화되고 네트워크를 통해 해당 키를 담당하는 리듀스 태스크로 전송되어 입력으로 전달된다. 먼저 파티셔닝을 통해 어떤 리듀스 태스크로 전달 될지 결정되고, 이후 셔플단계에서 네트워크를 통해 해당 리듀스로 전송됩니다. 이 과정에서 키 기준 정렬과 그룹화가 이루어지며, 최종적으로 같은 키를 가진 값들이 묶여 리듀스 함수의 입력으로 전달된다.
20. 하둡이 자체 타입(IntWritable, Text 등)을 사용하는 이유는?
하둡은 분산 환경에서 데이터를 효율적으로 전송하고 저장하기 위해 네트워크 직렬화와 성능에 최적화된 자체 타입을 사용한다.
21. 맵리듀스 잡(job)이란?
맵리듀스 잡은 입력 데이터, 맵-리듀스 프로그램, 실행 설정을 포함하여 하둡 클러스터에서 실행되는 하나의 데이터 처리 작업 단위이다. 하나의 잡이 실행되면 내부적으로 여러 개의 맵 태스크와 리듀스 태스크로 나뉘어 병렬로 처리됩니다.
22. 잡은 어떤 요소로 구성되는가?
맵리듀스 잡은 입력데이터, 맵-리듀스 프로그램, 실행 설정 정보로 구성된다.
23. 하둡은 잡을 어떻게 맵 태스크와 리듀스 태스크로 나누는가?
하둡은 입력 데이터를 스플릿 단위로 나누어 각 스플릿마다 하나의 맵 태스크를 생성하고, 맵 결과를 키 기준으로 분배하여 설정된 수 만큼 리듀스 태스크를 생성한다.즉, 맵 태스크 수는 입력 데이터 크기에 따라 결정되고 리듀스 태스크 수는 잡 설정에 의해 결정됩니다.
하둡은 파일을 일정 크기로 분할한다.
ex:) 1GB 파일 → 128MB 단위 → 8개의 스플릿 그러면 맵 태스크 8개 생성
24. 태스크 실행에 YARN이 필요한 이유는 무엇인가?
YARN은 클러스터의 CPU와 메모리 자원을 관리하고 맵-리듀스 태스크를 적절한 노드에 배치하여 실행하도록 하기 때문에 필요하다.
YARN이 하는일 :
자원관리 - 클러스터 전체의 CPU,메모리 사용량 관리
태스크 배치 - 각 태스크를 가용 자원이 있는 노드에 배치
병렬 실행 조정 - 여러 잡이 동시에 실행 될때 자원 충돌 방지
장애 대응 - 태스크 실패시 다른 노드에 재할당
YARN이 그럼 없다면?
- 어디에 실행할지 결정 불가
- 자원 충돌
- 병렬 처리 어려움
- 장애 복구 어려움
YARN은 하둡 클러스터의 CPU와 메모리 같은 자원을 관리하고 맵과 리듀스 태스크를 적절한 노드에 배치하여 실행하도록 하는 역할을 한다. 이를 통해 여러 작업을 병렬로 실행하고 자원 충돌을 방지하며 장애가 발생했을 때 태스크를 재 할당 할수 있기 때문에 맵리듀스 실행에 필수적이다.
25. 태스크 실패 시 하둡은 어떻게 처리하는가?
하둡은 실패한 태스크를 자동으로 감지하고 **다른 노드에 재할당하여 다시 실행함으로써 작업을 계속 진행한다.**맵리듀스는 각 태스크가 독립적으로 동작하는 구조이기 때문에 재실행이 가능하며, 이를 통해 대규모 클러스터 환경에서도 안정적으로 작업을 수행할 수 있습니다.
실패 발생 예는
- 노드 다운
- 네트워크 오류
- 디스크 오류
- 프로세스 종료
하둡의 처리 과정
- 실패감지 → YARN/맵리듀스 프레임워크가 태스크 상태 모니터링 실패확인.
- 재할당 → 해당 태스크를 다른 노드에 다시 배치
- 재실행 → 맵태스크 → 다시실행, 리듀스 태스크 → 다시실행
26.입력스플릿(input Split)이란?
입력 스플릿은 맵리듀스가 입력 데이터를 일정 크기의 조각으로 나눈 논리적인 단위이며, 각 스플릿마다 하나의 맵 태스크가 생성된다.
이를 통해 데이터를 병렬로 처리할 수 있으며 보통 스플릿 크기는 HDFS 블록 크기와 비슷하게 설정됩니다.
쉽게 말하면 대용량 파일을 한번에 처리 X 그래서 조각으로 나눈다 이 조각하나가 입력 스플릿이다.
27.스플릿을 나누면 처리 속도가 빨라지는 이유는 무엇인가?
데이터를 여러 스플릿으로 나누면 각 스플릿을 여러 노드에서 동시에 처리할수 있어 병렬로 전체 처리 시간이 줄어들기 때문이다.
입력 데이터를 스플릿으로 나누면 각 스플릿마다 맵태스크가 생성되어 여러 노드에서 동시에 처리할 수 있기 때문에 전체 처리 시간이 줄어듭니다. 즉, 스플릿은 병렬 처리를 가능하게 하여 성능을 향상시키는 핵심 요소입니다.
28 스플릿 크기가 작을수록 부하 분산에 유리한 이유는?
스플릿이 작을수록 맵 태스크 수가 늘어나 작업을 더 세밀하게 여러 노드에 나눌 수 있어 부하가 특정 노드에 집중되지 않기 때문이다. 다만스플릿이 너무 작아지면 태스크 생성 오버헤드가 증가해 오히려 성능이 저하될 수 있습니다.
29 일반적으로 스플릿 크기를 HDFS 블록 크기와 맞추는 이유는 무엇인가?
스플릿 크기를 HDFS 블록 크기와 맞추면 하나의 스플릿이 하나의 노드에 저장된 데이터 범위와 일치해 데이터 지역성을 유지하고 네트워크 전송을 최소화 할 수 있기 때문이다. 이를 통해 데이터 지역성이 유지되고 네트워크 전송이 줄어들어 전체 처리 성능이 향상됩니다.
30 맵 태스크를 데이터가 있는 노드에서 실행하는 이유는 무엇인가?
데이터를 네트워크로 이동시키는 것보다 계산을 데이터가 있는 위치에서 수행하는 것이 훨씬 빠르고 효율적이기 때문이다.이를 통해 로컬디스크에서 데이터를 빠르게 읽을 수 있고 네트워크 전송을 최소화하여 전체처리 성능을 높일 수 있다.
31 데이터 지역성 최적화가 성능에 미치는 영향은 무엇인가?
데이터 지역성 최적화는 네트워크 전송을 최소화하고 로컬 디스크에서 데이터를 처리하게 만들어 I/O 속도를 높이고 전체 처리 성능을 크게 향상시킨다.
데이터 지역성이란? : 데이터가 있는 노드에서 계산 수행 하는것
32 맵 결과를 HDFS가 아닌 로컬 디스크에 저장하는 이유는 무엇인가?
맵 결과는 리듀스를 위한 임시 중간 데이터이기 때문에 복제와 영구 저장이 필요한 HDFS에 저장할 필요가 없고, 로컬 디스크에 저장하는 것이 더 빠르고 효율적이기 때문이다.
HDFS에 저장하면 문제
HDFS 특징은 복제 저장(보통 3개)
- 네트워크 전송 발생
- 디스크 쓰기 3번 발생
- 시간 오래 걸림
33 맵 태스크 실패 시 결과는 어떻게 복구하는가?
맵 태스크가 실패하면 하둡이 해당 태스크를 다른 노드에서 다시 실행하여 맵 결과를 새로 생성하는 방식으로 복구한다.
34.리듀스 결과를 HDFS에 저장하는 이유는 무엇인가?
리듀스 결과는 최종 분석 결과이므로 안정적으로 보관하고 이후 작업에서 활용하기 위해 복제와 장애 대응 기능이 있는 HDFS에 저장한다.
HDFS는 데이터를 여러 노드에 복제 저장하여 장애가 발생해도 데이터 손실을 방지할수 있으며, 이후 다른 분석 작업에서 재 사용 할 수 있도록 분산환경에서 접근 가능하게 해줍니다.
35.리듀스 수는 어떤 기준으로 결정되는가?
리듀스 수는 입력 데이터 크기가 아니라 작업 특성, 클러스터 자원, 처리 성능을 고려해 사용자가 설정하는 값이다. 적절한 리듀스 수를 설정하면 작업을 병렬로 분산할 수 있지만, 너무 많거나 적으면 오히려 성능이 저하될 수 있다.
36.파티셔닝이란 무엇인가?
파티셔닝은 맵에서 생성된 key-value 데이터를 키 기준으로 여러 리듀스 태스크에 분배하는 과정이다. 기본적으로 해시 함수를 이용해 키를 리듀스 수에 맞게 나누며, 같은 키는 항상 같은 리듀스로 전달되어 집계가 가능하도록 한다.
36.기본 파티셔너가 해시 함수를 사용하는 이유는?
기본 파티셔너는 해시 함수를 사용해 키를 리듀스 수에 맞게 분배합니다.해시 함수는 키를 균등하게 분배하면서도 같은 키는 항상 동일한 리듀스로 보내기 때문에 병렬 처리와 집계를 동시에 가능하게 해준다.
37.컴바이너 함수는 무엇인가?
컴바이너 함수는 맵 출력 데이터를 리듀스로 보내기 전에 맵 단계에서 미리 부분 집계를 수행해 데이터 전송량을 줄이는 최적화용 함수이다.
이를 통해 셔플 단계의 네트워크 부하를 줄이고 전체 처리 성능을 향상시킬수 있습니다.
38.컴바이너를 사용하는 목적은 무엇인가?
컴바이너는 맵 출력 데이터를 미리 부분 집계하여 셔플 단계에서 전송해야 할 데이터 양을 줄이고 전체 처리 성능을 높이기 위해 사용된다.
39. 컴바이너는 리듀서와 어떤 관계가 있는가?
컴바이너는 리듀서와 동일한 집계 로직을 사용하지만 최종 결과를 만드는 것이 아니라 맵 단계에서 부분 집계를 수행하는 보조 역할을 한다. 반면 리듀서는 셔플 이후 전체 데이터를 모아 최종 결과를 생성하는 단계입니다.
40. 컴바이너 호출 횟수를 보장하지 않는 이유는 무엇인가?
컴바이너는 필수 처리 단계가 아니라 성능 최적화를 위한 선택적 기능이기 때문에 하둡이 상황에 따라 실행 여부와 횟수를 결정하기 때문이다.따라서 컴바이너가 여러 번 실행되거나 전혀 실행되지 않아도 리듀스의 최종 결과는 동일해야 하도록 설계되어야 합니다.
'책&스터디' 카테고리의 다른 글
| [책] - 데이터 분석을 위한 SQL 레시피 (0) | 2026.03.14 |
|---|---|
| [하둡 완벽 가이드] - PART01 3장 정리 (0) | 2026.02.13 |
| [하둡 완벽 가이드] - PART01 1장 정리 (0) | 2026.02.10 |
| [하둡 완벽 가이드] - PART2 09장 맵리듀스 기능 (0) | 2026.02.09 |
| [하둡 완벽 가이드] - PART2 08장 맵리듀스 타입과 포맷 (0) | 2026.02.08 |