1. 하둡(Hadoop)
개념
- Hadoop은 대규모 데이터를 분산 처리하기 위한 오픈 소스 프레임워크입니다.
- 주로 정적인 데이터를 저장하고 처리하는 데 사용됩니다.
핵심 구성 요소
- HDFS(Hadoop Distributed File System)
- 데이터를 여러 노드에 분산 저장하는 파일 시스템.
- 데이터를 분산 저장하고 복제해 장애에도 안전한 데이터 관리 가능.
- MapReduce
- 데이터를 병렬로 처리하는 분산 처리 모델.
- Map 단계에서 데이터를 분리하고, Reduce 단계에서 결과를 집계.
특징
- 대규모 데이터 처리: 페타바이트(PB) 단위의 데이터를 처리.
- 저렴한 비용: 일반 하드웨어를 사용하여 대규모 데이터 관리.
- 내구성: 데이터 복제 기능으로 장애 복구 지원.
단점
- 느린 데이터 처리 속도 (디스크 기반 처리).
- 실시간 데이터 처리 어려움.
2. 스파크(Spark)
개념
- Apache Spark는 빠르고 일반적인 대규모 데이터 처리 프레임워크로, Hadoop보다 더 빠르고 유연한 데이터 처리를 제공합니다.
- 특히 메모리 기반 처리로 성능이 뛰어납니다.
주요 모듈
- Spark Core
- 분산 데이터 처리를 담당하는 핵심 엔진.
- Spark SQL
- SQL 기반으로 데이터를 처리할 수 있는 모듈.
- Spark Streaming
- 실시간 스트리밍 데이터 처리.
- MLlib
- 기계 학습 라이브러리.
- GraphX
- 그래프 데이터 처리.
특징
- 빠른 처리 속도: 메모리에서 데이터를 처리하기 때문에 Hadoop 대비 최대 100배 빠른 속도.
- 유연성: 배치 처리, 스트리밍, 머신러닝, 그래프 처리까지 지원.
- Java, Scala, Python 등 다양한 언어 지원.
단점
- 메모리를 많이 사용하는 작업에 비용 부담이 큼.
- 비교적 높은 학습 곡선.
Hadoop과 Spark의 비교
특징HadoopSpark
데이터 처리 방식 | 디스크 기반 처리 (MapReduce) | 메모리 기반 처리 |
속도 | 느림 | 빠름 |
유스케이스 | 대규모 배치 처리 | 실시간 처리, 머신러닝 등 |
코드 복잡도 | 상대적으로 복잡 | 비교적 단순 |
언어 지원 | Java 중심 | Java, Scala, Python 등 다중 언어 지원 |
Spark 사용 예시
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.SparkSession;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SparkController {
private final SparkSession sparkSession;
public SparkController() {
this.sparkSession = SparkSession.builder()
.appName("Spring Boot Spark Integration")
.master("local[*]")
.getOrCreate();
}
@GetMapping("/process-data")
public String processData() {
Dataset<String> data = sparkSession.read().textFile("data/input.txt");
long lineCount = data.count();
return "Number of lines: " + lineCount;
}
}
Hadoop 예시
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
@RestController
public class HadoopController {
@GetMapping("/read-hdfs")
public String readHDFS() throws Exception {
Configuration config = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://localhost:9000"), config);
BufferedReader br = new BufferedReader(new InputStreamReader(fs.open(new Path("/data/input.txt"))));
StringBuilder result = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
result.append(line).append("\n");
}
br.close();
return result.toString();
}
}
결론
- Hadoop은 대규모 데이터를 안정적으로 저장 및 배치 처리에 적합.
- Spark는 실시간 데이터 처리, 머신러닝 등 빠른 데이터 처리가 필요한 경우에 적합.
- Java와 Spring은 이 두 기술과 쉽게 통합되어 다양한 데이터 처리 애플리케이션을 만들 수 있습니다.