Azure Databricks: 3-2. DBFS에 Azure Data Lake Storage Gen2 마운트

서비스 주체 작성



Azure Databricks의 DBFS에 Azure Data Lake Storage Gen2(ADLS Gen2)를 마운트하려면 서비스 주체를 구성해야 하기 때문에 미리 만들어 둡니다.
(서비스 프린시펄은 애플리케이션에 할당하는 사용자 ID와 같습니다.)

모든 서비스의 ID 범주에서 Azure Active Directory를 엽니다.

메뉴에서 App registrations를 열고 + 새로 만들기를 클릭합니다.

이름에 원하는 이름을 입력하고 리디렉션 URI에 Azure Databricks URL( htps : // 그럼 파네아 st. 오즈레타타비 cks. 네 t/ )을 입력한 다음 등록을 클릭합니다.

등록 후에 표시되는 「어플리케이션(클라이언트) ID」와 「디렉토리(테넌트) ID」는 마운트시의 파라미터로서 필요하게 되므로, 복사해 삼가해 둡니다.

그런 다음 서비스 보안 주체의 클라이언트 비밀을 만듭니다.
메뉴에서 인증서 및 비밀을 열고 +새 클라이언트 비밀을 클릭합니다.
설명 및 만료 날짜를 설정하고 추가를 클릭합니다.

생성되면 클라이언트 비밀 문자열이 표시됩니다. 이 문자열은 작성 후 처음 한 번만 표시되므로 복사하여 삼가하십시오.
클라이언트 시크릿도 마운트시에 필요한 파라미터가 됩니다.
(비밀 정보를 관리하기 위해 Azure Key Vault를 사용하는 경우 클라이언트 비밀을 키 컨테이너에 등록 둡니다.)


Azure Data Lake Storage Gen2(ADLS Gen2) 및 파일 시스템 만들기



ADLS Gen2는 Azure Storage의 옵션 처리이므로 생성은 스토리지 계정 만들기의 절차를 따릅니다.
작성 변경 사항은 작성의 고급 설정에서 계층 구조 네임스페이스를 사용 가능하게 하는 것입니다.
(ADLS Gen2는 나중에 활성화 할 수 없으므로 사용하는 경우 새롭고 스토리지 계정 생성이 필요합니다.)

작성이 완료되면 작성한 자원을 여십시오.
'계층 구조 네임스페이스'를 활성화하면 개요의 '서비스'가 'Blob'에서 'Data Lake Gen2 파일 시스템'으로 변경됩니다.


파일 시스템 만들기



ADLS Gen2에 파일 시스템을 만듭니다.
Data Lake Gen2 파일 시스템을 클릭하여 ADLS Gen2 메뉴를 엽니다.

+ 파일 시스템을 클릭하고 이름에 임의의 이름을 입력하여 작성합니다.


ADLS Gen2에 대한 액세스 권한 부여



서비스 주체에 대한 ADLS Gen2 액세스 권한을 부여합니다.
만든 파일 시스템을 엽니다.

메뉴에서 액세스 제어(IAM)를 열고 역할 할당 추가를 클릭합니다.

역할을 스토리지 BLOB 데이터 공동 작성자로 변경하고 선택에서 작성한 서비스 주체를 선택하고 저장을 클릭하십시오.

역할 할당 탭을 클릭하면 서비스 보안 주체에 할당된 권한을 볼 수 있습니다.


ADLS Gen2를 DBFS에 마운트



DBFS에 ADLS Gen2를 마운트하려면 다음 스크립트를 사용합니다.
(스토리지, 서비스 프린시펄 정보, 마운트 대상 DBFS 디렉토리는 작성한 자원에 맞게 변경하십시오.)

Cmd 1
# ストレージ情報
storage_alds = {
    "account": "{ストレージアカウント名}",
    "file_system": "{ファイルシステム名}"
}

# サービスプリンシパル情報
service_principal = {
  "client_id": "{アプリケーション(クライアント)ID}",
  "directory_id": "{ディレクトリ(テナント)ID}",
  "client_secret": "{クライアントシークレット}"
  # "client_secret": dbutils.secrets.get(scope="{スコープ名}", key="{キー名}") # Key Vault使用時
}

# マウントするDBFSディレクトリ
mount_point_adls = "/mnt/{マウント先ディレクトリ}"

try:
  # マウント状態のチェック
  mount_dir = mount_point_adls
  if mount_dir[-1] == "/":
    mount_dir = mount_dir[:-1]
  if len(list(filter(lambda x: x.mountPoint == mount_dir, dbutils.fs.mounts()))) > 0:
    print("Already mounted.")
    mounted = True
  else:
    mounted = False

  if not mounted:
    # Azure Data Lake Storage Gen2のマウント
    configs = {
      "fs.azure.account.auth.type": "OAuth",
      "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
      "fs.azure.account.oauth2.client.id": service_principal["client_id"],
      "fs.azure.account.oauth2.client.secret": service_principal["client_secret"],
      "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/{directory_id}/oauth2/token".format(**service_principal)
    }

    mounted = dbutils.fs.mount(
      source="abfss://{file_system}@{account}.dfs.core.windows.net/".format(**storage_alds),
      mount_point=mount_point_adls,
      extra_configs=configs
    )

except Exception as e:
    raise e

"mounted: {}".format(mounted)




참고


  • 3분 안에 이해할 수 있는 Azure의 Service Principal
  • 내레콤 Azure 레시피 - Azure Databricks를 사용해 보았습니다.
  • Databricks Documentation - Data Sources - Azure Data Lake Storage Gen2
  • 자습서: Spark를 사용하여 Azure Databricks에서 Data Lake Storage Gen2의 데이터에 액세스
  • 좋은 웹페이지 즐겨찾기