Azure Data Lake Storage Gen2およびBlob Storageに接続する
この記事では、DatabricksからAzure Data Lake Storage Gen2とBlob Storageに接続する方法について説明します。
注:
従来の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 with a Microsoft Entra ID サービスプリンシパル: Databricks Microsoft Entra ID サービスプリンシパルを使用して Azure Data Lake Storage Gen2に接続することをお勧めします。Microsoft Entra ID サービスプリンシパルを作成し、Azure ストレージ アカウントへのアクセスを提供するには、「サービス プリンシパル & Microsoft Entra ID(Azure Active Directory) を使用してストレージにアクセスする」を参照してください。
Microsoft Entra ID サービスプリンシパルを作成するには、
Application Administrator
ロールまたは Microsoft Entra ID のApplication.ReadWrite.All
権限が必要です。ストレージ アカウントにロールを割り当てるには、所有者であるか、ストレージ アカウントのユーザー アクセス管理者 Azure RBAC ロールを持つユーザーである必要があります。重要
Blob Storage は、 Microsoft Entra ID サービスプリンシパルをサポートしていません。
共有アクセス署名 (SAS):ストレージSAS トークンを使用してAzureストレージにアクセスできます。SASでは、きめ細かなアクセス制御を備えた一時トークンを使用して、ストレージアカウントへのアクセスを制限できます。
SASトークンに付与できるのは、ストレージアカウント、コンテナ、またはファイルに対して自分自身が持っている権限のみです。
アカウント keys: ストレージ アカウント アクセス キー を使用して、 Azure Storage へのアクセスを管理できます。 ストレージ アカウント アクセス キーを使用すると、ストレージ アカウントの構成とデータへのフル アクセスが提供されます。 Databricks では、アカウント キーの代わりに Microsoft Entra ID サービスプリンシパルまたは SAS トークンを使用して Azure ストレージに接続することをお勧めします。
アカウントのアクセスキーを表示するには、ストレージアカウントの所有者、コントリビュータ、またはストレージアカウントキーオペレーターサービスのロールを持っている必要があります。
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>
をAzureストレージアカウント名に置き換えます。<scope>
を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>
をDatabricksシークレットスコープ名に置き換えます。<storage-account-access-key>
をAzureストレージアカウントのアクセスキーを含むキーの名前に置き換えます。
Azure 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ポータルを使用して作成されたストレージコンテナにアクセスしようとすると、次のエラーが表示されることがあります。
StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.
階層型名前空間が有効になっている場合は、Azureポータルを使用してコンテナを作成する必要はありません。この問題が発生した場合は、AzureポータルからBLOBコンテナを削除してください。数分後にコンテナにアクセスできるようになります。あるいは、このコンテナがAzureポータルを通じて作成されていない限り、 abfss
URIを変更して別のコンテナを使用することもできます。
Microsoftドキュメントで「Azure Data Lake Storage Gen2の既知の問題」を参照してください。
Databricksからのデータの保存とアクセスのための非推奨のパターン
非推奨のストレージパターンを次に示します。
Databricksでは、外部データの場所をDatabricks Filesystemへマウントすることは推奨されなくなりました。「Databricks へのクラウドオブジェクトストレージのマウント」を参照してください。