Accessing Azure Data Lake Storage Gen2 and Blob Storage with Databricks | Databricks on AWS [2022/7/20時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
DatabricksからBlob StorageやAzure Data Lake Storage Gen2に接続するにはAzure Blob Filesystem driver (ABFS)を使います。クラスターに設定されたAzureサービスプリンシパルを用いることで、Azureストレージコンテナにセキュアにアクセスすることをお勧めします。
本書では、以下を用いてAzureストレージコンテナにアクセスする方法を説明します。
- Azureサービスプリンシパル
- SASトークン
- アカウントキー
以下の計算環境に対してこれらの認証情報を設定するために、Sparkプロパティを設定します。
- Databricksクラスタースコープ
- Databricksノートブックスコープ
また、Databricks SQLからAzureストレージにアクセスするために、Azureサービスプリンシパルを使うこともできます。Configure access to cloud storageをご覧下さい。
すべての認証情報の格納には、シークレットのスコープを使用することをお勧めします。
Databricksからデータを格納し、アクセスする際の非推奨のパターン
今後Databricksでは、Databricksファイルシステムに外部のデータ格納場所をマウントすることをお勧めしません。Mounting cloud object storage on Databricksをご覧ください。
レガシーなWindows Azure Storage Blob driver (WASB)は非推奨となります。ABFSにはWASBと比較して多くのメリットがあります。Azure documentation on ABFSをご覧ください。レガシーなWASBドライバーの使い方に関するドキュメントは、Connect to Azure Blob Storage with WASB (legacy)をご覧ください。
AzureはAzure Data Lake Storage Gen1の間も無くのリタイアを発表しています。Databricksでは、Azure Data Lake Storage Gen1の全てをAzure Data Lake Storage Gen2に移行することをお勧めします。まだ移行していないのであれば、Accessing Azure Data Lake Storage Gen1 from Databricksをご覧ください。
Blob StorageやAzure Data Lake Storage Gen2のABFS URIを用いたダイレクトアクセス
お使いのAzureストレージコンテナにアクセスするための認証情報を適切に設定しているのであれば、URIを用いてストレージアカウントのリソースとやり取りを行うことができます。より優れたセキュリティのために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へのアクセス
認証にAzure Active Directory (Azure AD)のアプリケーションサービスプリンシパルとOAuth 2.0を用いて、セキュアにAzureストレージアカウントのデータにアクセスすることができます。Configure access to Azure storage with an Azure Active Directory service principalをご覧ください。
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")
以下を置き換えてください。
-
<scope>
をDatabricksのシークレットスコープ名で置き換え。 -
<service-credential-key>
をクライアントシークレットを含むキーの名前で置き換え。 -
<storage-account>
をAzureストレージアカウント名で置き換え。 -
<application-id>
をAzure Active DirectoryアプリケーションのApplication (client) IDで置き換え。 -
<directory-id>
をAzure Active DirectoryアプリケーションのDirectory (tenant) IDで置き換え。
SASトークンを用いたAzure Data Lake Storage Gen2やBlob Storageへのアクセス
Azure Data Lake Storage Gen2のストレージアカウントに直接アクセスするために、ストレージの共有アクセスシグネチャ (SAS)を用いることができます。SASを用いることで、きめ細かいアクセス制御による一時的なトークンを用いてストレージアカウントへのアクセスを制限することができます。
同じSparkセッションで複数のストレージアカウントに対するSASトークンを設定することができます。
注意
SASのサポートはDatabricksランタイム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ストレージへのアクセスを管理するために、ストレージアカウントアクセスキーを使用することができます。
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ストレージアカウントアクセスキーを含むキーの名前で置き換え。
サンプルノートブック
このノートブックでは、以下を行うためにどのようにサービスプリンシパルを使うのかをデモンストレーションしています。
- ADLS Gen2のストレージアカウントへの認証。
- ストレージアカウントのファイルシステムをマウント。
- 新たなコンテナにInternet of things (IoT)データを含むJSONファイルの書き込み。
- 直接あるいはマウントポイント経由のアクセスによるファイルの一覧。
- 直接あるいはマウントポイント経由のアクセスによるIoTファイルの読み込みおよび表示。
AzureサービスプリンシパルとADLS Gen2 OAuth 2.0のノートブック
Azure Data Lake Storage Gen2のFAQと既知の問題
Azure Data Lake Storage Gen2 frequently asked questions and known issuesをご覧ください。