どのDatabricksクラスターを使えばいいのか？

:::note warn
**注意**
以下の内容は古いので、[\[2025年5月版\] Databricksにおける計算資源](https://qiita.com/taka_yayoi/items/0f6431eec4f8b6421e09)をご覧ください。
:::


Databricksで処理を実行する際には計算資源が必要となります。Databricksでは大きく分けて以下の2種類の計算資源を提供しています。

- Databricksクラスター
- SQLウェアハウス

後者は、BI/SQLワークロードで使用するSQLワークロード特化の計算資源ですが、本書では**Databricksクラスター(cluster)** にフォーカスして説明します。

そして、上述の計算資源に加えていくつかの種類とモード(アクセスモード)が存在しています。本書では、モードの違いやどのようなケースではどのようなモードを使用して[クラスターを作成](https://qiita.com/taka_yayoi/items/d36a469a1e0c0cebaf1b)すべきかを説明します。全体像を以下に示します。
![Screenshot 2023-08-04 at 15.38.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bc7da31a-4d7c-e93c-b15d-6be4071d09d5.png)

# Databricksクラスターとは

https://qiita.com/taka_yayoi/items/c5d99cd77fe4bfcf69f0

Databricksでコードを記述する際には計算資源は不要ですが、コードを実行する際には計算資源が必要となります。

- 実態はクラウドプロバイダーが提供するVMです。AWSならEC2、AzureならVM、GCPならCompute Engineです。
- クラウドで一から処理環境を構築するのは結構な手間(VMの作成、ソフトウェアのインストール、各種設定など)ですが、Databricksクラスターはこの辺りをカプセル化しているので非常に簡単に計算資源を準備することができます。

以下の例では、デフォルト設定を使用して1クリックでDatabricksクラスターを作成しています。
![Screenshot 2023-08-04 at 15.12.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5cbb7514-2519-27c3-ec13-f691526e7608.png)

クラスター作成の詳細についてはこちらをご覧ください。

https://qiita.com/taka_yayoi/items/d36a469a1e0c0cebaf1b

# Databricksクラスターのタイプ

デフォルト設定であれば、1クリックでクラスターを作成できるのは上述した通りですが、要件に応じて設定を変更することができます。

設定項目は色々あるのですが、まず最初に検討する必要があるのは**どのタイプのクラスター**を使用するのかということです。

最も高いレベルでは以下の2種類が存在します。

- 汎用クラスター(all purpose cluster)
- ジョブクラスター(jobs cluster)

ジョブクラスターはDatabricksジョブ専用のクラスターなので本書では割愛し、汎用クラスターにフォーカスして説明します。

そして、クラスターでは、クラスターを誰が使用できるのか、クラスターからどのデータにアクセスできるのかをコントロールする設定項目である[クラスターアクセスモード](https://qiita.com/taka_yayoi/items/d36a469a1e0c0cebaf1b#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A8%E3%81%AF)があります。

厳密に言えば、現在クラスターアクセスモードは4つあるのですが、Databricksでのデータ管理に用いられる[Unity Catalog](https://qiita.com/taka_yayoi/items/15aede468bdca58ec6a3)との互換性があるクラスターアクセスモードは以下の2つとなります。

| アクセスモード | ユーザーへの表示 | UCサポート | サポート言語 | 説明 |
|:--|:--|:--|:--|:--|
| シングルユーザー  | 常時  |  Yes |  Python, SQL, Scala, R | シングルユーザーに割り当てて利用可能。単一のユーザーを割り当ててクラスターを利用可能。一度に一人のユーザーしか当該クラスターを利用できない。Unity Catalogの資産にアクセスする際には割り当てられたユーザーを使用。  |
| 共有  | 常時(プレミアムプランが必要)  | Yes  | Python (Databricks Runtime 11.1以降), SQL  |  ユーザー間のデータ分離を用いて、複数ユーザーで使用することが可能。 |

# クラスタータイプの選定基準

以下のメリット、デメリットを踏まえて選定することになります。

| アクセスモード | メリット | デメリット | 
|:--|:--|:--|
| シングルユーザー  | 使用できる機能に制限がない。  |  ユーザーごとにクラスターが作成されるので、管理の手間が増える。 | 
| 共有  | 一台のクラスターに複数ユーザーがアクセスするので、クラスターの台数を削減することができ管理の手間を削減できる。  | 使用できる[機能に制限](https://qiita.com/taka_yayoi/items/d36a469a1e0c0cebaf1b#%E5%85%B1%E6%9C%89%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E5%88%B6%E9%99%90)がある。   |

- [共有クラスターの機能制限](https://qiita.com/taka_yayoi/items/d36a469a1e0c0cebaf1b#%E5%85%B1%E6%9C%89%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E5%88%B6%E9%99%90)に該当しないのであれば、共有アクセスモードのクラスターをお使いいただくことをお勧めします。
- 一方、機能制限に該当する場合にはシングルユーザーアクセスモードをお使いいただくことをお勧めします。管理の手間を削減するためには、[クラスターポリシー](https://qiita.com/taka_yayoi/items/93d7597d7fc739b48bb7)を用いて野放図なクラスター作成を防ぐことをお勧めします。

## 共有アクセスモードの機能制限

機能制限の多くは改善予定であり、[プライベートプレビュー](https://docs.google.com/forms/d/e/1FAIpQLSfk6aJtTr1aGcVRuO0nusrzGpeK6VrVywhmzII7gSf56CtJ2w/viewform)にサインアップいただければすぐに機能を活用できます。

| 機能制限 | コメント |
|:--|:--|
| クレディンシャルパススルーはサポートされません。  |  レガシー機能です。 |
| initスクリプトはサポートされません。  | [プライベートプレビュー](https://docs.google.com/forms/d/e/1FAIpQLSfk6aJtTr1aGcVRuO0nusrzGpeK6VrVywhmzII7gSf56CtJ2w/viewform)にサインアップしてください。今後改善予定です。  |
| Databricksランタイム13.0以前ではクラスターライブラリはサポートされません。  |  Databricksランタイム13.1以降をお使いください。 |
| Spark-submitジョブはサポートされません。  |   Spark-submitジョブを使用するケースはあまり存在しません。 |
| Databricks機械学習ランタイムはサポートされません。  |  [プライベートプレビュー](https://docs.google.com/forms/d/e/1FAIpQLSfk6aJtTr1aGcVRuO0nusrzGpeK6VrVywhmzII7gSf56CtJ2w/viewform)にサインアップしてください。今後改善予定です。 |
| Scala、R、RDD APIやDBUtilsのようにクラウドストレージからデータを直接読み込むクライアントを使用することはできません。  |  言語サポートに関しては、[プライベートプレビュー](https://docs.google.com/forms/d/e/1FAIpQLSfk6aJtTr1aGcVRuO0nusrzGpeK6VrVywhmzII7gSf56CtJ2w/viewform)にサインアップしてください。今後改善予定です。ファイルアクセスに関しては[Unity CatalogのVolumes](https://qiita.com/taka_yayoi/items/f72b27df9d630235750c)を活用ください。 |
| Databricksランタイム13.1以前では、UDAF、UDTF、Pandas on Spark(applyInPandasとmapInPandas)を含むPython UDFを使うことはできません。 |  Databricksランタイム13.2以降をお使いください。 |

# クラスター選択のベストプラクティス

## ユースケース1: 機械学習ワークロードを実行する

現時点ではシングルユーザーアクセスモードのクラスターをお使いいただくのが現実的です。

あるいは、Databricksランタイム13.1以降が稼働している共有クラスターでクラスターライブラリとして機械学習ライブラリをインストールいただくか、[プライベートプレビュー](https://docs.google.com/forms/d/e/1FAIpQLSfk6aJtTr1aGcVRuO0nusrzGpeK6VrVywhmzII7gSf56CtJ2w/viewform)にサインアップください。

## ユースケース2: Rで開発を行う

シングルユーザーアクセスモードのクラスターをお使いください。

## ユースケース3: 多くのユーザーがPython、SQLを用いたDWH、ETLワークロードを実行する

共有アクセスモードのクラスターをお使いください。管理者の方はリソース使用状況を監視し、リソース不足が観測される場合にはリソース増強を検討ください。

## ユースケース4: 機能制限を受けずに色々な実験を行う

[パーソナルコンピュート](https://qiita.com/taka_yayoi/items/4ccb265729775b54cca6)(シングルユーザーアクセスモード)のクラスターをお使いください。

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

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


### Databricks無料トライアル

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