⭐ Spark Streaming
1. Spark Streaming 이란?
실시간 데이터 스트림 처리를 위한 Spark API
- Kafka, Kinesis, Flume, TCP 소켓 등의 다양한 소스에서 발생하는 데이터 처리 가능
- Join, Map, Reduce, Window와 같은 고급 함수 사용 가능
2. Spark Streaming 동작방식
- 데이터를 마이크로 배치로 처리
- 계속해서 위의 과정을 반복 (루프)
- 이렇게 읽은 데이터를 앞서 읽은 데이터에 머지
- 배치마다 데이터 위치 관리 (시작과 끝)
- Fault Tolerance와 데이터 재처리 관리 (실패시)
3. Spark Streaming의 내부 동작
- Spark Streaming은 실시간 입력 데이터 스트림을 배치로 나눈 다음
- Spark Engine에서 처리하여 최종 결과 스트림을 일괄적으로 생성
- Dstream과 Structured Streaming 두 종류가 존재
Dstream vs. Structured Streaming
DStream | Structured Streaming |
---|
RDD 기반 스트리밍 처리 | DataFrame 기반 스트리밍 처리 |
Spark SQL 엔진의 최적화 기능 사용불가 | Catalyst 기반 최적화 혜택을 가져감 |
이벤트 발생 시간 기반 처리 불가 | 이벤트 발생 시간 기반 처리 가능 |
개발이 중단된 상태 (RDD 기반 모두에 적용됨) | 계속해서 기능이 추가되고 있음 |
4. Source & Sink
소스와 싱크는 외부 시스템(소스)에서 스트리밍 데이터를 수집하고 처리된 데이터를 외부 시스템(싱크)으로 출력하는 것을 용이하게 하는 구성 요소
Source
- Kafka, Amazon Kinesis, Apache Flume, TCP/IP 소켓, HDFS, File 등을 Spark Structured Streaming에서 처리할 수 있도록 해줌
- Spark DataFrame과 비교하면 readStream을 사용하는 점이 다름
Sink
- Spark Structured Streaming에서 처리된 데이터를 외부 시스템이나 스토리지로 출력 가능하게 해줌
- Sink는 변환되거나 집계된 데이터가 어떻게 쓰이거나 소비되는지를 정의
- OutputMode : 현재 Micro Batch의 결과가 Sink에 어떻게 쓰일지 결정
⭐ Spark 환경 설정
1. Local Standalone Spark 소개
- Spark Cluster Manager로 local[n] 지정
- master를 local[n]으로 지정
- master는 클러스터 매니저를 지정하는데 사용
- 주로 개발이나 간단한 테스트 용도
- 하나의 JVM에서 모든 프로세스를 실행
- 하나의 Driver와 하나의 Executor가 실행됨
- Executor 안에 생성되는 쓰레드 수
- local : 하나의 쓰레드만 생성
- local[*] : 컴퓨터 CPU 수만큼 쓰레드 생성
2. Local Standalone Spark 설치
Spark 다운로드
https://spark.apache.org/downloads.html
세부 설치 방법 : Github 문서 참고 (윈도우)
https://github.com/keeyong/beginner-spark-programming-with-pyspark/blob/main/spark/local_installation_windows.md
⭐ WordCount 예제 프로그램
Spark 에서 제공해주는 예제 프로그램
https://spark.apache.org/docs/latest/streaming-programming-guide.html#a-quick-example