Spark는 대규모 데이터 처리를 빠르고 효율적으로 수행할 수 있는 오픈 소스 분산 처리 시스템이다.
1) 빠른 속도: 메모리 기반 연산으로 디스크 I/O를 최소화해 빠른 데이터 처리 가능
2) 다양한 언어 지원: Python, Scala, Java, R 등 다수의 언어를 지원
3) 유연성: 배치, 스트리밍, SQL, 머신러닝, 그래프 처리 등 다양한 워크로드 지원
4) 확장성: 클러스터 환경에서 대규모 데이터 처리 가능
1) Driver:
애플리케이션을 실행하고, 작업(Job)을 나누어 Executor에 분배하는 역할
2) Executor:
각 노드에서 할당된 작업(Task)을 수행하고 결과를 반환하는 역할
3) Cluster Manager:
자원을 관리하며, Spark가 클러스터에 접근할 수 있도록 지원 (예: YARN, Mesos, Standalone)
RDD는 Spark의 핵심 데이터 구조로, 불변(Immutable)하며 분산된 데이터 셋을 처리하는 데 최적화된 구조다.
1) 불변성: 생성된 RDD는 변경할 수 없음. 새로운 RDD를 생성해야 함
2) 분산성: 데이터를 클러스터 노드에 분산 저장 및 처리
3) 내결함성: 노드 장애 발생 시 데이터 복구 가능
기존 데이터에서 생성:
파일 시스템(HDFS, 로컬 파일)이나 데이터베이스에서 데이터를 읽어 RDD 생성
컬렉션에서 생성:
Python이나 Scala의 리스트 등 컬렉션을 RDD로 변환
Transformation: 기존 RDD에서 새로운 RDD를 생성하는 연산
map(), filter(), flatMap() 등이 대표적
Action: RDD에서 결과를 반환하거나 출력하는 연산
collect(), count(), first() 등이 대표적
Batch Processing: 대량의 정적 데이터를 한 번에 처리
Stream Processing: 실시간 데이터 스트림을 지속적으로 처리