Spark

[Spark] 스파크(Spark) - (1)

BlueNoa 2026. 1. 7. 20:55
728x90
반응형

[목차]


 

• Spark란?

아파치 스파크(Spark)는 하둡의 맵리듀스를 빠르게 대체하는 빅데이터 처리 플랫폼이다.

아파치 하둡분산 컴퓨팅용 자바 기반 오픈소스 프레임워크하둡 분산 파일 시스템(Hadoop Distributed File System, HDFS)과 맵리듀스 처리 엔진으로 구성된다.

 

*맵리듀스란?

더보기

*맵리듀스 : 큰 문제는 작게 나누고(Map), 결과를 다시 합치는(Reduce) 방식으로 맵 단계에서는 입력 데이터를 (키-값) 쌍으로 변환하고 셔플 및 정렬을 통해 같은 키(Key)를 가진 것끼리 모아서 리듀스로 전달한다. 이후 중복된 키를 합치고 값들을 집계하여 최종 결과물을 만드는 것(Reduce)

 

예를 들어)

사과, 바나나, 사과 → Map : (사과, 1), (바나나, 1), (사과, 1)  Suffle : 사과 : [1, 1], 바나나 [1]  Reduce : 사과: 2, 바나나: 1

스파크는 메모리를 보다 효율적으로 활용해 하둡의 맵리듀스 보다 10~100배는 더 빠른 속도로 같은 작업을 수행할 수 있다.

스파크의 컬렉션(자료 구조, 예로 List, Dict 또는 Scala의 Seq 등)은 로컬에서 자바와 파이썬의 자료 구조를 사용하는 느낌을 주지만 실제로는 여러 노드(네트워크에 연결된 개별 컴퓨터)에 분산된 데이터를 참조한다.

 

728x90

 

• 스파크의 장/단점

압도적인 속도

위에서도 언급했듯 데이터를 디스크에 매번 I/O 하여 저장하는 맵리듀스와 달리, 데이터를 메모리(RAM)에 올려두고 처리하기 때문에 맵리듀스보다 최대 100배 빠르다. 메모리가 부족하여 디스크를 사용하더라도 약 10배 정도의 속도를 낼 수 있으며 같은 데이터를 여러 번 반복해서 계산해야 하는 머신러닝 알고리즘에서 좋은 성능을 발휘한다.

 

통합 엔진(Unified Engine)

하나의 프레임워크 내에서 SQL, 실시간 스트리밍, 머신러닝, 그래프 분석을 모두 처리할 수 있다.

여러 도구를 배울 필요 없이 스파크 하나로 데이터 파이프라인 전체를 구축할 수 있어 개발 효율이 매우 좋다.

 

사용 편의성

Java, Scala, Python(PySpark), 최근에는 R 언어까지 지원하기 시작했다.


높은 메모리 요구량과 비용

인메모리 방식이다 보니 대용량 데이터를 처리하려면 그만큼 많은 양의 RAM이 필요로 하다.

구축 비용이 하둡보다 비쌀 수 있으며, 메모리 관리를 잘못하면 OOM(Out Of Memory) 에러로 시스템이 멈추는 경우가 있다.

 

실시간 처리의 미세한 한계

스파크는 분산 아키텍처 때문에 처리 사간에 약간의 오버헤드(Overhead, 별도의 컴퓨팅 리소스)가 필연적으로 발생한다.

0.1초 미만의 초저지연이 필수적인 서비스에서는 Apache Flink 같은 전문 스트리밍 엔진에 비해 불리하다.

즉, 온라인 트랜잭션 처리(OnLine Transaction Processing, OLTP) 애플리케이션을 염두하지 않았기 때문에 대량의 원자성(Atomicity) 트랜잭션을 빠르게 처리해야 하는 작업에는 스파크는 적합하지 않다.

반면 일괄 처리 작업이나 데이터 마이닝 같은 온라인 분석 처리(OnLine Analytical Processing, OLAP)에 적합하다.

 

복잡한 튜닝

설정해야 할 파라미터가 매우 많다. (파티션의 개수, 메모리 할당 비율, 직렬화 방식 등)

 


• 스파크의 주요 특징

데이터 분산(Data Distribution)

스파크는 거대한 데이터를 파티션(Partition)이라는 작은 단위로 쪼개어 클러스터 내의 여러 노드에 나누어 저장한다.

여러 노드에 흩어져 있는 데이터 조각들을 마치 하나의 리스트처럼 다룰 수 있게 해주는 것이 RDD(분산 컬렉션)이다.

사용자는 데이터가 어디에 있는지 신경 쓰지 않고 하나의 데이터 셋처럼 사용할 수 있다.

*RDD에 대한 설명은 다음 내용(2)에 한다.

 

병렬 처리(Parallel Processing)

데이터가 여러 노드에 있기 때문에, 각 노드는 자신이 가진 데이터 조각(파티션)을 동시에 계산할 수 있다.

 

장애 내성(Fault Tolerance)

분산 환경에서 특정 노드가에 에러가 발생하였다 가정하면 스파크는 이를 계보(Lineage)라는 개념으로 해결한다.

계보란 데이터가 만들어진 과정을 기록하여 파일을 복원하는 것이 아닌 파일을 만드는 레시피를 이용해 복구하는 개념이다.

즉, 특정 노드가 죽어서 파티션이 유실되면, 스파크는 기록된 계보를 통해 유실된 조각만 다시 계산하여 복구한다.

이를 RDD의 탄력성이라 한다.

 

 

 

 

728x90
반응형