Databricks 데이터 엔지니어

Databricks 데이터 엔지니어 6강

[Associate] 증분 처리 — Structured Streaming·Auto Loader

이번 강은 계속 도착하는 데이터를 다루는 증분 처리 — Structured Streaming과 Auto Loader를 다룬다.

Databricks 6강 개념도

배치는 매번 전체를 다시 읽지만, 증분 처리는 새로 들어온 부분만 처리한다. 메달리온 아키텍처의 Bronze 적재가 대표 사례다.

이 강의 목표는 다음과 같다.

  • Structured Streaming의 기본 모델을 이해한다.
  • checkpoint가 왜 필요한지 안다.
  • Auto Loader로 새 파일을 증분 적재한다.

1. Structured Streaming

스트림을 "끝없이 커지는 테이블"로 다룬다. readStream으로 읽고 writeStream으로 쓴다.

(spark.readStream.table("bronze")
   .writeStream
   .option("checkpointLocation", ckpt)
   .table("silver"))

2. checkpoint와 exactly-once

  • checkpoint: 어디까지 처리했는지 위치와 상태를 저장한다.
  • 덕분에 재시작해도 중복·누락 없이 정확히 한 번(exactly-once) 이어서 처리한다.
  • checkpoint 위치는 스트림마다 고유해야 한다.

3. Trigger 모드

Trigger 동작
processingTime='30 seconds' 30초마다 마이크로배치
availableNow=True 지금 쌓인 것만 처리하고 종료(배치식)
(기본) 가능한 한 빨리 연속 처리

4. Auto Loader

cloudFiles 소스로 스토리지에 새로 도착한 파일만 증분 감지해 읽는다. 파일 목록을 매번 스캔하지 않고 효율적으로 추적한다.

(spark.readStream.format("cloudFiles")
   .option("cloudFiles.format", "json").load(src)
   .writeStream.option("checkpointLocation", ckpt).table("bronze"))

스키마 추론·진화(schema evolution)도 지원해 새 컬럼이 생겨도 대응한다.

예제

예제) S3에 로그 파일이 계속 쌓인다. 이미 처리한 파일은 다시 읽지 않고 새 파일만 Bronze에 넣으려면?

해설) Auto Loader(format("cloudFiles"))로 읽고 checkpointLocation을 지정한다. Auto Loader가 도착한 파일을 추적하므로 이미 처리한 파일은 건너뛰고 새 파일만 증분 적재한다. checkpoint 덕에 재시작해도 이어서 처리한다.

샘플 문제

문) 스트리밍 쿼리에서 checkpointLocation의 역할은?

  • (A) 데이터를 압축한다
  • (B) 처리 진행 위치·상태를 저장해 재시작 시 정확히 한 번 처리를 보장한다
  • (C) 파일을 병합한다
  • (D) 스키마를 강제한다

정답: (B). checkpoint는 오프셋·상태를 저장해 장애 후 재시작에도 중복·누락 없이 이어서 처리하게 한다.

정리

  • Structured Streaming은 스트림을 무한 테이블로 보고 read/writeStream으로 처리.
  • checkpoint가 진행 위치를 저장해 exactly-once와 재시작을 보장.
  • Trigger로 마이크로배치·availableNow·연속을 고른다.
  • Auto Loader(cloudFiles)는 새 파일만 증분 감지·적재한다.

다음 강에서는 이를 선언형으로 감싸는 Delta Live Tables를 다룬다.

댓글 0