아파치 스파크 DStream Stateful Streaming
IT 위키
DStream 기반의 Stateful Streaming은 과거 배치의 처리 결과 또는 상태(state)를 현재 배치 처리에 활용하는 방식이다. Stateless Streaming과 달리, 데이터 간의 시간적 연관성이나 누적 계산이 필요한 경우에 사용된다. 세션 추적, 누적 카운트, 상태 기반 경고 등에 적합하다.
1 개념[편집 | 원본 편집]
- 상태란 키(key)별로 유지되는 누적 값, 카운트, 집계 정보 등을 의미
- 배치 간에 상태가 이어지므로 데이터 처리 결과가 시간 축을 따라 누적됨
- 내부적으로 각 키에 대한 상태를 메모리에서 유지하거나 체크포인팅을 통해 디스크에 저장
2 주요 연산[편집 | 원본 편집]
2.1 updateStateByKey[편집 | 원본 편집]
- 가장 대표적인 상태 유지 연산
- 키별로 상태를 갱신함
- 함수 형식: `(new_values, previous_state) => updated_state`
def update_func(new_values, running_count): return sum(new_values) + (running_count or 0) word_counts = words.map(lambda w: (w, 1)) \ .updateStateByKey(update_func)
2.2 mapWithState[편집 | 원본 편집]
3 상태 저장[편집 | 원본 편집]
- 상태는 Executor의 메모리에 저장되며, 장애 시 복구를 위해 체크포인팅 필요
- 체크포인트 디렉토리는 HDFS 등 외부 안정 저장소로 지정해야 함
4 예시[편집 | 원본 편집]
- 단어별 누적 출현 횟수 계산
- 사용자별 로그인 세션 추적
- 센서별 누적 온도 변화 모니터링
- 주문 상태별 누적 금액 계산
5 장점[편집 | 원본 편집]
- 시간에 따른 상태 변화 추적 가능
- 이벤트 기반 이상 감지 및 경고 처리 가능
- 키별 누적 분석, 세션 추적에 필수적
6 단점[편집 | 원본 편집]
- 상태 유지를 위한 메모리 비용 증가
- 장애 복구를 위해 체크포인팅 필수
- 클러스터 자원 소모 증가
7 같이 보기[편집 | 원본 편집]
8 참고 문헌[편집 | 원본 편집]
- https://spark.apache.org/docs/latest/streaming-programming-guide.html#stateful-operations
- Spark: The Definitive Guide (O'Reilly)