본문 바로가기
Big Data/Apache Spark

[Spark] Spark Streaming 실행 방식

by seaweed_one 2023. 1. 8.
728x90

안녕하세요.

이번 포스팅에서는 스파크 스트리밍의 실행 방식에 대하여 알아보겠습니다.

스파크 스트리밍의 개념에 대하여 궁금하신 분들은 아래 포스팅을 참고 바랍니다.

 

Spark Streaming 이란?

Spark Streaming 은 실시간으로 들어오는 데이터 처리를 위한 모듈로써 빅데이터가 만족해야하는 세 가지 요소 (*3V)중 속도(Velocity)에 대한 니즈 충족을 위해 등장했습니다. 스파크 스트리밍을 통하

seaweed-one.tistory.com

 

스파크 스트리밍은 어떤 과정을 거쳐 실행될까요?

스파크 스트리밍은 각 입력 소스마다 Receiver를 실행합니다.

Receiver란 애플리케이션의 익스큐터들 내에서데이터를 모으고 RDD에 저장하는 테스크인데요.

Receiver는 건별로 들어오는 데이터를 받아 Spark 메모리에 저장하며 데이터를 모아서 처리할 수 있도록 기능합니다.

또한 장애대응을 위해 데이터를 다른 익스큐터에 복제합니다.

 

다음 단계는 Spark Job 실행입니다.

드라이버 프로그램의 StreamingContext는 데이터 처리를 위해 주기적으로 Spark Job을 실행하고 이전 단계의 RDD 와 연결합니다.

여기서 Spark Job은 무엇일까요?

Job은 한 개 이상의 스테이지로 구성됩니다.

Job을 구성하는 Stage중 가장 최종 Stage는 여러개의 ResultTask로 이루어집니다.

최종 Stage 이전 Stage 들은 ShuffleMapTasks로 구성되며 ShuffleMapTask는 Task를 실행 시킨 후 Task의 결과를 여러 개의 Bucket으로 나눕니다.

다음 Task에서 사용하기 위해서이죠.

ResultTask는 Task를 실행시킨 후 Task의 결과를 Driver Application으로 전송합니다.

조금 더 이해를 쉽게 해드리자면  ShuffleMapTask는 map, reduce 등의 함수에 해당, ResultTask는 우리가 호출한 Action에 해당 한다고 생각하시면 됩니다.

 

Spark Streaming은 Receiver를 이용해 데이터를 복제하기 때문에 작업 노드 장애에 대응이 가능합니다.

하지만 리니지를 이용한 재연산은 프로그램의 시작단계부터 이루어져 시간이 오래 걸리기 때문에 checkPointing이라는 매커니즘을 이용하는데요.

파일시스템에 주기적으로 상태를 저장하는 것이죠.

대개는 5~10개의 배치 묶음마다 체크포인팅을 설정하고 유실된 데이터를 복구해야할 상황이 오면 가장 최근 체크포인트로 돌아가게 됩니다.

 

쿼리 정의 시 체크포인트 위치를 지정할 경우 모든 진행 정보(각 트리거에서 진행된 오프셋의 범위)와 실행 중인 집계를 지정된 체크포인트 위치에 저장합니다.

체크포인트는 아래와 같이 쿼리 시작 시 DataStreamWriter의 옵션으로 지정 가능합니다.

aggDF
  .writeStream
  .outputMode("complete")
  .option("checkpointLocation", "path/to/HDFS/dir")
  .format("memory")
  .start()

 

 

 

728x90