Apache Spark란?
Aparche Spark 3.0의 구성
다양한 분산환경 위에서 애플리케이션 형태로 올라가서 돌아가는 분산 컴퓨팅 시스템
코어 엔진 위에 SQL, Streaming, Graph, ML 처리 기능등이 제공됩니다.

MapReduce vs. Spark
- 낮은 생산성(맵리듀스) ↔️ 판다스 데이터 프레임 API와 SparkSQL을 통해 구조화된 데이터의 생산성을 높임 (스파크)
- 2가지 오퍼레이션만 지원(배치 처리) ↔️ 다양한 방식의 컴퓨팅 지원(배치 데이터 처리, 스트림데이터 처리, SQL, 머신러닝, 그래프 분석)
- 튜닝/ 최적화가 쉽지 않음(데이터 분포가 균등하지 않은 경우) ➡️ Data Skew는 Spark에서도 여전히 발생
- 배치 작업 중심 (Low Latency가 아닌 Throughput에 초점)
- 데이터 모델과 오퍼레이션에 제약을 둠
- 하둡(Yarn)위에서만 동작 ↔️ 하둡(Yarn)외에 다양한 분산 컴퓨팅 환경 지원(K8s, Mesos)
- 모든 입출력을 디스크를 통해 이뤄짐 ↔️ 기본적으로 메모리 기반으로 메모리가 부족하면 디스크 사용(데이터 처리가 빠름)
Spark 모듈
Spark 데이터 구조(프로그래밍 API)
- RDD (Resilient Distributed Dataset)
- DataFrame & Dataset
- RDD
- 클러스터내 서버에 분산된 데이터를 지칭(변경 불가)
- 구조화된 데이터, 비구조화된 데이터 모두 지원
- 레코드별로 존재하지만 스키마가 존재하지 않음
- 일반 파이썬 데이터는 parallelize함수로 RDD로 변환(반대로 파이썬(Spark 프로그램(드라이버))으로 변환은 collect)
- 로우레벨 프로그래밍 API
- 로우레벨의 함수형 변환 지원(map, filter, flatMap 등등)
- DataFrame & Dataset
- 클러스터내 서버에 분산된 데이터를 지칭(변경 불가)
- RDD위에 만들어지는 하이레벨 프로그래밍 API
- 필드(컬럼)정보가 존재
- 타입정보를 지정하거나 추측하게 할 수 있음
- 컴파일/인터프린터 언어에 따라 파이썬(PySpark) 코딩인 경우 데이터프레임, 스칼라(Scala)나 자바(Java) 코딩은 Dataset을 사용
- 테이블과 같은 구조화된 데이터나 Join, Aggregation을 위해서는 Spark SQL을 사용합니다.
💡 Spark의 데이터 구조를 보면 변경 불가한 분산된 데이터기 때문에 파티션이 필요
Spark SQL
- 구조화된 데이터 처리를 SQL로 처리
- 데이터프레임을 테이블 처럼 SQL로 처리 가능
- 판다스도 동일 기능 제공
Spark ML
- 머신러닝 관련 알고리즘, 유틸리티로 구성된 라이브러리
- spark.mllib vs. spark.ml → spark.ml 사용! (spark.mllib는 더이상 지원x)
- 원스톱 ML 프레임워크
- 데이터 프레임과 SparkSQL 등으로 전처리
- Spark ML을 통해 모델 빌딩
- ML Pipeline을 통해 모델 빌딩 자동화
- MLflow
- 대용량 데이터 처리 가능 ↔︎ Sklearn과 같이 서버 한대 에서 돌아가는 파이썬 모듈과 비교
'데브코스 데이터엔지니어링' 카테고리의 다른 글
| [Spark] PySpark에서 Spark 세션 생성 (1) | 2024.12.31 |
|---|---|
| [Spark] YARN 기반 Spark Cluster 프로그램의 구조 (1) | 2024.12.31 |
| [Hadoop] 맵리듀스 프로그래밍 실행, hdfs 명령어 정리 (0) | 2024.12.31 |
| [Hadoop] 리눅스 서버에 의사분산 모드로 하둡 설치하기 (0) | 2024.12.31 |
| [Hadoop] 맵리듀스 프로그래밍 (0) | 2024.12.31 |