아파치 스파크 DStream Stateless Streaming
IT 위키
DStream 기반의 Stateless Streaming은 각 마이크로 배치에서 수신된 데이터를 이전 상태와 독립적으로 처리하는 방식을 의미한다. 즉, 각 배치 단위의 RDD는 다른 배치와 관계없이 독립적으로 처리되며, 누적 상태(state)를 유지하지 않는다.
1 개념[편집 | 원본 편집]
- Stateless란 이전 입력 데이터의 상태를 저장하지 않고 매 배치마다 새로 계산하는 방식
- 모든 계산은 현재 배치에서 들어온 RDD만을 기반으로 수행됨
- 예: 단어 수 세기, 필터링, 단순 매핑 등
2 구조[편집 | 원본 편집]
- 매 배치 간격마다 들어온 데이터를 RDD로 변환
- 변환된 RDD에 대해 map, reduceByKey, join 등의 연산 수행
- 이전 RDD의 결과나 상태는 저장되지 않음
3 예시[편집 | 원본 편집]
# 소켓에서 들어오는 텍스트 데이터 lines = ssc.socketTextStream("localhost", 9999) # 단어 분할 후 카운트 (Stateless 처리) word_counts = lines.flatMap(lambda line: line.split(" ")) \ .map(lambda word: (word, 1)) \ .reduceByKey(lambda a, b: a + b) word_counts.pprint()
4 특징[편집 | 원본 편집]
- 설계 및 디버깅이 상대적으로 간단
- 고속 처리에 유리하며, 체크포인팅 불필요
- 정확도보다는 처리 속도가 중요한 경우 적합
5 장점[편집 | 원본 편집]
- 상태 저장 비용과 복잡성 없음
- 장애 발생 시 RDD lineage로 복구 가능
- 클러스터 내 자원 효율성 향상
6 단점[편집 | 원본 편집]
- 누적 합계, 세션 추적, 히스토리 기반 분석 등은 구현 불가
- 데이터 간 관계가 있는 경우에는 사용이 어려움
- Stateful Streaming이 필요한 경우 제한적
7 stateless 연산 예시[편집 | 원본 편집]
- flatMap, map, filter
- reduceByKey, count, countByValue
- join (batch 간이 아닌 동시 배치 내에서만 가능)
8 같이 보기[편집 | 원본 편집]
9 참고 문헌[편집 | 원본 편집]
- https://spark.apache.org/docs/latest/streaming-programming-guide.html
- Spark: The Definitive Guide (O'Reilly)