LoginSignup
3
1

More than 1 year has passed since last update.

Databricksを用いてAzure Data Lake Storage Gen2とBlog Storageにアクセスする

Posted at

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ドライバーを使用することをお勧めします。

Python
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>")
SQL
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をご覧ください。

Python
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以降で利用できます。

Python
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ストレージへのアクセスを管理するために、ストレージアカウントアクセスキーを使用することができます。

Python
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ストレージアカウントアクセスキーを含むキーの名前で置き換え。

サンプルノートブック

このノートブックでは、以下を行うためにどのようにサービスプリンシパルを使うのかをデモンストレーションしています。

  1. ADLS Gen2のストレージアカウントへの認証。
  2. ストレージアカウントのファイルシステムをマウント。
  3. 新たなコンテナにInternet of things (IoT)データを含むJSONファイルの書き込み。
  4. 直接あるいはマウントポイント経由のアクセスによるファイルの一覧。
  5. 直接あるいはマウントポイント経由のアクセスによるIoTファイルの読み込みおよび表示。

AzureサービスプリンシパルとADLS Gen2 OAuth 2.0のノートブック

Azure Data Lake Storage Gen2のFAQと既知の問題

Azure Data Lake Storage Gen2 frequently asked questions and known issuesをご覧ください。

Databricks 無料トライアル

Databricks 無料トライアル

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1