🍏 운영용 애플리케이션 실행하기
spark-submit
명령을 사용해 대화형 셸에서 개발한 프로그램을 운영용 애플리케이션으로 쉽게 전환할 수 있다.
spark-submit
: 애플리케이션 코드를 클러스터에 전송해 실행, 실행에 필요한 자원과 실행 방식 등 다양한 옵션 지정 가능
- 클러스터에 제출된 애플리케이션은 작업이 종료되거나 에러가 발생할 때까지 실행된다.
🌀 Dataset: 타입 안정성을 제공하는 구조적 API
- 자바와 스칼라의 정적 데이터 타입에 맞는 정적 타입 코드를 지원하기 위해 고안된 구조적 API
- 파이썬과 R에서는 사용 불가능
- Row 타입의 객체로 구성된 분산 컬렉션
- 타입 안정성 지원
🐳 구조적 스트리밍
- 스트림 처리용 고수준 API
- 구조적 스트리밍을 사용하여 구조적 API로 개발된 배치 모드의 연산을 스트리밍 방식으로 실행할 수 있으며, 지연 시간을 줄이고 증분 처리할 수 있다.
- 배치 처리용 코드를 일부 수정하여 스트리밍 처리를 수행하고 값을 빠르게 얻을 수 있다는 장점이 있다.
예)
streamingDataFrame = spark.readStream ...
purchaseByCustomerPerHour = streamingDataFrame.selectExpr(...
purchaseByCustomerPerHour.writeStream ...
** 윈도우 함수: 간격을 통해 처리 요건을 명시할 수 있어 날짜와 타임스탬프 처리에 유용
⚙️ 머신러닝과 고급 분석
- 스파크는 내장된 머신러닝 알고리즘 라이브러리인 MLlib을 사용해 대규머 머신러닝을 수행할 수 있다.
- 전처리, 멍잉, 모델 학습, 예측, 분류, 회귀, 군집화, 딥러닝 등
🐻 저수준 API
- 스파크는 RDD를 통해 자바와 파이썬 객체를 다루는 데 필요한 저수준 API를 제공한다.
- 스파크의 거의 모든 기능은 RDD 기반
- 대부분 구조적 API를 사용하는 것이 좋지만, RDD를 이용해 파티션과 같은 물리적 실행 특성을 결정할 수 있어 DataFrame보다 더 세미한 제어가 가능하다.
- 드라이버 시스템의 메모리에 저장된 원시 데이터를 병렬처리 하는 데 RDD를 사용할 수 있다.
- 최신 버전의 스파크에서는 RDD를 사용하지 않지만, 비정형 데이터나 원시 데이터 처리에는 사용
🐻❄️ RDD(Resillient Distributed Data)란?
- 스파크에 도입되었던 가장 기초적인 데이터 구조
- "회복력 있는 분산 데이터"
- RDD는 불변의 특성을 갖는다. 따라서 특정 동작을 위해서는 기존 RDD를 변형한 새로운 RDD가 생성된다. → 스파크 내 연산에서 수많은 RDD들 생성됨 (Lineage)
- RDD Lineage는 DAG(Directed Acyclic Graph)의 형태를 가진다. DAG에 의해 특정 RDD 관련 정보가 메모리에서 유실되었을 경우, 그래프를 복기하여 다시 계산하고 자동 복구할 수 있다. → Fault-tolerant
- 동작 원리
- Transformation 기존 RDD에서 새로운 RDD 생성 (실제 연산 작업 수행 X) 리턴값이 RDD
- Action 기록된 모든 작업을 실제 수행 리턴값이 데이터 또는 실행 결과
🍳 SparkR
- 스파크를 R 언어로 사용하기 위한 기능
- 파이썬 API와 매우 유사
[출처] 스파크 완벽 가이드 (빌 체임버스, 마테이 자하리아 지음)