Azure Data Lake Storage Gen2 및 Blob Storage에 연결하세요.

참고 항목

이 문서에서는 Azure Data Lake Storage Gen2에 대한 액세스를 구성하기 위한 레거시 패턴을 설명합니다. Databricks는 Unity 카탈로그를 사용하여 파일과 직접 상호 작용하기 위해 Azure Data Lake Storage Gen2 및 볼륨에 대한 액세스를 구성하는 것이 좋습니다. Unity 카탈로그를 사용하여 클라우드 개체 스토리지에 대한 커넥트 참조하세요.

이 문서에서는 Azure Databricks에서 Azure Data Lake Storage Gen2 및 Blob Storage에 연결하는 방법을 설명합니다.

참고 항목

Azure 자격 증명을 사용하여 Azure Data Lake Storage Gen2 또는 Blob Storage에 커넥트

다음 자격 증명을 사용하여 Azure Data Lake Storage Gen2 또는 Blob Storage에 액세스할 수 있습니다.

  • Microsoft Entra ID 서비스 주체를 사용하는 OAuth 2.0: Databricks는 Microsoft Entra ID 서비스 주체를 사용하여 Azure Storage에 연결하는 것이 좋습니다. Microsoft Entra ID 서비스 주체를 만들고 Azure Storage 계정에 대한 액세스를 제공하려면 서비스 주체를 사용하여 Microsoft Entra ID(이전의 Azure Active Directory)를 사용하여 Access Storage를 참조하세요.

    Microsoft Entra ID 서비스 주체를 만들려면 Microsoft Entra ID(이전의 Application.ReadWrite.All Azure Active Directory)에서 역할 또는 권한이 있어야 합니다Application Administrator. 스토리지 계정에서 역할을 할당하려면 스토리지 계정에서 사용자 액세스 관리자 Azure RBAC 역할이 있는 소유자 또는 사용자여야 합니다.

  • SAS(공유 액세스 서명) : 스토리지 SAS 토큰을 사용하여 Azure Storage에 액세스할 수 있습니다. SAS를 사용하면 세분화된 액세스 제어와 함께 임시 토큰을 사용하여 스토리지 계정에 대한 액세스를 제한할 수 있습니다.

    스토리지 계정, 컨테이너 또는 파일에 대해 가지고 있는 SAS 토큰 권한만 직접 부여할 수 있습니다.

  • 계정 키: 스토리지 계정 액세스 키를 사용하여 Azure Storage에 대한 액세스를 관리할 수 있습니다. 스토리지 계정 액세스 키는 스토리지 계정의 구성과 데이터에 대한 모든 권한을 부여하는 데 사용할 수 있습니다. Databricks는 계정 키 대신 Microsoft Entra ID 서비스 주체 또는 SAS 토큰을 사용하여 Azure Storage에 연결하는 것이 좋습니다.

    계정의 액세스 키를 보려면 스토리지 계정에 소유자, 기여자 또는 스토리지 계정 키 운영자 서비스 역할이 있어야 합니다.

Databricks는 모든 자격 증명을 저장하기 위해 비밀 범위를 사용하는 것을 권장합니다. 작업 영역의 사용자, 서비스 주체, 그룹에 비밀 범위를 읽을 수 있는 액세스 권한을 부여할 수 있습니다. 이렇게 하면 사용자가 Azure Storage에 액세스할 수 있도록 하면서 Azure 자격 증명을 보호합니다. 비밀 범위를 만들려면 비밀 범위를 참조 하세요.

Azure Storage에 액세스하도록 Azure 자격 증명을 구성하도록 Spark 속성 설정

Azure Storage에 액세스하도록 Azure 자격 증명을 구성하도록 Spark 속성을 설정할 수 있습니다. 자격 증명의 범위를 클러스터 또는 Notebook으로 지정할 수 있습니다. 클러스터 액세스 제어와 Notebook 액세스 제어를 함께 사용하여 Azure Storage에 대한 액세스를 보호합니다. Databricks Notebook을 사용하여 컴퓨팅 권한 및 공동 작업을 참조하세요.

참고 항목

Microsoft Entra ID 서비스 주체를 사용하여 SQL 웨어하우스에서 Azure Storage에 액세스할 수도 있습니다. 데이터 액세스 사용 구성을 참조하세요.

Spark 속성을 설정하려면 클러스터의 Spark 구성 또는 Notebook에서 다음 코드 조각을 사용합니다.

Azure 서비스 주체

다음 형식을 사용하여 클러스터 Spark 구성을 설정합니다.

spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

다음 예제와 같이 Notebook에서 사용할 spark.conf.set 수 있습니다.

service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

바꾸기

  • <secret-scope>을 Databricks 비밀 범위 이름으로 바꿉니다.
  • <service-credential-key>을 클라이언트 암호가 포함된 키 이름으로 바꿉니다.
  • <storage-account>를 Azure 스토리지 계정의 이름으로 바꿉니다.
  • <application-id> Microsoft Entra ID 애플리케이션에 대한 애플리케이션(클라이언트) ID 를 사용합니다.
  • <directory-id> Microsoft Entra ID 애플리케이션에 대한 디렉터리(테넌트) ID 를 사용합니다.

Sas 토큰

동일한 Spark 세션에서 여러 스토리지 계정에 대해 SAS 토큰을 구성할 수 있습니다.

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

바꾸기

  • <storage-account>를 Azure Storage 계정 이름으로 바꿉니다.
  • <scope>을 Azure Databricks 비밀 범위 이름으로 바꿉니다.
  • <sas-token-key> Azure Storage SAS 토큰을 포함하는 키의 이름을 포함합니다.

계정 키

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

바꾸기

  • <storage-account>를 Azure Storage 계정 이름으로 바꿉니다.
  • <scope>을 Azure Databricks 비밀 범위 이름으로 바꿉니다.
  • <storage-account-access-key>을 Azure Storage 계정 액세스 키가 포함된 키 이름으로 바꿉니다.

Azure Storage에 액세스

Azure Storage 컨테이너에 액세스하도록 자격 증명을 올바르게 구성한 후에는 URI를 사용하여 스토리지 계정의 리소스와 상호 작용할 수 있습니다. Databricks는 보안을 강화하기 위해 abfss 드라이버 사용을 권장합니다.

spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

예제 Notebook

Microsoft Entra ID(이전의 Azure Active Directory) 서비스 주체 Notebook을 사용하는 ADLS Gen2 OAuth 2.0

전자 필기장 가져오기

Azure Data Lake Storage Gen2 알려진 문제

Azure Portal을 통해 만든 스토리지 컨테이너에 액세스하려고 하면 다음 오류가 발생할 수 있습니다.

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

계층 구조 네임스페이스를 사용하는 경우 Azure Portal을 통해 컨테이너를 만들 필요가 없습니다. 이 문제가 표시되면 Azure Portal을 통해 Blob 컨테이너를 삭제합니다. 몇 분 후에 컨테이너에 액세스할 수 있습니다. 또는 이 컨테이너가 Azure Portal을 통해 만들어지지 않는 한 다른 컨테이너를 사용하도록 abfss URI를 변경할 수 있습니다.

Microsoft 설명서에서 Azure Data Lake Storage Gen2의 알려진 문제를 참조하세요.

Azure Databricks에서 데이터를 저장하고 액세스하기 위한 사용되지 않는 패턴

다음은 사용되지 않는 스토리지 패턴입니다.