자동 로더 디렉터리 나열 모드란?

자동 로더는 기본적으로 디렉터리 목록 모드를 사용합니다. 디렉터리 목록 모드에서 자동 로더는 입력 디렉터리를 나열하여 새 파일을 식별합니다. 디렉터리 목록 모드를 사용하면 클라우드 스토리지의 데이터에 대한 액세스 이외의 권한 구성 없이 자동 로더 스트림을 빠르게 시작할 수 있습니다.

디렉터리 목록 모드에서 최상의 성능을 위해 Databricks Runtime 9.1 이상을 사용합니다. 이 문서에서는 디렉터리 목록 모드의 기본 기능과 파일의 어휘 순서에 따른 최적화에 대해 설명합니다.

디렉터리 목록 모드는 어떻게 작동하나요?

Azure Databricks는 자동 로더가 다른 Apache Spark 옵션보다 클라우드 스토리지에서 파일을 보다 효율적으로 검색할 수 있도록 디렉터리 목록 모드를 최적화했습니다.

예를 들어, 5분마다 /some/path/YYYY/MM/DD/HH/fileName에 파일을 업로드하는 경우 이러한 디렉터리의 모든 파일을 찾기 위해 Apache Spark 파일 원본은 모든 하위 디렉터리를 병렬로 나열합니다. 다음 알고리즘은 개체 스토리지에 대한 총 API LIST 디렉터리 호출 수를 예측합니다.

1(기본 디렉터리) + 365(일당) * 24(시간당) = 8761 호출

자동 로더는 스토리지에서 평면화된 응답을 수신하여 API 호출 수를 스토리지의 파일 수로 나눈 각 API 호출에서 반환된 결과 수로 줄이므로 클라우드 비용이 크게 절감됩니다. 다음 표에서는 공통 개체 스토리지에 대한 각 API 호출에서 반환되는 파일 수를 보여 줍니다.

호출당 반환된 결과 개체 스토리지
1000 S3
5000 ADLS Gen2
1024 GCS

증분 목록(사용되지 않음)

Important

이 기능은 더 이상 사용되지 않습니다. Databricks는 증분 목록 대신 파일 알림 모드를 사용하는 것이 좋습니다.

참고 항목

Databricks Runtime 9.1 LTS 이상에서 사용할 수 있습니다.

증분 목록은 Azure Data Lake Storage Gen2(abfss://), S3(s3://) 및 GCS(gs://)에 사용할 수 있습니다.

사전순으로 생성된 파일의 경우, 자동 로더는 어휘 파일 순서 및 최적화된 목록 API를 활용하여 전체 디렉터리의 내용을 나열하는 대신 최근에 수집된 파일에서 나열함으로써 디렉터리 나열의 효율성을 개선시킬 수 있습니다.

기본적으로 자동 로더는 이전에 완료된 디렉터리 목록의 파일 경로를 확인하고 비교하여 주어진 디렉터리가 증분 목록에 적용 가능한지 여부를 자동으로 검색합니다. auto 모드에서 데이터의 최종 완전성을 보장하기 위해 자동 로더는 7개의 연속 증분 목록을 완료한 후 전체 디렉터리 목록을 자동으로 트리거합니다. 지정된 간격으로 비동기 백필을 트리거하도록 cloudFiles.backfillInterval을 설정하여 전체 디렉터리 목록의 빈도를 제어할 수 있습니다.

파일의 어휘 순서 지정

어휘 순서로 파일을 정렬하려면 업로드되는 새 파일에 기존 파일보다 어휘 순서로 더 큰 접두사가 있어야 합니다. 다음은 어휘 순서 디렉터리의 몇 가지 예입니다.

버전이 지정된 파일

Delta Lake는 사전 순서로 트랜잭션 로그를 테이블에 커밋합니다.

<path-to-table>/_delta_log/00000000000000000000.json
<path-to-table>/_delta_log/00000000000000000001.json <- guaranteed to be written after version 0
<path-to-table>/_delta_log/00000000000000000002.json <- guaranteed to be written after version 1
...

AWS DMS는 버전이 지정된 방식으로 CDC 파일을 AWS S3에 업로드합니다.

database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...

날짜로 분할된 파일

파일은 분할된 날짜 형식으로 업로드할 수 있습니다. 다음은 이를 보여 주는 몇 가지 예입니다.

// <base-path>/yyyy/MM/dd/HH:mm:ss-randomString
<base-path>/2021/12/01/10:11:23-b1662ecd-e05e-4bb7-a125-ad81f6e859b4.json
<base-path>/2021/12/01/10:11:23-b9794cf3-3f60-4b8d-ae11-8ea320fad9d1.json
...

// <base-path>/year=yyyy/month=MM/day=dd/hour=HH/minute=mm/randomString
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/442463e5-f6fe-458a-8f69-a06aa970fc69.csv
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/8f00988b-46be-4112-808d-6a35aead0d44.csv <- this may be uploaded before the file above as long as processing happens less frequently than a minute

날짜로 분할된 파일을 업로드할 때 염두에 두어야 할 몇 가지 사항은 다음과 같습니다.

  • 월, 일, 시, 분은 어휘 순서를 보장하기 위해 0으로 채워야 합니다(hour=3 대신 hour=03 또는 2021/5/3 대신 2021/05/03으로 업로드해야 함).
  • 처리가 부모 디렉터리의 시간 세분성보다 덜 자주 발생하는 한 파일은 가장 깊은 디렉터리에서 어휘 순서로 업로드될 필요가 없습니다.

날짜로 분할된 어휘 순서로 파일을 업로드할 수 있는 일부 서비스는 다음과 같습니다.

자동 로더의 원본 경로 변경

Databricks Runtime 11.3 LTS 이상에서는 새 검사point 디렉터리를 선택하지 않고도 디렉터리 목록 모드로 구성된 자동 로더의 디렉터리 입력 경로를 변경할 수 있습니다.

Warning

이 기능은 파일 알림 모드에서 지원되지 않습니다. 파일 알림 모드를 사용하고 경로가 변경된 경우 디렉터리 업데이트 시 새 디렉터리에 이미 있는 파일을 수집하지 못할 수 있습니다.

예를 들어 요일/YYYYMMDD/로 구성된 디렉터리 구조의 모든 데이터를 로드하는 일일 수집 작업을 실행하려는 경우 동일한 검사포인트를 사용하여 매일 다른 원본 디렉터리에서 수집 상태 정보를 추적하는 동시에 이전에 사용한 모든 원본 디렉터리에서 수집된 파일에 대한 상태 정보를 기본 확인할 수 있습니다.