Hadoop 요약 정리

Posted by Albert 67Day 8Hour 23Min 19Sec ago [2025-12-01]

Hadoop은 대용량 데이터를 분산 처리하기 위한 오픈소스 프레임워크입니다. 구글의 논문(MapReduce, GFS)에서 영감을 받아 개발되었으며, 현재 Apache 재단에서 관리하고 있습니다.

핵심 개념

왜 Hadoop이 필요한가?

  • 일반 컴퓨터 한 대로는 처리할 수 없는 수십~수백 테라바이트 데이터 처리
  • 하드웨어 장애에 대한 자동 복구
  • 저렴한 비용으로 대규모 데이터 처리 인프라 구축

주요 구성 요소

1. HDFS (Hadoop Distributed File System)

데이터를 여러 서버에 분산 저장하는 파일 시스템입니다.

작동 원리:

  • NameNode: 파일 메타데이터 관리 (파일 위치, 크기 등)
  • DataNode: 실제 데이터 블록 저장
  • 파일을 128MB 또는 256MB 블록으로 나누어 저장
  • 각 블록을 3개 복사본으로 저장 (기본값)

예제 시나리오:

1TB 로그 파일을 HDFS에 저장하면:
→ 약 4,000개의 블록으로 분할 (256MB 기준)
→ 총 12,000개 블록이 클러스터에 분산 저장 (3배 복제)
→ 하나의 서버가 고장나도 데이터 손실 없음

2. MapReduce

대용량 데이터를 병렬로 처리하는 프로그래밍 모델입니다.

2단계 처리:

  • Map 단계: 데이터를 읽고 key-value 쌍으로 변환
  • Reduce 단계: 같은 key를 가진 값들을 집계

실전 예제

예제 1: 단어 개수 세기 (WordCount)

가장 기본적인 Hadoop 예제입니다.

입력 데이터:

file1.txt: "Hello World"
file2.txt: "Hello Hadoop"
file3.txt: "Hadoop World"

Map 단계:

Map(file1.txt) → (Hello, 1), (World, 1)
Map(file2.txt) → (Hello, 1), (Hadoop, 1)
Map(file3.txt) → (Hadoop, 1), (World, 1)

Shuffle & Sort:

Hello → [1, 1]
Hadoop → [1, 1]
World → [1, 1]

Reduce 단계:

Reduce(Hello) → (Hello, 2)
Reduce(Hadoop) → (Hadoop, 2)
Reduce(World) → (World, 2)

Java 코드 예제:

public class WordCount {
    public static class TokenizerMapper 
        extends Mapper<Object, Text, Text, IntWritable> {
        
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();
        
        public void map(Object key, Text value, Context context) 
            throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }
    
    public static class IntSumReducer 
        extends Reducer<Text, IntWritable, Text, IntWritable> {
        
        public void reduce(Text key, Iterable<IntWritable> values, 
            Context context) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            context.write(key, new IntWritable(sum));
        }
    }
}
```

''' 예제 2: 웹 로그 분석
실무에서 자주 사용되는 패턴입니다.

**입력 데이터 (access.log):**
```
192.168.1.1 - - [01/Dec/2025:10:00:00] "GET /index.html" 200
192.168.1.2 - - [01/Dec/2025:10:00:05] "GET /about.html" 200
192.168.1.1 - - [01/Dec/2025:10:00:10] "GET /contact.html" 404
```

**목표: 각 페이지별 방문 횟수 계산**

**Map 출력:**
```
/index.html → 1
/about.html → 1
/contact.html → 1
```

**Reduce 출력:**
```
/index.html → 1
/about.html → 1
/contact.html → 1
```

''' 예제 3: 온도 데이터 분석
연도별 최고 온도를 찾는 예제입니다.

**입력 데이터:**
```
2023,Seoul,35
2023,Busan,32
2024,Seoul,37
2024,Busan,33

Map 단계:

// (연도, 온도) 형태로 출력
map("2023,Seoul,35") → (2023, 35)
map("2023,Busan,32") → (2023, 32)
map("2024,Seoul,37") → (2024, 37)
map("2024,Busan,33") → (2024, 33)

Reduce 단계:

// 각 연도별 최고 온도 계산
reduce(2023, [35, 32]) → (2023, 35)
reduce(2024, [37, 33]) → (2024, 37)

Hadoop 실행 명령어

HDFS 기본 명령어:

' 파일 업로드
hdfs dfs -put local_file.txt /user/hadoop/

' 파일 목록 보기
hdfs dfs -ls /user/hadoop/

' 파일 다운로드
hdfs dfs -get /user/hadoop/file.txt ./

' 파일 삭제
hdfs dfs -rm /user/hadoop/file.txt

' 디렉토리 생성
hdfs dfs -mkdir /user/hadoop/data

MapReduce 작업 실행:

' Jar 파일 실행
hadoop jar wordcount.jar WordCount /input /output

' 작업 상태 확인
hadoop job -status job_123456

' 작업 종료
hadoop job -kill job_123456

Hadoop 생태계

Hadoop 주변에는 다양한 도구들이 있습니다:

Hive: SQL 쿼리로 데이터 분석

SELECT year, MAX(temperature) 
FROM weather_data 
GROUP BY year;
```

**Pig**: 스크립트 언어로 데이터 처리
```
data = LOAD '/data/logs' AS (ip, time, url);
grouped = GROUP data BY url;
counted = FOREACH grouped GENERATE group, COUNT(data);

HBase: NoSQL 데이터베이스

Spark: 메모리 기반 빠른 처리 (MapReduce보다 100배 빠름)

실무 활용 사례

  1. 로그 분석: 수백만 개의 서버 로그에서 에러 패턴 찾기
  2. 추천 시스템: 사용자 행동 데이터 분석하여 상품 추천
  3. 이미지 처리: 대량의 이미지 변환 및 분석
  4. 금융 분석: 거래 데이터에서 사기 패턴 탐지

장단점

장점:

  • 저렴한 하드웨어로 대규모 클러스터 구축
  • 자동 장애 복구
  • 수평 확장 용이 (서버만 추가하면 됨)

단점:

  • 실시간 처리에는 부적합 (배치 처리 중심)
  • 작은 파일 처리에 비효율적
  • 복잡한 설정과 관리

Hadoop은 빅데이터 처리의 기초가 되는 기술입니다. 최근에는 Spark 같은 더 빠른 기술들이 등장했지만, 여전히 많은 기업에서 대용량 데이터 저장과 배치 처리에 활용하고 있습니다.




LIST

Copyright © 2014 visionboy.me All Right Reserved.