Apache Spark란
<aside>
💡
데이터 센터나 클라우드에서 대규모 분산 데이터 처리를 하기 위해 설계된 통합형 엔진
</aside>
Apache Spark의 주요 설계 철학
1. 속도

- 디스크 I/O를 주로 사용하는 하둡 맵리듀스 처리 엔진과 달리, 중간 결과를 메모리에 유지하기 때문에 훨씬 더 빠른 속도로 같은 작업을 수행 가능.
- 질의 연산을 **방향성 비순환 그래프(DAG - Directed acyclic graph)**로 구성. (실행 계획 그래프)
- DAG의 스케쥴러와 질의 최적화 모듈은 효율적인 연산 그래프를 만들고, 각각의 태스크로 분해하여 클러스터의 워커 노드 위에서 병렬 실행될 수 있도록 함
2. 사용 편리성
- 클라이언트 입장에서, 스파크 코드가 단일 pc, 혹은 분산 환경에서 실행되는지 구별하기 어려울 정도로 추상화가 잘 되어 있음.
- Dataframe, Dataset과 같은 고수준 데이터 추상화 계층 아래에, **RDD (Resilient distributed dataset)**라 불리는 단순한 자료구조를 구축해 단순성을 실현함.
- 연산의 종류로, **트랜스포메이션(transformation)**과 **액션(action)**의 집합과 단순한 프로그래밍 모델을 제공
- 여러 프로그래밍 언어(Scala, Java, Python, Kotlin, R 등)을 제공하여, 사용자들이 각자 편한 언어로 스파크 애플리케이션을 작성할 수 있음.
3. 모듈성
- 스파크에 내장된 다양한 컴포넌트(SparkSQL, Structured Streaming, MLlib 등)들을 사용해, 다양한 타입의 워크로드에 적용이 가능함.
- 특정 워크로드를 처리하기 위해 하나의 통합된 처리 엔진을 가짐.
- 하둡 맵리듀스의 경우, 배치 워크로드에는 적합하나 SQL 질의, 스트리밍, 머신 러닝 등 다른 워크로드와 연계해 사용하기에는 어려움 존재.
- 이런 워크로드를 다루기 위해 엔지니어들은 하둡과 함께, Apache Hive (SQL 질의), Storm(스트리밍), Mahout(머신러닝) 등 다른 시스템과의 연동이 필요.
- 이들은 각각 자신만의 API, 설정 방식 등을 가지고 있기 때문에, 모듈성이 떨어지고 개발자가 배우기 어려움.
4. 확장성
- 저장과 연산을 모두 포함하는 하둡과는 달리, 스파크는 빠른 병렬 연산에 초점.
- 수많은 데이터 소스(하둡, 카산드라, Hbase, 몽고DB, hive, RDBMS, AWS S3 등) 로부터 데이터를 읽어 들일 수 있음.
- 여러 **파일 포맷(txt, csv, parquet, hdfs 등)**과 호환 가능.`