Databricks

Databricks Init Scripts: クラスタ初期化・依存関係配布

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Databricksクラスタの起動時にカスタムの初期化処理を実行したい場面は多くあります。 OSライブラリのインストール、セキュリティエージェントの配置、環境変数の設定、 モニタリングツールの起動など、Init Scriptsはクラスタ環境のカスタマイズに不可欠な仕組みです。 この記事では、Init Scriptsの種類、配置場所、実行順序、制約事項、トラブルシューティングまでを整理します。

Init Scriptsの種類

Init Scriptsは適用範囲と設定方法によって以下の3種類に分けられます。

種類適用範囲設定方法ステータス
Cluster-scoped Init Script特定のクラスタのみクラスタ設定のAdvancedオプションで指定推奨(現行標準)
Global Init Scriptワークスペース内の全クラスタAdmin Settings → Global Init Scriptsで登録推奨(管理者用)
Legacy Global Init Script(DBFS)ワークスペース内の全クラスタDBFS上の特定パス(/databricks/init/)に配置非推奨・段階廃止中

Cluster-scoped Init Scriptは特定のクラスタだけにカスタム環境を適用したいときに使い、 Global Init Scriptはセキュリティエージェントのように全クラスタで統一的に実行したい処理に使います。

配置場所の選択肢

配置場所パス例Unity Catalog管理推奨度
Unity Catalog Volumes/Volumes/catalog/schema/volume/init.sh対応(権限・監査ログ統合)最も推奨
Workspace Files/Workspace/Shared/init-scripts/init.shWorkspace ACLで管理推奨
DBFS(dbfs:/)dbfs:/init-scripts/init.sh非対応非推奨
クラウドストレージ直接s3://bucket/init-scripts/init.sh非対応レガシー環境のみ

Unity Catalog環境では、Volumesへの配置がベストプラクティスです。 Volumesに配置すると、スクリプトへのアクセスがUnity Catalogの権限モデルで管理され、 誰がいつスクリプトを変更したかの監査ログも取得できます。

実行順序

クラスタ起動時に複数のInit Scriptが存在する場合、以下の順序で実行されます。

  1. Global Init Scripts(Admin Settingsで登録された順序)
  2. Cluster-scoped Init Scripts(クラスタ設定で指定された順序)

Global Init Scriptsが先に実行されるため、全クラスタ共通の基盤設定(セキュリティ、モニタリング)を Globalで行い、クラスタ固有のカスタマイズ(特定ライブラリのインストール等)をCluster-scopedで行う 設計が一般的です。

各スクリプト内では上から順にシェルコマンドが実行され、途中でexit 1等の非ゼロ終了コードが 返されるとクラスタの起動が失敗します。

Init Scriptの記述例

#!/bin/bash
# 環境変数の設定
echo "export ENVIRONMENT=production" >> /etc/environment

# OS依存パッケージのインストール
apt-get update -y && apt-get install -y libgeos-dev

# Python追加ライブラリのインストール
/databricks/python/bin/pip install geopy==2.4.1

# モニタリングエージェントの起動
if [ -f /opt/monitoring/agent.sh ]; then
  /opt/monitoring/agent.sh start
fi

スクリプトは冪等(何回実行しても同じ結果)になるように書くことが重要です。 クラスタの再起動やリサイズのたびにInit Scriptが再実行されるため、 既にインストール済みのパッケージを再インストールしても問題ないようにします。

Shared Mode / Unity Catalog Shared Clusterの制約

Shared Access Modeのクラスタ(複数ユーザーが共有するクラスタ)では、Init Scriptに重要な制約があります。

  • Cluster-scoped Init Scriptは利用不可(セキュリティ上の理由)
  • Global Init Scriptのみ実行可能
  • スクリプト内でのファイルシステム操作が一部制限される
  • ユーザーがクラスタ設定を変更できないため、管理者がGlobal Init Scriptで必要な環境を整える必要がある

Single User Access Modeのクラスタでは、Cluster-scoped Init Scriptが利用可能です。 この違いは試験で問われやすいポイントです。

ログ確認方法

Init Scriptの実行結果はクラスタのドライバーノード上のログに保存されます。

ログの場所内容確認方法
クラスタUIのEvent LogInit Script成功/失敗のサマリークラスタ詳細画面 → Event Log
ドライバーログ(/databricks/init_scripts/)各スクリプトの標準出力・標準エラー出力クラスタ詳細画面 → Driver Logs → Init Scripts
クラスタログ配信先S3/ADLS/GCS等に配信されたログクラスタ設定のLog Delivery設定先

Serverless Computeとの関係

Serverless Compute(SQL Warehouse Serverless / Serverless Notebooks)ではInit Scriptは実行できません。 Serverless環境はDatabricksが完全にマネージドするため、ユーザーによるOSレベルのカスタマイズは許可されません。

Serverless環境でライブラリを追加するには以下の方法を使います。

  • ノートブック内で%pip installを使う
  • Workspace Librariesで管理されたライブラリを使用する
  • Unity Catalog Volumesにホイールファイルを配置し、%pip install /Volumes/...で参照する

トラブルシューティング

クラスタが起動しない

  • Event Logで「INIT_SCRIPT_FAILURE」を確認する
  • ドライバーログで標準エラー出力を確認し、原因(apt-getの失敗、権限不足、ネットワークエラー等)を特定する
  • スクリプトの先頭にset -exを追加してデバッグ出力を有効にする

スクリプトが途中で止まる

  • apt-get等の対話型プロンプトが表示され待機状態になっている可能性 → -yフラグの付与を確認
  • ネットワークタイムアウト → --timeout--retryオプションを追加

再起動のたびに時間がかかる

  • 大きなパッケージのダウンロード → パッケージをVolumesに事前配置し、ローカルインストールに切り替える
  • 不要な処理の実行 → 条件分岐(if [ ! -f /opt/already_installed ]; then ...)で冪等性を確保

試験で問われるポイント

  • 「Shared Access Modeのクラスタでカスタムライブラリを全ノードにインストールするには」→ Global Init Script
  • 「Init ScriptをUnity Catalog管理下に置くには」→ Volumesに配置
  • 「Init Scriptの失敗はクラスタにどう影響するか」→ クラスタの起動が失敗する
  • 「Serverless ComputeでOSパッケージを追加するには」→ 不可。%pip installでPythonパッケージのみ対応

問題で確認

Data Engineer Professional

問題 1

セキュリティチームが、ワークスペース内のすべてのクラスタにモニタリングエージェントを自動インストールしたい。クラスタはShared Access ModeとSingle User Access Modeの両方が存在する。最も適切な方法はどれか。

  1. 各クラスタのCluster-scoped Init Scriptにエージェントのインストールコマンドを追加する
  2. Admin SettingsでGlobal Init Scriptを登録し、エージェントのインストールコマンドを記述する
  3. ノートブックのセルに%sh pipでエージェントをインストールするコードを書き、各ユーザーに実行を依頼する
  4. Cluster Policyでエージェントのインストールを強制する設定を定義する

正解: B

Shared Access ModeのクラスタではCluster-scoped Init Scriptが利用できないため、Aは一部のクラスタで機能しません。Global Init Scriptはアクセスモードに関係なく全クラスタで実行されるため、統一的なエージェント配布に最適です。ノートブックでの手動実行はユーザー依存で確実性がなく、Cluster PolicyはInit Scriptの内容を制御する機能ではありません。

よくある質問

Init ScriptがServerless Computeで使えないのはなぜですか?

Serverless Computeはマネージド環境であり、ユーザーがOSレベルの操作を行うことを許可していません。Init Scriptはクラスタノードのシェルで実行されるため、Serverlessのセキュリティモデルと根本的に相容れません。Serverless環境でライブラリを追加するには%pip installまたはWorkspaceライブラリ機能を使用します。

Init Scriptが失敗したときクラスタはどうなりますか?

Init Scriptの失敗はクラスタの起動失敗を引き起こします。クラスタのイベントログに「INIT_SCRIPT_FAILURE」が記録され、ドライバーログのinit_scripts/配下に標準出力・標準エラー出力が保存されます。失敗を無視して起動を継続する設定はないため、スクリプトの冪等性と堅牢なエラーハンドリングが重要です。

DBFSにInit Scriptを配置するのは非推奨ですか?

はい。DBFS上のInit Script(Legacy Global Init Scripts含む)は段階的に非推奨になっています。Unity Catalog Volumesまたはワークスペースファイル(Workspace Files)への配置が推奨されます。Volumesに配置するとUnity Catalogの権限管理やバージョン管理の恩恵を受けられます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.