Databricksの Shared compute(共有コンピュート)は、1つのクラスタを複数ユーザーで同時に利用できるアクセスモードです。 Unity Catalogを前提としたプロセス分離により、ユーザー間のデータ漏洩を防ぎつつ、 クラスタ台数を削減してコストを大幅に最適化できます。
ただし、Sharedモードには「RDD不可」「MLランタイム非対応」「カスタムUDF制限」など、 Single Userモードにはない重要な制約があります。 この記事では、Sharedモードの隔離メカニズム、制約の全体像、コスト最適化の効果、 そしてSingle User / Sharedの選択判断フローを解説します。
Sharedモードは、1つのクラスタリソースを複数のユーザーが同時に使用できるアクセスモードです。 各ユーザーはクラスタにアタッチして自分のノートブックを実行しますが、 内部ではプロセスレベルの分離が行われ、他のユーザーのデータやコードにはアクセスできません。
Sharedモードでは以下の動作が保証されます。
Sharedモードのセキュリティは、Unity Catalogのデータガバナンスレイヤーとプロセス分離の2層構造で実現されています。
| 隔離レイヤー | 仕組み | 防ぐ脅威 |
|---|---|---|
| データアクセス制御 | UCのGRANT / DENYで各ユーザーの権限を個別チェック | 権限のないテーブルへのアクセス |
| プロセス分離 | 各ユーザーのPythonプロセスを独立して実行 | 他ユーザーのメモリ空間への侵入 |
| 一時オブジェクトの分離 | TEMP VIEW / TEMP TABLEはセッション内でのみ可視 | 他ユーザーの中間データの窃取 |
| シークレットの分離 | dbutils.secrets.getはユーザーACLで制御 | 他ユーザーのクレデンシャルへのアクセス |
Sharedモードはセキュリティと引き換えに、以下の機能が制限されます。 これは試験で頻出のテーマであり、実務でのモード選択にも直結します。
| 制約カテゴリ | 制約内容 | 理由 |
|---|---|---|
| 低レベルAPI | RDD / SparkContext / sc.parallelize() 使用不可 | RDDは任意のバイトコードを実行でき、プロセス分離をバイパスする可能性があるため |
| MLランタイム | DBR MLを選択できない(ML系ライブラリが使えない) | MLライブラリはネイティブコード実行を伴い、分離境界を超える可能性があるため |
| カスタムUDF | セッション内のインラインPython UDF / Pandas UDFが制限される | 任意のPythonコードがワーカーで実行されるため(UC登録済みUDFは利用可能) |
| Init Scripts | クラスタスコープのinit scriptsが使用不可 | Init scriptsは特権プロセスとして実行され、分離メカニズムを迂回できるため |
| ライブラリ | クラスタレベルでの任意ライブラリインストールが制限される | 共有環境でのライブラリ競合と、ネイティブ拡張による分離バイパスを防止するため |
| Spark設定 | セキュリティに関わるSpark設定の変更が禁止 | 分離メカニズムの無効化を防止するため |
Sharedモードの最大のメリットはコスト効率です。 Single Userモードでは各ユーザーがクラスタを占有するため、チーム人数分のクラスタが必要になります。 Sharedモードでは1〜2台のクラスタを全員で共有するため、以下のコスト削減効果があります。
実務でどちらのモードを選ぶかは、ワークロードの要件に基づいて判断します。 以下の判断フローに従って選択してください。
[ワークロードにML系ライブラリ/GPUが必要?]
├─ Yes → Single User(DBR ML)
└─ No
├─ [RDD / SparkContext / 低レベルAPIが必要?]
│ ├─ Yes → Single User
│ └─ No
│ ├─ [カスタムinit scripts / 任意ライブラリが必要?]
│ │ ├─ Yes → Single User
│ │ └─ No
│ │ ├─ [複数ユーザーが同時利用?]
│ │ │ ├─ Yes → Shared(コスト効率◎)
│ │ │ └─ No → Single User or Shared(どちらでも可)
│ │ └─ END
│ └─ END
└─ END| 比較項目 | Shared | Single User |
|---|---|---|
| 同時利用 | 複数ユーザー可 | 1人のみ |
| MLランタイム | 非対応 | 対応 |
| RDD / SparkContext | 不可 | 可 |
| カスタムUDF | 制限あり(UC登録済みUDFのみ) | 制限なし |
| Init Scripts | 不可 | 可 |
| コスト効率 | 高い(クラスタ共有) | 低い(専有) |
| 実行アイデンティティ | 各ユーザーの資格情報 | アタッチしたユーザーの資格情報 |
| UC必須 | はい | はい(UC有効環境の場合) |
Sharedモードは、Data Engineer Associate / Platformアドミン系の試験で頻出です。 以下のパターンが問われます。
Data Engineer Associate / Platform Admin
問題 1
20人のデータアナリストがSQLとPySpark DataFrameでETL処理を行っている。全員がSingle Userクラスタを使っているため月額コストが高騰している。MLライブラリやRDDは使用していない。最もコスト効率の高い対策はどれか。
正解: B
MLライブラリもRDDも使っていないため、Sharedモードの制約に抵触しません。20台のSingle Userクラスタを2〜3台のSharedクラスタに集約することで、ドライバーノードのコストとアイドル時間を大幅に削減できます。Spot Instanceはコスト削減になりますが台数は変わりません。SQL WarehouseではPySparkが使えません。クラスタサイズの最小化は限定的な効果です。
SharedモードでRDDやSparkContextを使うとどうなりますか?
実行時にエラーになります。Sharedモードではプロセス分離のためにRDD APIとSparkContextへの直接アクセスが禁止されています。spark.read / spark.sql / DataFrameAPIは使用可能ですが、sc.parallelize()やrdd.map()などの低レベルAPIは利用できません。これらが必要な場合はSingle Userモードに切り替える必要があります。
SharedモードでPython UDFは全く使えないのですか?
完全に使えないわけではありません。Unity Catalogに登録された管理済みUDF(CREATE FUNCTION文でSQL/Python UDFを定義)は使用可能です。一方、セッション内でspark.udf.register()で登録するインラインPython UDFやPandas UDFは制限されます。試験ではこの「UCに登録されたUDFは使える」という点がよく問われます。
SharedモードとSingle Userモードのコスト差はどの程度ですか?
DBU単価自体は同じですが、運用コストに大きな差が出ます。10人チームで各自がSingle Userクラスタを起動するとクラスタ10台分のコストがかかりますが、Sharedモードなら1〜2台のクラスタで全員が作業でき、アイドル時間も削減されます。SQLベースの作業が中心のチームでは、Shared化で60〜80%のコスト削減事例もあります。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...