📗스파크를 왜 사용해야 하나
비동기 처리 등을 이용한 프로그래밍을 통해 아주 빠른 병렬처리가 가능한 시대이다. 그럼에도 불과하고 스파크를 이용해야 하는 이유가 뭘까
- 스파크 사용 이유 찾기
- 비동기 처리는 단일 머신이나 작은 규모의 데이터 처리에는 매우 유용하지만, Spark는 대규모 분산 데이터 처리, 최적화된 성능, fault tolerance, 스트리밍 처리 통합 등 다양한 장점을 제공하며, 빅데이터 환경에서 반드시 필요한 도구로 자리잡고 있다.
🔗[목차]
스파크의 역할이 중요한 이유
Spark를 대체하기 어려운 이유은 안정성 때문이다. 스파크는 대규모 분산 처리를 안정적으로 수행하는 프레임워크로서 다음과 같은 기능을 가진다.
자동 장애 복구 (Fault Tolerance)
- RDD (Resilient Distributed Dataset) 구조 덕분에 노드 장애 시에도 데이터가 유실되지 않음
- Checkpoints와 DAG (Directed Acyclic Graph) 기반 재시도 가능, 예를 들어, 작업 도중 노드가 죽어도 남은 노드들이 복구하여 작업을 이어감
분산 환경에서 자동으로 복구하려면 별도의 메커니즘 구현이 필요
분산 병렬 처리 최적화 (Data Shuffling & Partitioning)
- Spark는 데이터가 여러 노드에 자동으로 분산되어 처리됨
- Partitioning & Shuffling 최적화를 통해 불필요한 데이터 이동을 줄일 수 있음
클러스터 환경에서 데이터 이동 최적화까지 직접 구현해야 하므로 부담이 큼
확장성과 유연성 (Scale-out 지원)
- Spark는 수백~수천 개의 노드에서도 안정적으로 실행 가능
- YARN, Kubernetes, Mesos 등 다양한 클러스터 매니저와 연동 가능
클러스터 환경에서 확장성을 확보하려면 추가 개발이 필요, 예를 들어 데이터 이동, 노드 간 통신, 상태 관리 등을 직접 처리해야 함
다양한 스토리지 지원 (HDFS, S3, Delta Lake 등)
- Spark는 기본적으로 HDFS, S3, MinIO, Delta Lake, Iceberg 등 다양한 스토리지와 연동 가능
- S3A, Parquet, ORC 같은 최적화된 스토리지 포맷을 지원
다양한 데이터 소스를 자동으로 최적화하는 기능은 직접 구현해야 함
SQL 및 데이터 처리 API 지원
- Spark는 Spark SQL, DataFrame, Dataset API를 통해 복잡한 데이터 처리 가능
- 대규모 데이터 변환, 집계, 조인 등의 연산을 쉽게 수행 가능
완전한 분산 환경에서 최적화된 쿼리 실행을 제공하는 기능 구현이 쉽지 않다.