重要
このドキュメントは廃止され、更新されない可能性があります。
この記事では、Azure Data Lake Storage へのアクセスを構成するための従来のパターンについて説明します。 Databricks では、Unity カタログを使用して、ファイルを直接操作するための Azure Data Lake Storage とボリュームへのアクセスを構成することをお勧めします。 「Unity Catalog で Azure マネージド ID を使用してストレージにアクセスする」をご覧ください。
この記事では、Azure Databricks から Azure Data Lake Storage と Blob Storage に接続する方法について説明します。
注
従来の Windows Azure Storage Blob (WASB) ドライバーは廃止予定です。 ABFS には WASB よりも多くの利点があります。 ABFS に関する Azure ドキュメントを参照してください。 従来の WASB ドライバーの使用に関するドキュメントについては、「WASB で Azure Blob Storage に接続する (レガシ)」をご覧ください。
手順 1: Microsoft Entra ID アプリケーションを登録する
アプリケーションを Microsoft Entra ID に登録すると、Azure ストレージ アカウントへのアクセスを提供するために使用できるサービス プリンシパルが作成されます。
Microsoft Entra ID アプリケーションを登録するには、Microsoft Entra ID での Application Administrator ロールまたは Application.ReadWrite.All アクセス許可が必要です。
- Azure portal で、[Microsoft Entra ID] サービスに移動します。
- [管理] で [アプリの登録] をクリックします。
- [+ 新規登録] をクリックします。 アプリケーションの名前を入力して [登録] をクリックします。
- [証明書とシークレット] をクリックします。
- [+ 新しいクライアント シークレット] をクリックします。
- シークレットの説明を追加し、[追加] をクリックします。
- 新しいシークレットの値をコピーして保存します。
- アプリケーション登録の概要で、アプリケーション (クライアント) ID とディレクトリ (テナント) ID をコピーして保存します。
手順 2: サービス プリンシパルにロールを割り当てる
ストレージ アカウントに関連付けられた Microsoft Entra ID アプリケーション登録にロールを割り当てて、ストレージ リソースへのアクセスを制御します。 特定の要件に応じて、他のロールを割り当てる必要がある場合があります。
ストレージ アカウントにロールを割り当てるには、ストレージ アカウントに対して所有者またはユーザー アクセス管理者 Azure RBAC ロールを持っている必要があります。
- Azure portal で、[ストレージ アカウント] サービスに移動します。
- このアプリケーション登録で使用する Azure ストレージ アカウントを選択します。
- [アクセス制御 (IAM)] をクリックします。
- [+ 追加] をクリックし、ドロップダウン メニューから [ロールの割り当ての追加] を選択します。
- [選択] フィールドを Microsoft Entra ID アプリケーション名に設定し、[ロール] を [ストレージ BLOB データ共同作成者] に設定します。
- 保存 をクリックします。
手順 3: Azure Databricks でAzure資格情報を構成する
アクセスするAzure ストレージ アカウントの資格情報を使用して、Azure Databricks クラスターまたはノートブックを構成します。
サポートされている資格情報の種類とシークレット ストレージ
Azure Data Lake Storage または Blob Storage にアクセスするには、次の資格情報を使用できます。
OAuth 2.0 と Microsoft Entra ID サービス プリンシパル: Databricks では、Microsoft Entra ID サービス プリンシパルを使用して Azure Data Lake Storage に接続することをお勧めします。 Microsoft Entra ID サービス プリンシパルを作成し、Azureストレージ アカウントへのアクセスを提供するには、上記の手順 1 と 2 を実行します。
Microsoft Entra ID サービス プリンシパルを作成するには、Microsoft Entra ID での
Application AdministratorロールまたはApplication.ReadWrite.Allアクセス許可が必要です。 ストレージ アカウントにロールを割り当てるには、所有者またはストレージ アカウントに対するユーザー アクセス管理者 Azure RBAC ロールを持つユーザーである必要があります。重要
Blob Storage では、Microsoft Entra ID サービス プリンシパルはサポートされていません。
Shared Access Signature (SAS): ストレージ SAS トークン を使用して Azure ストレージにアクセスできます。 SAS を使用すると、きめ細かなアクセス制御を備えた一時的なトークンを使用して、ストレージ アカウントへのアクセスを制限できます。
自分自身がストレージ アカウント、コンテナー、またはファイルに対して持つ SAS トークン アクセス許可のみ付与できます。
アカウント キー: ストレージ アカウント アクセス キー を使用して、Azure Storage へのアクセスを管理できます。 ストレージ アカウント アクセス キーは、ストレージ アカウントの構成とデータへのフル アクセスを提供します。 Databricks では、アカウント キーではなく Microsoft Entra ID サービス プリンシパルまたは SAS トークンを使って Azure Storage に接続することをお勧めします。
アカウントのアクセス キーを表示するには、ストレージ アカウントの所有者、共同作成者、またはストレージ アカウント キー オペレーター サービス ロールが必要です。
Databricks では、すべての資格情報の格納にシークレット スコープを使うことをお勧めします。 ワークスペース内のユーザー、サービス プリンシパル、グループにシークレット スコープを読み取るアクセス権を付与することができます。 これにより、ユーザーが Azure ストレージにアクセスできるようにしながら、Azure 資格情報を保護します。 シークレット スコープを作成するには、「 シークレット スコープの管理」を参照してください。
注
Microsoft Entra ID サービス プリンシパルを使用して、SQL ウェアハウスから Azure Storage にアクセスすることもできます。データ アクセス構成に関するページを参照してください。
Spark プロパティを設定してAzure資格情報を構成する
Azure ストレージにアクセスするための Azure 資格情報を構成するように、Spark プロパティを設定できます。 資格情報のスコープは、クラスターまたはノートブックのいずれかに設定できます。 クラスター のアクセス制御とノートブックのアクセス制御の両方を一緒に使用して、Azure ストレージへのアクセスを保護します。 「コンピューティングのアクセス許可」と「Databricks ノートブックを使用して共同作業する」をご覧ください。
Spark プロパティを設定するには、クラスターの Spark 構成またはノートブックで次のスニペットを使用します。
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
次の例に示すようにノートブックで 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 ストレージ アカウントの名前に置き換えます。 -
<scope>を Azure Databricks のシークレットスコープ名で置き換えてください。 -
<sas-token-key>は、Azure ストレージ 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 ストレージ アカウントの名前に置き換えます。 -
<scope>を Azure Databricks のシークレットスコープ名で置き換えてください。 -
<storage-account-access-key>は、Azure ストレージ アカウントのアクセス キーが含まれるキーの名前に置き換えます。
手順 4: ストレージAzureアクセスする
Azure ストレージ コンテナーにアクセスするための資格情報を適切に構成したら、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');
ノートブックの例
ADLS OAuth 2.0 と Microsoft Entra ID (旧称 Azure Active Directory) サービス プリンシパル ノートブック
Azure Data Lake Storage の既知の問題
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 コンテナーを削除してください。 数分後に、コンテナーにアクセスできます。
abfss URI を変更して別のコンテナーを使用することもできますが、このコンテナーが Azure portal を使用して作成されていないことが条件です。
Microsoft ドキュメント Azure Data Lake Storage に関する既知の問題を参照してください。
Azure Databricks のデータの格納とアクセスに推奨されないパターン
非推奨のストレージ パターンを次に示します。
- Databricks では、外部データの場所を Databricks ファイル システムにマウントすることは推奨されなくなりました。 「Azure Databricks へのクラウド オブジェクト ストレージのマウント」を参照してください。
- Databricks では、Azure Data Lake Storage での資格情報パススルーの使用は推奨されなくなりました。 「Microsoft Entra ID 資格情報パススルーを使用して Azure Data Lake Storage にアクセスする (レガシ)」を参照してください。