Share via


Azure Queue Storage(레거시)를 사용하는 Azure Blob Storage 파일 원본

Important

이 설명서는 사용 중지되었으며 업데이트되지 않을 수 있습니다. 이 콘텐츠에 언급된 제품, 서비스 또는 기술은 더 이상 지원되지 않습니다. 자동 로더란?을 참조하세요.

ABS-AQS 커넥터는 AQS(Azure Queue Storage)를 사용하여 모든 파일을 반복적으로 나열하지 않고도 ABS(Azure Blob Storage) 컨테이너에 작성된 새 파일을 찾는 최적화된 파일 원본을 제공합니다. 이렇게 하면 다음과 같은 두 가지 이점을 제공합니다.

  • 짧은 대기 시간: 느리고 리소스를 많이 사용하는 ABS에 중첩된 디렉터리 구조를 나열할 필요가 없습니다.
  • 비용 절감: 비용이 많은 드는 ABS에 대한 LIST API 요청이 없습니다.

참고 항목

ABS-AQS 원본은 이벤트를 사용할 때 AQS 큐에서 메시지를 삭제합니다. 다른 파이프라인이 이 큐의 메시지를 사용하도록 하려면 최적화된 판독기에 대해 별도의 AQS 큐를 설정합니다. 여러 Event Grid 구독을 설정하여 다른 큐에 게시할 수 있습니다.

ABS-AQS 파일 원본 사용

ABS-AQS 파일 원본을 사용하려면 다음을 수행해야 합니다.

  • Azure Event Grid 구독을 활용하여 ABS 이벤트 알림을 설정하고 AQS로 라우팅합니다. Blob Storage 이벤트에 대응을 참조하세요.

  • fileFormatqueueUrl 옵션과 스키마를 지정합니다. 예시:

    spark.readStream \
      .format("abs-aqs") \
      .option("fileFormat", "json") \
      .option("queueName", ...) \
      .option("connectionString", ...) \
      .schema(...) \
      .load()
    

Azure Queue Storage 및 Blob Storage로 인증

Azure Queue Storage 및 Blob Storage를 사용하여 인증하려면 SAS(공유 액세스 서명) 토큰 또는 스토리지 계정 키를 사용합니다. SAS 토큰 또는 스토리지 계정에 대한 액세스 키를 포함하는 큐가 배포된 스토리지 계정에 대한 연결 문자열을 제공해야 합니다. 자세한 내용은 Azure Storage 연결 문자열 구성을 참조하세요.

또한 Azure Blob Storage 컨테이너에 대한 액세스 권한을 제공해야 합니다. Azure Blob Storage 컨테이너에 대한 액세스를 구성하는 방법에 대한 자세한 내용은 Azure Data Lake Storage Gen2 및 Blob Storage에 대한 커넥트 참조하세요.

참고 항목

연결 문자열을 제공하기 위해 비밀을 사용하는 것이 좋습니다.

구성

옵션 Type 기본값 설명
allowOverwrites 부울 true 덮어쓰기되는 Blob을 다시 처리해야 하는지 여부입니다.
connectionString 문자열 없음(필수 매개 변수) 큐에 액세스하기 위한 연결 문자열입니다.
fetchParallelism 정수 1 큐 서비스에서 메시지를 가져올 때 사용할 스레드 수입니다.
fileFormat 문자열 없음(필수 매개 변수) 파일 형식(예: parquet, json, csv, text 등).
ignoreFileDeletion 부울 false 수명 주기 구성이 있거나 원본 파일을 수동으로 삭제하는 경우 이 옵션을 true로 설정해야 합니다.
maxFileAge 정수 604800 중복 처리를 방지하기 위해 파일 알림이 상태로 저장되는 기간(초)을 결정합니다.
pathRewrites JSON 문자열입니다. "{}" 탑재 지점을 사용하는 경우 container@storageAccount/key 경로의 접두사를 마운트 지점으로 다시 작성할 수 있습니다. 접두사만 다시 쓸 수 있습니다. 예를 들어 구성 {"myContainer@myStorageAccount/path": "dbfs:/mnt/data-warehouse"}의 경우 경로 wasbs://myContainer@myStorageAccount.blob.windows.core.net/path/2017/08/fileA.json는 다음과 같이 다시 작성합니다.
dbfs:/mnt/data-warehouse/2017/08/fileA.json.
queueFetchInterval 기간 문자열(예: 2분 동안 2m) "5s" 큐가 비어 있는 경우 페치 간에 대기하는 시간입니다. AQS에 대한 API 요청당 Azure 요금입니다. 따라서 데이터가 자주 도착하지 않는 경우 이 값을 긴 기간으로 설정할 수 있습니다. 큐가 비어 있지 않으면 계속해서 가져옵니다. 5분마다 새 파일을 만드는 경우 AQS 비용을 줄이기 위해 높은 queueFetchInterval을 설정할 수 있습니다.
queueName 문자열 없음(필수 매개 변수) AQS 큐의 이름입니다.

새 이벤트보다 훨씬 더 오래된 이벤트를 관찰하는 경향이 있는 Fetched 0 new events and 3 old events.처럼 보이는 드라이버 로그의 많은 메시지가 관찰되면 스트림의 트리거 간격을 줄여야 합니다.

일부 파일이 처리되기 전에 삭제될 것으로 예상되는 Blob Storage의 위치에서 파일을 사용하는 경우 다음 구성을 설정하여 오류를 무시하고 처리를 계속할 수 있습니다.

spark.sql("SET spark.sql.files.ignoreMissingFiles=true")

질문과 대답(FAQ)

ignoreFileDeletion이 False(기본값)이고 개체가 삭제된 경우 전체 파이프라인이 실패하나요?

예, 파일이 삭제되었다는 이벤트를 받으면 전체 파이프라인이 실패합니다.

어떻게 설정해야 하나요maxFileAge?

Azure Queue Storage는 메시지 전달 의미 체계를 한 번 이상 제공하므로 중복 제거를 위해 상태를 유지해야 합니다. maxFileAge의 기본 설정은 큐에 있는 메시지의 최대 TTL과 동일한 7일입니다.