Azure Data Lake Storage Gen2 と Blob Storage にアクセスする

Azure Blob File System (ABFS) ドライバーを使って、Azure Databricks から Azure Blob Storage と Azure Data Lake Storage Gen2 に接続します。 Databricks では、クラスターの構成で設定された Azure サービス プリンシパルを使って、Azure Storage コンテナーへのアクセスをセキュリティで保護することが推奨されます。

この記事では、次のものを使って Azure Storage コンテナーにアクセスする方法について詳しく説明します。

  • Unity Catalog で管理される外部の場所
  • Azure サービス プリンシパル
  • SAS トークン
  • アカウント キー

Spark のプロパティを設定して、次のいずれかでコンピューティング環境に対するこれらの資格情報を構成します。

  • Azure Databricks クラスターへのスコープ設定
  • Azure Databricks ノートブックへのスコープ設定

Azure サービス プリンシパルを使って、Databricks SQL から Azure Storage にアクセスすることもできます。「データ アクセスの構成」をご覧ください。

Databricks では、すべての資格情報の格納にシークレット スコープを使うことが推奨されます。

Azure Databricks のデータの格納とアクセスに推奨されないパターン

非推奨のストレージ パターンを次に示します。

Unity Catalog の外部の場所を使用して Azure Data Lake Storage Gen2 にアクセスする

注意

Azure Data Lake Storage Gen2 は、Unity Catalog でサポートされている唯一の Azure ストレージの種類です。

Unity Catalog では、外部の場所を使用して、Azure Data Lake Storage Gen2 のデータへのアクセスを管理します。 管理者は主に外部の場所を使用して Unity Catalog の外部テーブルを構成しますが、利用可能な権限 (READ FILESWRITE FILES および CREATE TABLE) を使用してユーザーまたはグループにアクセスを委任することもできます。

Unity Catalog でセキュリティ保護されたデータにアクセスするには、完全修飾 ABFS URI を使用します。 アクセス許可は Unity Catalog によって管理されるため、認証用に追加のオプションや構成を渡す必要はありません。

警告

Unity Catalog では、外部の場所によって管理されるデータにアクセスする場合、Spark の構成設定は無視されます。

読み取りの例:

dbutils.fs.ls("abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data")

spark.read.format("parquet").load("abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data")

spark.sql("SELECT * FROM parquet.`abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data`")

書き込みの例:

dbutils.fs.mv("abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data", "abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/new-location")

df.write.format("parquet").save("abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/new-location")

外部テーブルの作成例:

df.write.option("path", "abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/table").saveAsTable("my_table")

spark.sql("""
  CREATE TABLE my_table
  LOCATION "abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/table"
  AS (SELECT *
    FROM parquet.`abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data`)
""")

Blob Storage または Azure Data Lake Storage Gen2 用の ABFS URI を使用して直接アクセスする

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');

Azure サービス プリンシパルで OAuth 2.0 を使用して Azure Data Lake Storage Gen2 または Blob Storage にアクセスする

認証に OAuth 2.0 と Azure Active Directory (Azure AD) アプリケーション サービス プリンシパルを使って、Azure ストレージ アカウント内のデータに安全にアクセスできます。「Azure Active Directory を使ってストレージにアクセスする」をご覧ください。

service_credential = dbutils.secrets.get(scope="<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")

Replace

  • <scope> を Databricks シークレット スコープ名に置き換えます。
  • <service-credential-key> をクライアント シークレットを含むキーの名前に置き換えます。
  • <storage-account> は Azure ストレージ アカウントの名前に置き換えます。
  • <application-id> を Azure Active Directory アプリケーションのアプリケーション (クライアント) ID に置き換えます。
  • <directory-id> を Azure Active Directory アプリケーションのディレクトリ (テナント) ID に置き換えます。

SAS トークンを使用して Azure Data Lake Storage Gen2 または Blob Storage にアクセスする

ストレージ Shared Access Signature (SAS) を使用して、Azure Data Lake Storage Gen2 ストレージ アカウントに直接アクセスできます。 SAS を使用すると、きめ細かなアクセス制御を備えた一時的なトークンを使用して、ストレージ アカウントへのアクセスを制限できます。

同じ Spark セッション内の複数のストレージ アカウント用に SAS トークンを構成できます。

Note

SAS は、Databricks Runtime 7.5 以降でサポートされています。

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", "<token>")

アカウント キーを使用して Azure Data Lake Storage Gen2 または Blob Storage にアクセスする

ストレージ アカウントのアクセス キーを使って、Azure Storage へのアクセスを管理できます。

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

Replace

  • <storage-account> は、Azure ストレージ アカウントの名前に置き換えます。
  • <scope> は、Azure Databricks シークレット スコープの名前に置き換えます。
  • <storage-account-access-key> は、Azure ストレージ アカウントのアクセス キーが含まれるキーの名前に置き換えます。

ノートブックの例

ADLS Gen2 OAuth 2.0 と Azure サービス プリンシパル ノートブック

ノートブックを入手

Azure Data Lake Storage Gen2 の FAQ と既知の問題

Azure Data Lake Storage Gen2 の FAQ」を参照してください。