メインコンテンツまでスキップ

WASB を使用して Azure Blob Storage に接続する (レガシ)

Microsoftでは、WindowsAzureAzure Blob Storage の Storage Blob ドライバー (WASB) を非推奨にし、Azure Blob Filesystem ドライバー (ABFS) を採用しました。「データレイク ストレージと Blob Storage に接続する」を参照してください 。AzureABFSには、WASBに比べて多くの利点があります。 ABFS に関する Azure のドキュメントを参照してください。

この記事では、WASB ドライバーを使用するコードの保守に関するドキュメントを提供します。 Databricks では、Azure Blob Storage へのすべての接続に ABFS を使用することをお勧めします。

Databricks での WASB 資格情報の構成

WASB ドライバーを使用すると、 ストレージ アカウント アクセス キー または Shared Access Signature (SAS) を使用できます。 (パブリック ストレージ アカウントからデータを読み取る場合は、資格情報を構成する必要はありません)。

Databricks では、Databricks で資格情報を渡す必要がある場合は常に シークレット を使用することをお勧めします。 シークレットは、含まれている シークレットスコープにアクセスできるすべてのユーザーが使用できます。

資格情報を渡すことができます。

  • Spark構成のクラスターにスコープを設定
  • ノートブックにスコープを設定
  • マウントされたディレクトリにアタッチされている

Databricks では、WASB と同様のアクセス パターンを提供する Azure Blob Storage へのアクセスに ABFS を使用するように、すべての接続をアップグレードすることをお勧めします。 ABFS を使用して、Azure Blob Storage と対話する際のセキュリティとパフォーマンスを最大限に高めます。

クラスターの資格情報を構成するには、クラスターの作成時にSpark構成プロパティを設定します。クラスター レベルで設定された資格情報は、そのクラスターにアクセスできるすべてのユーザーが使用できます。

ノートブック スコープの資格情報を構成するには、 spark.conf.set(). ノートブック レベルで渡された資格情報は、そのノートブックにアクセスできるすべてのユーザーが使用できます。

ストレージ アカウント アクセス キーを使用した Azure Blob Storage 資格情報の設定

ストレージ アカウント アクセス キーは、ストレージ アカウント内のすべてのコンテナーへのフル アクセスを付与します。 このパターンはプロトタイピングには便利ですが、本番運用データへの無制限のアクセスを許可することに伴うリスクを軽減するために、本番運用での使用は避けてください。

Python
spark.conf.set(
"fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
"<storage-account-access-key>"
)

アカウント キー URI をアップグレードして ABFS を使用できます。詳細については、「Azure データレイク ストレージと Blob Storage への接続」を参照してください

Shared Access Signature (SAS) を使用した Azure Blob Storage 資格情報の設定

SAS トークンを使用して、特定の時刻に有効期限が切れるストレージ アカウント内の 1 つのコンテナーに対する制限付きアクセスを構成できます。

Python
spark.conf.set(
"fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
"<sas-token-for-container>"
)

データフレーム API を使用して Azure Blob Storage にアクセスする

Apache Spark データフレーム APIは、ノートブック レベルまたはクラスター レベルで構成された資格情報を使用できます。すべての WASB ドライバー URI は、コンテナーとストレージ アカウントの名前を指定します。 ディレクトリ名はオプションであり、コンテナを基準にして複数のネストされたディレクトリを指定できます。

wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>

次のコード例は、データフレーム API および Databricks ユーティリティ (dbutils) 参照を使用して、コンテナ内の名前付きディレクトリと対話する方法を示しています。

Python
df = spark.read.format("parquet").load("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

dbutils.fs.ls("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

WASB ではなく ABFS を更新するには、URI を更新します。 詳細については、「Azure ストレージへのアクセス」を参照してください

SQL を使用して Azure Blob Storage にアクセスする

ノートブックのセッション構成で設定された資格情報は、 Spark SQLを実行しているノートブックからはアクセスできません。

クラスター構成でアカウント アクセス キーまたは SASSpark SQL を設定した後、Azure Blob Storage で標準の クエリを使用できます。

SQL
-- SQL
CREATE DATABASE <db-name>
LOCATION "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/";

WASB の代わりに ABFS を更新するには、URI を更新します。「Azure ストレージへのアクセス」を参照してください

Azure Blob Storage コンテナーを DBFS にマウントする

Azure Blob Storage コンテナーまたはコンテナー内のフォルダーを DBFS にマウントできます。 Databricks の推奨事項については、「 Databricks でのクラウド オブジェクト ストレージのマウント」を参照してください。

important
  • Azure Blob Storage では、ブロック、追加、ページの 3 種類の BLOB がサポートされています。 ブロック BLOB は DBFS にのみマウントできます。
  • すべてのユーザーは、DBFS にマウントされた BLOB ストレージ コンテナー内のオブジェクトに対する読み取りおよび書き込みアクセス権を持ちます。
  • クラスターからマウントポイントが作成されると、そのクラスターのユーザーはすぐにそのマウントポイントにアクセスできます。稼働中の別のクラスターでマウントポイントを使用するには、その稼働中のクラスターで dbutils.fs.refreshMounts() を実行して、新しく作成したマウントポイントを使用できるようにする必要があります。

DBFS は、マウント ポイントの作成時に指定した資格情報を使用して、マウントされた BLOB ストレージ コンテナーにアクセスします。 BLOB ストレージ コンテナーがストレージ アカウント アクセス キーを使用してマウントされている場合、DBFS は、このマウント ポイントにアクセスするときに、ストレージ アカウント キーから派生した一時的な SAS トークンを使用します。

Azure Blob Storage コンテナーをマウントする

Databricks では、WASB の代わりに ABFS を使用することをお勧めします。ABFS を使用したマウントの詳細については、「 ABFS を使用した ADLS または Blob Storage のマウント」を参照してください。

  1. Blob Storage コンテナーまたはコンテナー内のフォルダーをマウントするには、次のコマンドを使用します。

    タブ :::タブ-item[Python]

    Python
    dbutils.fs.mount(
    source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net",
    mount_point = "/mnt/<mount-name>",
    extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})

    :::

    タブ-item[Scala]

    Scala
    dbutils.fs.mount(
    source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>",
    mountPoint = "/mnt/<mount-name>",
    extraConfigs = Map("<conf-key>" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")))

    ::: ::::

    ここでは

    • <storage-account-name> は、Azure Blob Storage アカウントの名前です。
    • <container-name> は、Azure Blob Storage アカウント内のコンテナーの名前です。
    • <mount-name> は、BLOB ストレージ コンテナーまたはコンテナー内のフォルダー ( sourceで指定) が DBFS でマウントされる場所を表す DBFS パスです。
    • <conf-key> fs.azure.account.key.<storage-account-name>.blob.core.windows.net または fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net
    • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") シークレットスコープに シークレット として保存されているキーを取得します。
  2. コンテナ内のファイルにローカルファイルであるかのようにアクセスします。たとえば、次のようにします。

    タブ :::タブ-item[Python]

    Python
    # python
    df = spark.read.format("text").load("/mnt/<mount-name>/...")
    df = spark.read.format("text").load("dbfs:/<mount-name>/...")

    :::

    タブ-item[Scala]

    Scala
    // scala
    val df = spark.read.format("text").load("/mnt/<mount-name>/...")
    val df = spark.read.format("text").load("dbfs:/<mount-name>/...")

    :::

    タブ-item[sql]

    SQL
    -- SQL
    CREATE DATABASE <db-name>
    LOCATION "/mnt/<mount-name>"

    ::: ::::