Databricks Unity Catalogにおけるボリュームのパブリックプレビューの発表

[Announcing Public Preview of Volumes in Databricks Unity Catalog \| Databricks Blog](https://www.databricks.com/blog/announcing-public-preview-volumes-databricks-unity-catalog)の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note info
2023/7/13の記事です。
:::


# 任意の非テーブルデータを発見、制御、クエリー

Data & AIサミット2023で、Databricks Unity Catalogにおける[ボリュームをご紹介](https://www.databricks.com/blog/whats-new-unity-catalog-data-and-ai-summit-2023)しました。この機能によって、ユーザーはUnity Catalogのテーブルデータに加え、構造化データ、半構造化データ、構造化データを含むいかなる非テーブルデータを発見、制御、処理、リネージの追跡が可能となります。本日、AWS、Azure、GCPで利用できる**ボリューム**のパブリックプレビューを発表できることを嬉しく思っています。

本記事では、非テーブルデータに関連する一般的なユースケースを議論し、Unity Catalogのボリュームの主要な機能を説明し、ボリュームの実践的なアプリケーションをデモンストレーションする実際に動作するサンプルをお見せし、ボリュームを使い始める方法の詳細を説明します。

# 非テーブルデータのガバナンス、アクセスに関する一般的なユースケース

Databricksレイクハウスプラットフォームでは、さまざまなフォーマットの大量のデータを格納、処理することができます。このようなデータの多くはテーブルとして管理されますが、特に機械学習やデータサイエンスワークロードにおいては、テキスト、画像、音声、動画、PDF、XMLファイルのような非テーブルデータへのアクセスを必要とするユースケースが多数存在します。

**我々のお客様から聞いた一般的なユースケースには以下のようなものがあります:**

- 画像、音声、動画、PDFファイルのような非構造化データの大コボなコレクションに対する機械学習の実行。
- モデルのトレーニングに使用されるトレーニング、テスト、検証データセットの永続化や共有、ログやチェックポイントのディレクトリのようなオペレーションデータのロケーションの定義。
- データサイエンスにおけるデータ探索ステージでの非テーブルデータファイルのアップロードとクエリー。
- ネイティブにクラウドオブジェクトストレージAPIをサポートせず、クラスターマシンのローカルファイルシステムにファイルが存在することを前提とするツールの操作。
- クラスターライブラリ、ノートブックスコープライブラリ、ジョブの依存関係の設定の前に、.whlや.txtのような任意のフォーマットのライブラリ、証明書、設定ファイルのワークスペース横断での格納、セキュリティ保護。
- Auto LoaderやCOPY INTOを用いるなどしてテーブルにロードされる前の取り込みパイプラインの初期ステージにおける生データファイルのステージングや前処理。
- ワークスペース、リージョン、クラウド、データプラットフォームの内外での他のユーザーとの大規模ファイルコレクションの共有。

ボリュームを用いることで、フォーマットに関係なしに非テーブルデータの大規模コレクションをクラウドストレージのパフォーマンスで読み込み、処理できるスケーラブルなファイルベースのアプリケーションを構築することができます。

# ボリュームとは何？どのように使うのか？

**ボリューム**は、Unity Catalogにおいてディレクトリやファイルのコレクションを*カタログ化*する新たなタイプのオブジェクトです。ボリュームは、クラウドオブジェクトストレージにおけるストレージの論理的な*ボリューム*を表現し、構造化、半構造化、非構造化データを含む任意のフォーマットのデータへのアクセス、格納、管理する機能を提供します。これによって、Unity Catalogでテーブルデータやモデルとともに非テーブルデータの制御、管理、リネージ追跡が可能となり、統合された発見、ガバナンス体験を提供します。

## ボリュームに格納されている画像データセットに対する画像分類の実行

ボリュームと実際のアプリケーションをさらに理解するために、サンプルを見ていきましょう。猫と犬の画像から構成される[データセット](https://www.kaggle.com/datasets/tongpython/cat-and-dog)を用いた画像分類のために機械学習(ML)を活用したいものとします。最初のステップは、ローカルマシンにこれらの画像をダウンロードすることになります。我々の目的は、データサイエンスの用途でDatabricksにこれらの画像を取り込むことです。

これを達成するには、データエクスプローラ(現カタログエクスプローラ)のUIを活用します。Unity Catalogのスキーマに新規ボリュームを作成することで、自分自身がオーナーになります。その後で、これぼレーションする相手にアクセス権を許可し、画像ファイルを含むアーカイブをアップロードします。書き込み権限を持っている既存のボリュームにファイルをアップロードする選択肢もあることを付け加えておきます。あるいは、ノートブックやSQLエディタで、SQLコマンドを用いて自分のボリュームを作成し、権限を管理することができます。

```sql:SQL
CREATE VOLUME my_catalog.my_schema.my_volume;

GRANT READ VOLUME, WRITE VOLUME
ON VOLUME my_volume
TO `user group`;
```

![](https://cms.databricks.com/sites/default/files/inline-images/db-696-blog-img-1.gif)

これによって、よく使われるunzipユーティリティを用いて画像アーカイブの抽出に進むことができます。コマンドにボリュームに対応するパスを含めていることに注意してください。このパスは、Unity Catalogリソースの階層構造に対応しており、Unity Catalogで定義されているアクセス権に従います。

```sh:Shell
%sh unzip /Volumes/my_catalog/my_schema/my_volume/catsanddogs.zip -d
 /Volumes/my_catalog/my_schema/my_volume/catsanddogs/
```

このコマンドを実行するには、サイドバーを通じてボリュームのコンテンツに簡単にアクセスできるノートブックを使用することができます。さらに、ファイルの一覧や画像の表示のようにファイルに関連するコマンドをタイプするプロセスを簡単にするために「パスのコピー」機能を活用することができます。

```py:Python
from PIL import Image

image_to_classify = "/Volumes/my_catalog/my_schema/my_volume/catsanddogs/cat3999.jpg"
image = Image.open(image_to_classify)
display(image)
```

以下のスクリーンショットでは、完全なインタラクションの流れを示しています。
![](https://cms.databricks.com/sites/default/files/inline-images/db-696-blog-img-2.gif)

事前に定義されたリストのラベルを用いて画像を分類するために、Unity Catalogの[MLflowモデルレジストリ](https://docs.databricks.com/ja/mlflow/models-in-uc.html)に事前に登録されている[ゼロショット画像分類](https://huggingface.co/docs/transformers/tasks/zero_shot_image_classification)モデルを活用します。以下のコードスニペットでは、どのようにモデルをロードし、分類を行い、判定結果を表示するのかを示しています。以下に示しているスクリーンショットでは、これらのインタラクションを示しています。

```py:Python
classification_labels = ["fox", "bear", "dog", "cat"]

import mlflow
mlflow.set_registry_uri("databricks-uc")
registered_model_name = "my_catalog.my_schema.my_model_name"
model_uri = f"models:/{registered_model_name}/1"
loaded_model = mlflow.transformers.load_model(model_uri)
predictions = loaded_model(image_to_classify, candidate_labels = classification_labels)

print(f"Picture has classification result: {predictions[i]}")
```

**以下のリンクをクリックすると別タブで画像が開きます**

https://cms.databricks.com/sites/default/files/inline-images/db-696-blog-img-3.gif

## Unity Catalogにおける重要なボリュームの機能

**Unity Catalogにおける非テーブルデータの管理。** ボリュームはテーブル、モデル、関数とともにUnity Catalogのスキーマでカタログ化され、Unity Catalogのオブジェクトモデルのコア原則に従いますので、デフォルトでデータはセキュリティ保護されます。十分な権限を持つデータスチュワードはボリュームを作成することができ、そして、ボリュームの所有者となりコンテンツにアクセスできる唯一のユーザーとなります。他のユーザーやグループにボリュームのコンテンツを読み書きする権限を与えることができます。ボリュームに格納されるファイルはワークスペース横断でアクセスすることができ、適切なワークスペースに親のカタログをバインディングすることで、ボリュームへのアクセスを特定のワークスペースに限定することもできます。

**マネージドあるいは外部ボリュームによる柔軟なストレージ環境。** *マネージド*あるいは*外部*ボリュームを設定する選択肢があります。*マネージドボリューム*はUnity Catalogスキーマのデフォルトストレージロケーションにファイルを格納するので、ローカルマシンからアップロードしたファイルからクイックなデータ探索を行うなどのケースで、クラウドストレージへのアクセスを設定する初回のオーバーヘッドなしに、ファイルに対して制御されたロケーションを必要とする際には、便利なソリューションとなります。外部ボリュームは、ボリュームを作成する際に参照する外部のストレージロケーションにファイルを格納し、Databricks内からアクセスするために、他のシステムによって生成されるファイルをステージングする必要がある場合には有用です。例えば、IoTデバイスや医療機器によって大量の画像、動画データが生成されるクラウドストレージロケーションに対する直接のアクセスを提供することができます。

**クラウドストレージのパフォーマンスとスケーラビリティでのデータ処理。** ボリュームの背後にはクラウドオブジェクトストレージがあり、クラウドストレージの堅牢性、可用性、スケーラビリティ、安定性のメリットを享受することができます。クラウドストレージのパフォーマンスで高トラフィックのワークロードを実行するためや、ペタバイト以上のデータを大規模に処理するためにボリュームを活用することができます。

**最新のユーザーインタフェースによる生産性の向上。** ボリュームは、[データエクスプローラ](https://docs.databricks.com/ja/data/index.html)、ノートブック、[リネージ](https://www.databricks.com/blog/2022/12/12/announcing-general-availability-data-lineage-unity-catalog.html)、[データ追加](https://www.databricks.com/blog/easy-ingestion-lakehouse-file-upload-and-add-data-ui)、クラスターライブラリ設定ユーザーインタフェースを含むDatabricksのプラットフォーム体験とシームレスに統合されています。さまざまなアクションでユーザーインタフェースを活用することができます: ボリュームのアクセス権や所有者の管理。ボリュームエンティティの作成、名前変更、削除のようなアクションを通じたボリュームのライフサイクル管理。ファイルの一覧、アップロード、ダウンロードを含むVol.コンテンツの管理。ノートブックの隣からボリュームとコンテンツの参照。リネージの調査。クラスターのソース、ジョブライブラリの設定などです。
![](https://cms.databricks.com/sites/default/files/inline-images/db-696-blog-img-4.png)
*ボリュームのリネージ*

**ファイルの操作で慣れ親しんだツールを活用。** ボリュームでは、ファイルにアクセスするために、Unity Catalogの階層構造を反映し、Databricksで使用する際には定義されたアクセス権に準拠する専用のパスフォーマットが導入しています:

```
/Volumes/<catalog>/<schema>/<volume>/<path_to_file>
```

Apache Spark™やSQLコマンド、REST API、Databricksファイルシステムユーティリティ(dbutils.fs)、Databricks CLI、Terraform、さまざまなOSのライブラリ、ファイルユーティリティを使う際にファイルを参照するためにこのパスを使用することができます。
![Screenshot 2023-10-25 at 18.04.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3d13c0d9-b086-4189-522c-f9e3132285de.png)

**Unity Catalogで管理されるデータに対する新たな処理能力の解放。** ボリュームは、[s3a://](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Introducing_the_Hadoop_S3A_client.)、[abfss://](https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction-abfs-uri)、[gs://](https://cloud.google.com/dataproc/docs/concepts/connectors/cloud-storage)のようなクラウド固有のAPIやHadoopコネクタに対する抽象化レイヤーを提供し、Apache Spark™のSparkアプリケーションやネイティブでオブジェクトストレージをサポートしないツールで、クラウドに格納されているデータファイルの操作を容易にします。ボリュームの専用のファイルパスを用いることで、実際の処理は背後のクラウドストレージにマッピングされますが、ファイルがクラスターノードのローカルに存在するかのようにボリュームのコンテンツにアクセス、参照、処理できるようになります。これは特に[Pandas](https://pandas.pydata.org/)、[scikit\-learn](https://docs.databricks.com/ja/machine-learning/train-model/scikit-learn.html)、TensorFlow [keras](https://www.tensorflow.org/api_docs/python/tf/keras)などの様々なデータサイエンス、MLライブラリを操作している際に有益となります。

# Unity Catalogでボリュームを使い始める

Unity CatalogのボリュームはDatabricksのエンタープライズ、プロプランのDatabricks Runtime 13.2以降で利用できます。ボリュームを簡単に使い始められるように、[ステップバイステップのガイド](https://app.getreprise.com/launch/MXxjqY6/)をご用意しました。すでにDatabricksアカウントをお持ちであれば、初めてのボリュームを作成するための詳細な手順を示しているドキュメントに従ってください([AWS](https://docs.databricks.com/ja/data-governance/unity-catalog/create-volumes.html) | [Azure](https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/create-volumes) | [GCP](https://docs.gcp.databricks.com/data-governance/unity-catalog/create-volumes.html))。ボリュームを作成した、コンテンツを探索するためにデータエクスプローラを活用し([AWS](https://docs.databricks.com/ja/data/explore-volumes.html) | [Azure](https://learn.microsoft.com/ja-jp/azure/databricks/data/explore-volumes) | [GCP](https://docs.gcp.databricks.com/data/explore-volumes.html))、ボリューム管理のためのSQL構文を学習することができます([AWS](https://docs.databricks.com/ja/sql/language-manual/sql-ref-volumes.html) | [Azure](https://learn.microsoft.com/en-gb/azure/databricks/sql/language-manual/sql-ref-volumes) | [GCP](https://docs.gcp.databricks.com/sql/language-manual/sql-ref-volumes.html))。また、ボリュームを最大限に活用するためのベストプラクティスを確認することをお勧めします([AWS](https://docs.databricks.com/ja/data-governance/unity-catalog/best-practices.html) | [Azure](https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/best-practices) | [GCP](https://docs.gcp.databricks.com/data-governance/unity-catalog/best-practices.html))。Databricksが初めてであり、まだアカウントをお持ちでない場合には、はじめにUnity Catalogのボリュームのメリットを体験するために、[フリートライアル](https://databricks.com/jp/try-databricks)にサインアップしてください。

Delta Sharingによるボリュームの共有や、アップロード、ダウンロード、ファイル削除のようなファイル管理オペレーションのためのREST APIを含むエキサイティングなボリュームの機能を楽しみにしていてください。

[What's new with Unity Catalog](https://www.databricks.com/dataaisummit/session/whats-new-unity-catalog-live-demos/)でのData & AIサミットのセッションや、ベストな実装プラクティスのための[ディープダイブセッション](https://www.databricks.com/dataaisummit/session/technical-deep-dive-unity-catalogs-practitioner-playbook/)や、[Everything You Need to Know to Manage LLMs](https://www.databricks.com/dataaisummit/session/llmops-everything-you-need-know-manage-llms/)をご覧いただくことも可能です。

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)