Share via


チュートリアル: Databricks を使用してコンテナーの統計情報を計算する

このチュートリアルでは、Azure Blob Storage インベントリと Azure Databricks を使用してコンテナーに関する統計情報を収集する方法について説明します。

このチュートリアルでは、以下の内容を学習します。

  • インベントリ レポートを生成する
  • Azure Databricks ワークスペース、クラスター、ノートブックを作成する
  • BLOB インベントリ ファイルを読み取る
  • BLOB、スナップショット、バージョンの数と合計サイズを取得する
  • BLOB の種類とコンテンツ タイプ別に BLOB の数を取得する

前提条件

インベントリ レポートを生成する

ストレージ アカウントの BLOB インベントリ レポートを有効にします。 「Azure Storage BLOB のインベントリ レポートを有効にする」を参照してください。

次の構成設定を使用します。

設定
規則の名前 blobinventory
コンテナー <コンテナーの名前>
インベントリを行うオブジェクトの種類 BLOB
BLOB の種類 ブロック BLOB、ページ BLOB、追加 BLOB
サブタイプ BLOB のバージョンを含める、スナップショットを含める、削除された BLOB を含める
BLOB インベントリ フィールド All
インベントリの頻度 毎日
エクスポート形式 CSV

インベントリ レポートを有効にしてから、最初のレポートを生成するには、最大で 24 時間待機することが必要な場合があります。

Azure Databricks を構成する

このセクションでは、Azure Databricks ワークスペース、クラスター、ノートブックを作成します。 このチュートリアルの後半では、コード スニペットをノートブック セルに貼り付け、それらを実行してコンテナーの統計情報を収集します。

  1. Azure Databricks ワークスペースを作成する。 「Azure Databricks ワークスペースを作成する」をご覧ください。

  2. クラスターを作成する。 クラスターの作成に関する記事を参照してください。

  3. ノートブックを作成し、そのノートブックの既定の言語として Python を選択します。 「ノートブックを作成する」を参照してください。

BLOB インベントリ ファイルを読み取る

  1. 次のコード ブロックをコピーして最初のセルに貼り付けます。ただし、このコードはまだ実行しないでください。

    from pyspark.sql.types import StructType, StructField, IntegerType, StringType
    import pyspark.sql.functions as F  
       storage_account_name = "<storage-account-name>"
       storage_account_key = "<storage-account-key>"
       container = "<container-name>"
       blob_inventory_file = "<blob-inventory-file-name>" 
       hierarchial_namespace_enabled = False
    
    if hierarchial_namespace_enabled == False:
      spark.conf.set("fs.azure.account.key.{0}.blob.core.windows.net".format(storage_account_name), storage_account_key)
      df = spark.read.csv("wasbs://{0}@{1}.blob.core.windows.net/{2}".format(container, storage_account_name, blob_inventory_file), header='true', inferSchema='true')
    
     else:
      spark.conf.set("fs.azure.account.key.{0}.dfs.core.windows.net".format(storage_account_name), storage_account_key)
      df = spark.read.csv("abfss://{0}@{1}.dfs.core.windows.net/{2}".format(container, storage_account_name, blob_inventory_file), header='true', inferSchema='true')     
    
  2. このコード ブロックで、次の値を置き換えます。

    • <storage-account-name> プレースホルダーの値は、実際のストレージ アカウントの名前に置き換えます。

    • <storage-account-key> プレースホルダーの値を、実際のストレージ アカウントのアカウント キーに置き換えます。

    • <container-name> プレースホルダーの値を、インベントリ レポートを保持するコンテナーに置き換えます。

    • <blob-inventory-file-name> プレースホルダーを、インベントリ ファイルの完全修飾名に置き換えます (例: 2023/02/02/02-16-17/blobinventory/blobinventory_1000000_0.csv)。

    • アカウントに階層型名前空間がある場合は、hierarchical_namespace_enabled 変数を True に設定します。

  3. Shift + Enter キーを押して、このブロック内のコードを実行します。

BLOB の数とサイズを取得する

  1. 新しいセルに次のコードを貼り付けます。

    print("Number of blobs in the container:", df.count())
    print("Number of bytes occupied by blobs in the container:", df.agg({'Content-Length': 'sum'}).first()['sum(Content-Length)'])
    
  2. セルを実行するには、Shift + Enter キーを押します。

    ノートブックには、コンテナー内の BLOB の数と、コンテナー内の BLOB によって占有されているバイト数が表示されます。

    コンテナー内の BLOB の数と BLOB のサイズを示すセルを実行したときに表示される結果のスクリーンショット。

スナップショットの数とサイズを取得する

  1. 新しいセルに次のコードを貼り付けます。

    from pyspark.sql.functions import *
    
    print("Number of snapshots in the container:", df.where(~(col("Snapshot")).like("Null")).count())
    dfT = df.where(~(col("Snapshot")).like("Null"))
    print("Number of bytes occupied by snapshots in the container:", dfT.agg({'Content-Length': 'sum'}).first()['sum(Content-Length)'])
    
  2. セルを実行するには、Shift + Enter キーを押します。

    ノートブックには、スナップショットの数と BLOB スナップショットによって占有される合計バイト数が表示されます。

    スナップショットの数とスナップショットの合計サイズを示すセルを実行したときに表示される結果のスクリーンショット。

バージョン数とサイズを取得する

  1. 新しいセルに次のコードを貼り付けます。

    from pyspark.sql.functions import *
    
    print("Number of versions in the container:", df.where(~(col("VersionId")).like("Null")).count())
    dfT = df.where(~(col("VersionId")).like("Null"))
    print("Number of bytes occupied by versions in the container:", dfT.agg({'Content-Length': 'sum'}).first()['sum(Content-Length)'])
    
  2. セルを実行するには、Shift + Enter キーを押します。

    ノートブックには、BLOB バージョンの数と BLOB バージョンによって占有される合計バイト数が表示されます。

    バージョンの数とバージョンの合計サイズを示すセルを実行したときに表示される結果のスクリーンショット。

BLOB の種類別に BLOB 数を取得する

  1. 新しいセルに次のコードを貼り付けます。

    display(df.groupBy('BlobType').count().withColumnRenamed("count", "Total number of blobs in the container by BlobType"))
    
  2. セルを実行するには、Shift + Enter キーを押します。

    ノートブックには、種類別に BLOB の種類の数が表示されます。

    種類別の BLOB の種類の数を示すセルを実行したときに表示される結果のスクリーンショット。

コンテンツ タイプ別に BLOB 数を取得する

  1. 新しいセルに次のコードを貼り付けます。

    display(df.groupBy('Content-Type').count().withColumnRenamed("count", "Total number of blobs in the container by Content-Type"))
    
  2. セルを実行するには、Shift + Enter キーを押します。

    ノートブックには、各コンテンツ タイプに関連付けられている BLOB の数が表示されます。

    コンテンツ タイプ別の BLOB の数を示すセルを実行したときに表示される結果のスクリーンショット。

クラスターを終了する

不要な課金を回避するため、必ずクラスターを終了してください。 「クラスターを終了する」を参照してください。

次のステップ