아파치 스파크 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 참고 문헌[편집 | 원본 편집]