본문 바로가기
개발

하둡(Hadoop)과 스파크(Spark)

by eun2ce 2024. 11. 26.

 

1. 하둡(Hadoop)

개념

  • Hadoop은 대규모 데이터를 분산 처리하기 위한 오픈 소스 프레임워크입니다.
  • 주로 정적인 데이터를 저장하고 처리하는 데 사용됩니다.

핵심 구성 요소

  1. HDFS(Hadoop Distributed File System)
    • 데이터를 여러 노드에 분산 저장하는 파일 시스템.
    • 데이터를 분산 저장하고 복제해 장애에도 안전한 데이터 관리 가능.
  2. MapReduce
    • 데이터를 병렬로 처리하는 분산 처리 모델.
    • Map 단계에서 데이터를 분리하고, Reduce 단계에서 결과를 집계.

특징

  • 대규모 데이터 처리: 페타바이트(PB) 단위의 데이터를 처리.
  • 저렴한 비용: 일반 하드웨어를 사용하여 대규모 데이터 관리.
  • 내구성: 데이터 복제 기능으로 장애 복구 지원.

단점

  • 느린 데이터 처리 속도 (디스크 기반 처리).
  • 실시간 데이터 처리 어려움.

2. 스파크(Spark)

개념

  • Apache Spark는 빠르고 일반적인 대규모 데이터 처리 프레임워크로, Hadoop보다 더 빠르고 유연한 데이터 처리를 제공합니다.
  • 특히 메모리 기반 처리로 성능이 뛰어납니다.

주요 모듈

  1. Spark Core
    • 분산 데이터 처리를 담당하는 핵심 엔진.
  2. Spark SQL
    • SQL 기반으로 데이터를 처리할 수 있는 모듈.
  3. Spark Streaming
    • 실시간 스트리밍 데이터 처리.
  4. MLlib
    • 기계 학습 라이브러리.
  5. 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은 이 두 기술과 쉽게 통합되어 다양한 데이터 처리 애플리케이션을 만들 수 있습니다.