Azure Data Lake Storage Gen2およびBlob Storageに接続する
この記事では、DatabricksからAzure Data Lake Storage Gen2とBLOBストレージに接続する方法について説明します。
注:
従来の Windows Azure ストレージ BLOB ドライバー (WASB) は非推奨になりました。 ABFSには、WASBに比べて多くの利点があります。 ABFS に関する Azure のドキュメントを参照してください。レガシ WASB ドライバーの操作に関するドキュメントについては、「 WASB を使用した Azure Blob Storage への接続 (レガシ)」を参照してください。
Azure は、 Azure Data Lake Storage Gen1 の廃止を発表しました。 Databricks では、すべてのデータを Azure Data Lake Storage Gen1 から Azure Data Lake Storage Gen2 に移行することをお勧めします。 まだ移行していない場合は、「 Databricks から Azure Data Lake Storage Gen1 にアクセスする」を参照してください。
Azure資格情報を使用してAzure Data Lake Storage Gen2またはBlob Storageに接続する
Azure Data Lake Storage Gen2 または Blob Storage にアクセスするには、次の資格情報を使用できます。
OAuth 2.0 と <entra-service-principal>: Databricks では、<entra-service-principal> を使用して Azure Storage に接続することをお勧めします。 <entra-service-principal> を作成し、Azure ストレージ アカウントへのアクセスを提供するには、「 サービス プリンシパルを使用して Microsoft Entra ID (旧称 Azure Active Directory) でストレージにアクセスする」を参照してください。
<entra-service-principal>を作成するには、Microsoft Entra ID (旧称 Azure Active Directory) の
Application Administrator
ロールまたはApplication.ReadWrite.All
アクセス許可が必要です。 ストレージ アカウントにロールを割り当てるには、所有者であるか、ストレージ アカウントのユーザー アクセス管理者 Azure RBAC ロールを持つユーザーである必要があります。共有アクセス署名 (SAS):ストレージSAS トークンを使用してAzureストレージにアクセスできます。SASでは、きめ細かなアクセス制御を備えた一時トークンを使用して、ストレージアカウントへのアクセスを制限できます。
SASトークンに付与できるのは、ストレージアカウント、コンテナ、またはファイルに対して自分自身が持っている権限のみです。
アカウント キー: ストレージ アカウント アクセス キー を使用して、Azure Storage へのアクセスを管理できます。 ストレージ アカウント アクセス キーは、ストレージ アカウントの構成とデータへのフル アクセスを提供します。 Databricks では、アカウント キーの代わりに <entra-service-principal> または SAS トークンを使用して Azure Storage に接続することをお勧めします。
アカウントのアクセスキーを表示するには、ストレージアカウントの所有者、コントリビュータ、またはストレージアカウントキーオペレーターサービスのロールを持っている必要があります。
Databricksでは、すべての資格情報を保存するためにシークレットスコープを使用することを推奨しています。ワークスペース内のユーザー、サービスプリンシパル、およびグループに、シークレットスコープを読み取るためのアクセス権を付与できます。これにより、ユーザーはAzureストレージにアクセスしながら、Azure資格情報を保護することができます。シークレットスコープを作成するには、「シークレットスコープ」を参照してください。
Spark プロパティを設定して、Azure ストレージにアクセスするための Azure 資格情報を構成
Spark プロパティを設定して、Azure ストレージにアクセスするための Azure 資格情報を構成できます。 資格情報のスコープはクラスターまたはノートブックのいずれかに設定できます。 クラスター アクセス制御とノートブック アクセス制御の両方を併用して、Azure ストレージへのアクセスを保護します。 「コンピュート権限」と 「Databricks ノートブックを使用したコラボレーション」を参照してください。
Sparkプロパティを設定するには、クラスターのSpark構成またはノートブックで次のスニペットを使用します。
次の形式を使用して、クラスターの 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 に置き換えます。
同じ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>
をAzur Storageアカウント名に置き換えます。<scope>
を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>
をAzur Storageアカウント名に置き換えます。<scope>
をDatabricksシークレットスコープ名に置き換えます。<storage-account-access-key>
をAzur Storageアカウントのアクセスキーを含むキーの名前に置き換えます。
Azur Storageにアクセスする
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');
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 コンテナーを削除してください。 数分後、コンテナーにアクセスできるようになります。 または、 abfss
URI を変更して、このコンテナーが Azure portal で作成されていない限り、別のコンテナーを使用することもできます。
Microsoft ドキュメントの 「Azure Data Lake Storage Gen2 の既知の問題 」を参照してください。
Databricksからのデータの保存とアクセスのための非推奨のパターン
非推奨のストレージパターンを次に示します。
Databricks では、外部データの場所を Databricks Filesystemにマウントすることは推奨されなくなりました。 「Databricks へのクラウド オブジェクト ストレージのマウント」を参照してください。