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 のデータの格納とアクセスに推奨されないパターン
非推奨のストレージ パターンを次に示します。
- Databricks では、外部データの場所を Databricks ファイルシステムにマウントすることは推奨されなくなりました。 「Azure Databricks へのクラウド オブジェクト ストレージのマウント」を参照してください。
- Databricks では、Azure Active Directory の資格情報パススルーを使って Azure Data Lake Storage にアクセスすることは推奨されなくなりました。
- 従来の Windows Azure Storage (WASB) ドライバーは非推奨になっています。 ABFS には WASB よりも多くの利点があります。 ABFS に関する Azure ドキュメントを参照してください。 従来の WASB ドライバーの使用に関するドキュメントについては、「WASB で Azure Blob Storage に接続する (レガシ)」をご覧ください。
- Azure では、Azure Data Lake Storage Gen1 の保留中の提供終了が発表されています。 Azure Databricks では、すべての Azure Data Lake Storage Gen1 を Azure Data Lake Storage Gen2 に移行することが推奨されます。 まだ移行していない場合は、「Azure Databricks から Azure Data Lake Storage Gen1 にアクセスする」をご覧ください。
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 FILES
、WRITE 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」を参照してください。