
클라우드 스토리지(S3/ADLS/GCS 등)에 파일이 계속 쌓이는 환경이라면, “신규 파일만 증분으로 읽어서 Delta로 적재”하는 패턴이 거의 표준입니다.
Databricks Auto Loader는 이런 상황을 위해 만들어진 기능으로, 클라우드 스토리지에 새 파일이 도착할 때마다 증분(incremental) + 효율적으로 처리합니다. Source
파일 이벤트 기반(file events)으로 새 파일을 감지하는 개념도 Source
Auto Loader는 클라우드 스토리지에 새 파일이 도착하는 대로 파일을 증분 처리하는 기능입니다. Source
구현 관점에서 핵심은 Auto Loader가 Structured Streaming 소스로 cloudFiles 를 제공한다는 점입니다. “입력 디렉터리 경로를 주면 새 파일을 자동으로 처리”합니다. Source
그리고 Auto Loader는 체크포인트 위치에 RocksDB 기반 키-값 스토어로 발견된 파일 메타데이터를 저장해서, 장애가 나도 exactly-once(정확히 한 번) 처리를 보장하도록 설계되어 있습니다. Source
Databricks는 “클라우드 오브젝트 스토리지 또는 Unity Catalog Volume의 파일 기반 적재”에서 대부분의 경우 Auto Loader를 추천합니다.
특히 파이프라인(Lakeflow Spark Declarative Pipelines)에서도 Auto Loader를 권장하며, “증분 + 멱등(idempotent) 적재”에 맞춰 설계됐다고 명시합니다. Source
Auto Loader는 아래 소스에서 파일을 로딩할 수 있습니다. Source
s3://)abfss://)gs://)wasbs://)dbfs:/)다음 포맷을 ingest 할 수 있습니다. Source
Auto Loader의 기본 형태는 아래처럼 “읽기(readStream)에서 cloudFiles”를 사용합니다.
Databricks의 “공통 패턴” 문서에 나오는 대표 스니펫 흐름은 다음과 같습니다. Source
(
spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaLocation", "<path-to-schema-location>")
.load("<path-to-source-data>")
.writeStream
.option("mergeSchema", "true")
.option("checkpointLocation", "<path-to-checkpoint>")
.start("<path_to_target>")
)
포인트는 2개입니다.
cloudFiles.schemaLocation: 스키마 추론/진화 메타데이터 저장소 (Auto Loader가 _schemas 디렉터리에 관리) SourcecheckpointLocation: exactly-once를 위한 상태 저장 위치(RocksDB 포함) SourceAuto Loader는 최초 스키마 추론 시 처음 발견한 50GB 또는 1000개 파일을 샘플링하고(둘 중 먼저 도달한 기준), 결과를 cloudFiles.schemaLocation 아래 _schemas에 저장합니다. Source
새 컬럼이 들어오면 UnknownFieldException으로 스트림이 실패할 수 있고, 실패하기 전에 최신 마이크로배치를 기반으로 스키마 위치를 업데이트(새 컬럼을 스키마 끝에 병합)하는 동작이 문서에 설명돼 있습니다. Source
그래서 운영에서는 “스키마 변경으로 실패하면 자동 재시작”을 잡/워크플로우 레벨에서 구성하는 것을 권장합니다. Source
Auto Loader는 스키마와 맞지 않는 데이터를 버리지 않도록 _rescued_data 컬럼(기본명)을 사용합니다. 이 컬럼에는 다음 이유로 파싱되지 않은 데이터가 JSON blob 형태로 들어갑니다. Source
Auto Loader는 새 파일을 찾는 방식이 두 가지입니다. Source
File events → 큐/알림 기반으로 새 파일을 감지하는 구성 개념 Source
문서 기반으로 “실제로 장애/비용/누락을 줄이는” 포인트만 추려서 체크리스트로 정리합니다.
Databricks는 체크포인트 위치에 lifecycle policy가 적용되어 파일이 정리되면 스트림 상태가 손상(corrupted) 될 수 있다고 경고합니다. Source
Auto Loader는 file events를 사용하면 디렉터리 listing 비용을 줄일 수 있고, 운영 효율이 좋아진다고 안내합니다. Source
낮은 지연(latency)이 꼭 필요하지 않다면, Databricks는 Lakeflow Jobs로 Trigger.AvailableNow를 써서 배치 잡처럼 실행하는 방식을 권장합니다. Source
directory listing 기반에서 소스 폴더에 파일이 계속 쌓이면 탐색 비용이 증가하므로, 처리 완료 파일을 옮기거나 삭제하는 cloudFiles.cleanSource 사용을 추천합니다. Source
패턴 문서에서 cloudFiles.schemaEvolutionMode = rescue 예시를 제공합니다. Source
(
spark.readStream.format("cloudFiles")
.schema(expected_schema)
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaEvolutionMode", "rescue")
.load("<path-to-source-data>")
.writeStream
.option("checkpointLocation", "<path-to-checkpoint>")
.start("<path_to_target>")
)
이 경우 스키마에 없는 데이터/타입 불일치 등은 _rescued_data로 들어가 “누락 없는 적재”에 유리합니다. Source
Auto Loader는 수십억 파일 처리(백필/마이그레이션)와 시간당 수백만 파일 수준의 근실시간 적재까지 확장 가능하다고 설명합니다. Source
_rescued_data