[2025年5月版] Databricksにおける計算資源

約2年前にこちらの記事を書きました。

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

当時はサーバレスもなかったですし、アクセスモードの名前も変更されているので、今時点の情報でアップデートします。

Databricksで処理を行う際には計算資源が必要となります。Databricksにおける計算資源をまとめて英語でCompute、日本語で**コンピュート**と呼びます。

マニュアルはこちらです。

https://docs.databricks.com/aws/ja/compute/

:::note info
**注意**
以前は**クラスター**という呼び方が一般的でしたが、今での計算資源の総称は**コンピュート**です。ただし、歴史的背景があるためマニュアルやGUIではクラスターやClusterの表記が存在しています。その際にはクラスターはコンピュートの一種と読み替えてください。
:::

:::note info
**2025/5/28追記**
ワークスペースのサイドメニューの表記も**コンピュート**に統一されました。

![Screenshot 2025-05-28 at 10.10.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f247ec92-9ff0-44cc-abe3-e5ca305d2530.png)
:::


# コンピュートの体系

以下に体系をまとめます。

![Screenshot 2025-05-21 at 15.11.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c2c1b9aa-168a-416a-b728-c508b64d8223.png)

そして、これらのDatabricksにおける計算資源は、サーバレスかどうかという軸と、何のワークロード(作業)で使うのかという軸の2軸で整理できます。

## サーバレスかクラシックか

Databricksの計算資源には、計算資源の所在と管理主体に違いのあるサーバレスとクラシックという2種類があります。


| 特徴 | サーバレスコンピュート | クラシックコンピュート |
|------|----------------------|----------------------|
| 管理 | Databricks | お客様 |
| 起動時間 | 数秒で即時起動 | 数分かかる場合あり |
| スケーリング | ワークロードに応じて自動的にスケーリング | 手動設定または自動スケーリングポリシーが必要 |
| コスト管理 | 使用時のみ課金（秒単位） | クラスター稼働中は課金（アイドル状態でも） |
| 管理負担 | 最小限（管理オーバーヘッドなし） | インフラ管理が必要 |
| カスタマイズ性 | 限定的 | 高度（ハードウェア・ソフトウェア設定の詳細な調整可能） |
| ユースケース | 開発、テスト、バッチ処理、断続的なワークロード | 継続的な処理、特定要件のワークロード、本番環境 |
| インスタンスタイプ | Databricksが最適化して自動選択 | ユーザーが選択可能 |
| 初期化スクリプト | 未サポート | 完全サポート |
| 永続性 | ステートレス | 永続クラスターの維持可能 |
| 予測可能性 | 動的リソース割り当て | 固定リソースで予測可能なパフォーマンス |

- [サーバレス](https://docs.databricks.com/aws/ja/compute/serverless/)を使うことで、即座に計算資源を起動でき、すぐに作業に取り掛かることができます。
- クラシックコンピュートを使うことで、計算資源に対するコントロールや細かいチューニングが可能です。また、ノートブックやジョブで使う際には、[ランタイム](https://docs.databricks.com/aws/ja/compute/#databricks-runtime)や[GPU](https://docs.databricks.com/aws/ja/compute/gpu)を選択することもできます。

:::note info
**ヒント**
- カスタマイズがあまり求められないSQL主体の作業であれば、サーバレスを使うことをお勧めします。
- ノートブックやジョブで使用する際も計算資源のカスタマイズ要件が複雑でない場合には、サーバレスを使うことをお勧めします。
:::


## ワークロードは何か

サーバレスかクラシックかを決めたら、どのようなワークロード(作業)なのかに応じて適切な計算資源を選択しましょう。それぞれに応じたコストや性能の最適化が講じられています。

| 特徴 | SQLウェアハウス | 汎用コンピュート | ジョブコンピュート |
|------|--------------|----------------|----------------|
| **主な用途** | SQLクエリの実行、データ分析、BIツール連携 | 対話型分析、開発作業、ノートブック実行 | バッチ処理、スケジュールされたワークフロー |
| **最適化** | SQLクエリ実行に最適化 | 様々な言語・フレームワーク（Python, R, Scala等）での分析作業 | 自動化されたジョブ実行に最適化 |
| **インターフェース** | SQLエディタ、BIツール接続 | ノートブック、IDEコネクタ | ジョブスケジューラ、ワークフロー管理 |
| **スケジュール** | オンデマンドまたは自動スケーリング | 手動起動または自動スケーリング | スケジュール実行、トリガーベース実行 |
| **ライフサイクル** | 長時間稼働可能、アイドル自動停止設定可 | 対話型セッション中稼働、手動/自動停止 | ジョブ完了後に自動終了 |
| **ユーザー** | データアナリスト、BIデベロッパー | データサイエンティスト、エンジニア | データエンジニア、MLエンジニア |
| **価格モデル** | DBU消費に基づく、アイドル時も課金（サーバレスは使用時のみ） | DBU消費に基づく、クラスター稼働中は課金 | ジョブ実行中のみDBU課金 |
| **パフォーマンス特性** | クエリの同時実行に最適化 | 対話型分析の応答性に最適化 | スループットと効率に最適化 |
| **サーバレスオプション** | あり（サーバレスSQLウェアハウス） | あり（サーバレス汎用コンピュート） | あり（サーバレスジョブコンピュート） |
| **使用シナリオ例** | ダッシュボード、アドホッククエリ、データ探索 | ノートブック開発、モデル構築、対話型分析 | ETLパイプライン、ML学習、定期レポート生成 |


# アクセスモード

汎用コンピュート、ジョブコンピュートでは[**アクセスモード**](https://docs.databricks.com/aws/ja/compute/configure#%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89)を設定できます。これによって、コンピュートを特定のユーザー専用にするのか、共有にするのかを選択できます。すべてのコンピュートの機能を活用できるのは**専用**ですが、コンピュートの使用率を上げてコストを最適化するのであれば、**標準**を使うことをお勧めします。

![Screenshot 2025-05-21 at 14.44.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/02582f00-89cd-4635-98ff-501526605c18.png)

なお、このアクセスモードの名称は以下のように最近変更されています:

| 旧称 | 現在の名称 |
|:--|:--|
| シングルユーザー  | 専用  |
| 共有  |  標準 |

アクセスモードによって異なる制限が適用されます。以下にそれらをまとめます。

https://docs.databricks.com/aws/ja/compute/access-mode-limitations

※ DBR = Databricks Runtime の略

| 機能・制限 | 専用アクセスモード（旧シングルユーザー） | 標準アクセスモード（旧共有） |
|------------|----------------------------------|--------------------------|
| **対象ユーザー** | 単一ユーザーまたはグループ専用 | 複数ユーザーで共有 |
| **推奨用途** | 高度なセキュリティ、機密データ処理 | ほとんどのワークロード（Databricks推奨） |
| **MLlib/ML Runtime** | サポート | 非サポート(別途ライブラリのインストールが必要です) |
| **ジョブタイプ** | すべてのジョブタイプをサポート | Spark-submitジョブ非サポート（JARタスク使用要） |
| **言語サポート** | すべての言語をサポート | • R非サポート<br>• ScalaはDBR 13.3以降のみ<br>• JavaはDBR 15.4 LTS以降のみ |
| **Spark API** | フルサポート | • RDD API非サポート<br>• Sparkコンテキスト(sc)非サポート<br>• 特定DatasetAPI操作はDBR 15.4+必須 |
| **FGAC（行・列レベルセキュリティ）** | • DBR 15.3以前は非サポート<br>• DBR 15.4 LTS以降サポート（サーバレス必要） | サポート |
| **DLTパイプラインテーブル** | • DBR 15.3以前：他ユーザー所有テーブル非サポート<br>• DBR 15.4 LTS以降：サポート（サーバレス必要） | サポート（DBR 13.3 LTS以降） |
| **UDF** | フルサポート | • Hive UDF非サポート<br>• 多数の制限あり（DBRバージョンにより異なる） |
| **ストリーミング** | • 非同期チェックポイント：DBR 11.3未満は非サポート<br>• StreamingQueryListenerはDBR 15.1+必須 | • 多数の制限あり（DBRバージョンにより異なる）<br>• 特定API操作はDBR 14.3〜16.3が必要 |
| **ネットワーク制限** | • ポート8443/8444開放必要（FGAC利用時） | • DBR 11.3以下：ポート80/443のみ接続可<br>• インスタンスメタデータサービス接続不可 |
| **クラウドストレージアクセス** | 直接アクセス可能 | 外部ロケーション経由のみアクセス可 |
| **行サイズ制限** | なし | DBR 13.3以降では128MB超過不可 |
| **DBFSマウント** | FUSEサポート | FUSE非サポート |
| **カスタムコンテナ** | サポート | 非サポート |
| **Scalaカーネル** | フルサポート | 多数の制限あり（almond競合、ログ制限など） |

**共通の制限（両方のアクセスモード）**：
- Apache Sparkの連続処理モード非サポート
- Gravitonインスタンス上のUDFはDBR 15.2以降でのみサポート



### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

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