Databricksにおけるクラスター管理

> [Databricksクイックスタートガイド](https://qiita.com/taka_yayoi/items/125231c126a602693610)のコンテンツです。

[Manage clusters \| Databricks on AWS](https://docs.databricks.com/clusters/clusters-manage.html) [2021/3/21時点]の翻訳です。

本記事では、Databricksクラスターをどのように管理するのかを説明します。これには、表示、変更、開始、停止、削除、アクセスコントロール、パフォーマンス監視、ログが含まれます。

# クラスターの表示

ワークスペースのクラスターを表示するには、サイドバーのクラスターアイコンをクリックします。
![](https://docs.databricks.com/_images/clusters-icon.png)

二つのタブ： **All-Purpose Clusters**と**Job Clusters**でクラスター一覧が表示されます。
![](https://docs.databricks.com/_images/cluster-list-all-purpose-aws.png)
![](https://docs.databricks.com/_images/cluster-list-jobs-aws.png)

それぞれのタブには、以下が表示されます：

- クラスター名
- [状態(英語)](https://docs.databricks.com/dev-tools/api/latest/clusters.html#clusterclusterstate)
- ノード数
- ドライバー、ワーカーノードのタイプ
- Databricksランタイムのバージョン
- クラスターの作成者、ジョブのオーナー

クラスターの共通的な情報に加え、**All-Purpose Clusters**タブでは、![](https://docs.databricks.com/_images/cluster-attached-notebooks.png)にクラスターにアタッチされているノートブックの数が表示されます。

All-purposeクラスター名の左のアイコンはクラスターがピン留めされているか、クラスターが[high concurrency(英語)](https://docs.databricks.com/clusters/configure.html#high-concurrency)クラスターなのか、[table access control(英語)](https://docs.databricks.com/security/access-control/table-acls/object-privileges.html)が有効化されているのかが表示されます：

- ピン留め![](https://docs.databricks.com/_images/cluster-pinned.png)
- 起動中![](https://docs.databricks.com/_images/cluster-starting.png)、停止中![](https://docs.databricks.com/_images/cluster-terminating.png)
- 標準のクラスター
    - 稼働中![](https://docs.databricks.com/_images/cluster-running.png)
    - 停止![](https://docs.databricks.com/_images/cluster-terminated.png)
- ハイコンカレンシークラスター
    - 稼働中![](https://docs.databricks.com/_images/cluster-shared.png)
    - 停止![](https://docs.databricks.com/_images/cluster-terminated-shared.png)
- アクセス拒否
    - 稼働中![](https://docs.databricks.com/_images/cluster-locked.png)
    - 停止![](https://docs.databricks.com/_images/cluster-terminated-locked.png)
- テーブルACLが有効
    - 稼働中![](https://docs.databricks.com/_images/cluster-table-acl.png)
    - 停止![](https://docs.databricks.com/_images/cluster-terminated-table-acl.png)

All-purposeクラスターの一番右に表示されるリンク、ボタンは、Spark UI、ログ、[停止](#クラスターの停止)、[再起動](#クラスターの起動)、[クローン](#クラスターのクローン)、[アクセス権](#クラスターのアクセス権設定)、[削除](#クラスターの削除)のアクションにリンクしています。
![](https://docs.databricks.com/_images/interactive-cluster-actions.png)

Jobクラスターの一番右に表示されるリンク、ボタンは、Job Runページ、Spark UI、ログ、[停止](#クラスターの停止)、[クローン](#クラスターのクローン)、[アクセス権](#クラスターのアクセス権設定)のアクションにリンクしています。
![](https://docs.databricks.com/_images/job-cluster-actions.png)

## クラスター一覧のフィルタリング

右上にあるフィルターフィールドとボタンを用いて、クラスター一覧をフィルタリングすることができます。
![](https://docs.databricks.com/_images/cluster-filters.png)

- あなたが作成したクラスターのみを表示するには、**Created by me**をクリックします。
- ([cluster access control(英語)](https://docs.databricks.com/security/access-control/cluster-acl.html)が有効化されている場合)あなたがアクセスできるクラスターのみを表示するには、**Accessible by me**をクリックします。
- **Filter**テキストフィールドに文字列を入力することで、クラスターを検索することができます。

# クラスターのピン留め

停止されたクラスターは30日後に削除されます。停止後30日が経過してもall-purposeクラスターの設定が削除されないようにするには、管理者によって[クラスターをピン留め(英語)](#https://docs.databricks.com/dev-tools/api/latest/clusters.html#pin)することができます。最大70のクラスターをピン留めすることができます。

以下の方法でピン留めすることができます。

- クラスター一覧
クラスターをピン留め、ピン留めの解除をするには、クラスター名の左のピンアイコンをクリックします。
![](https://docs.databricks.com/_images/pin-list.png)

- クラスター詳細ページ
クラスターをピン留め、ピン留めの解除をするには、クラスター名の右のピンアイコンをクリックします。
![](https://docs.databricks.com/_images/pin-detail.png)

また、プログラムからピン留めを行うために、[Pin API(英語)](https://docs.databricks.com/dev-tools/api/latest/clusters.html#clusterclusterservicepincluster)を呼び出すことができます。

# クラスター設定をJSON形式で参照

時には、JSON形式でクラスター設定を参照することが役立つことがあります。特に[Clusters API(英語)](https://docs.databricks.com/dev-tools/api/latest/clusters.html)を用いて、同じ設定のクラスターを作成する際には有用です。既存のクラスターを参照する際に、**Configuration**タブで、右上の**JSON**をクリックするとJSONを参照することができますので、これをAPI呼び出しに貼り付けることができます。JSON表示部分は読み取り専用です。
![](https://docs.databricks.com/_images/cluster-json-aws.png)

# クラスターの編集

クラスター詳細ページからクラスター設定を編集することができます。
![](https://docs.databricks.com/_images/cluster-edit.png)

Edit APIエンドポイントを呼び出すことで、プログラムからクラスターを編集することができます。

> **注意**

> - クラスターにアタッチされたノートブックとジョブは、編集後もアタッチされ続けます。
- クラスターにインストールされたライブラリは、編集後もインストールされたままと編集後もインストールされたままとなります。
- 稼働中のクラスター(クラスターのサイズとアクセス権は除きます)の属性を編集した場合には再起動を行う必要があります。これは、クラスターを利用中のユーザーに影響を及ぼします。
- 稼働中、停止中の状態にあるクラスターのみを編集することができます。しかし、アクセス権に関しては、これら以外の状態のクラスター対しても、クラスター詳細ページで編集することができます。

編集できるクラスター設定の詳細に関しては、[Configure clusters(英語)](https://docs.databricks.com/clusters/configure.html#cluster-configurations)を参照ください。

# クラスターのクローン

既存のクラスターをクローンして新たなクラスターを作成できます。

- クラスター一覧
![](https://docs.databricks.com/_images/clone-list.png)

- クラスター詳細ページ
![](https://docs.databricks.com/_images/clone-details.png)

クローン元のクラスターの設定が入力された状態でクラスター作成画面が表示されます。以下の情報はクローン先のクラスターには適用されません：

- クラスターのアクセス権
- ライブラリ
- アタッチされたノートブック

# クラスターのアクセス権設定

[Admin Console(英語)](https://docs.databricks.com/administration-guide/admin-console.html)における、クラスターアクセス権によって、他のユーザーに対するきめ細かいアクセス権設定権限をユーザーに移譲することができます。大きく、2つのタイプのアクセス制御があります：

1. クラスター作成権限: 管理者はどのユーザーがクラスターを作成できるのかを選択できます。
![](https://docs.databricks.com/_images/acl-allow-user.png)

1. クラスター単位の権限設定: クラスターに対して**Can manage**権限を有している場合には、クラスターアクションにある![](https://docs.databricks.com/_images/permissions-icon.png)のアイコンをクリックすることで、どのユーザーがクラスターにアタッチ、再起動、サイズ変更できるのかを設定することができます。
![](https://docs.databricks.com/_images/acl-list.png)

クラスターアクセス権、クラスター単位の権限をどのように設定するのかに関しては、[Cluster access control(英語)](https://docs.databricks.com/security/access-control/cluster-acl.html)を参照ください。

# クラスターの起動

新たなクラスターを作成するのに加えて、以前[停止](#クラスターの停止)したクラスターを起動することができます。これにより、元の設定を保持したまま、以前停止したクラスターを再作成することができます。

以下の方法でクラスターを起動することができます：

- クラスター一覧
![](https://docs.databricks.com/_images/start-list.png)

- クラスター詳細ページ
![](https://docs.databricks.com/_images/start-details.png)

- ノートブックの![](https://docs.databricks.com/_images/cluster-icon.png)クラスターアタッチのドロップダウンリスト
![](https://docs.databricks.com/_images/start-from-notebook.png)

[Start API(英語)](https://docs.databricks.com/dev-tools/api/latest/clusters.html#clusterclusterservicestartcluster)を利用することで、プログラムからクラスターを起動することができます。

Databricksにおいては、[cluster ID(英語)](https://docs.databricks.com/dev-tools/api/latest/clusters.html#clusterclusterinfo)でクラスターを一意に特定します。停止したクラスターを起動した場合、Databricksは同じIDでクラスターを再作成し、ライブラリをインストールし、ノートブックを再アタッチします。

## ジョブにおけるクラスターの自動起動

既存の停止クラスターにアサインされたジョブ実行がスケジュールされた、あるいは、JDBC/ODBCインタフェースから停止クラスターに接続された場合には、クラスターは自動で再起動されます。詳細は[Create a job(英語)](https://docs.databricks.com/jobs.html#job-create)、[JDBC connect(英語)](https://docs.databricks.com/integrations/bi/jdbc-odbc-bi.html#workspace-cluster)を参照ください。

クラスター自動起動を用いることで、ジョブスケジュールのために手動でクラスターを再起動することなしに、クラスターの自動停止を設定することができます。さらに、停止クラスターに対してジョブをスケジュールすることで、クラスターの初期化処理をスケジュールすることができます。

自動でクラスターが再起動する前に、[クラスター(英語)](https://docs.databricks.com/security/access-control/cluster-acl.html)と[ジョブ(英語)](https://docs.databricks.com/security/access-control/jobs-acl.html)のアクセス権が確認されます。

> **注意**
Databricksプラットフォームバージョン2.70以前でクラスターが作成された場合、自動起動を利用することはできません。停止クラスターに対してジョブがスケジュールされた場合失敗します。

# クラスターの停止

クラスターのリソースを保存するために、クラスターを停止することができます。停止クラスターでノートブックやジョブを実行することはできませんが、後で[再利用](#クラスターの起動)(ジョブの場合は[自動起動](#ジョブにおけるクラスターの自動起動))できるように設定情報を保存することができます。手動で停止することもできますし、一定時間使われない場合に自動停止するように設定することもできます。Databricksはいつクラスターが停止したのかを記録します。停止クラスターの数が150を超えた場合には、古いものから削除します。
![](https://docs.databricks.com/_images/termination-reason.png)

> **注意**
新たなジョブクラスターでジョブを実行(推奨です)する際、ジョブが完了するとクラスターは停止し、これを起動することはできません。一方で、停止している既存all-purposeクラスターでジョブをスケジュールした場合、そのクラスターは[自動起動](#ジョブにおけるクラスターの自動起動)します。

## 手動停止

以下の方法で手動停止を行うことができます。

- クラスター一覧
![](https://docs.databricks.com/_images/terminate-list.png)

- クラスター詳細ページ
![](https://docs.databricks.com/_images/terminate-details.png)

## 自動停止

クラスターの自動停止を設定することもできます。クラスター作成時に、クラスターを自動停止する不活性時間を指定することができます。最後にクラスターでコマンドが実行された時間と現在時刻の差が、指定された不活性時間を上回った場合、Databricksはクラスターを自動で停止します。

Sparkジョブ、構造化ストリーミング、JDBC呼び出しを含むクラスター上の全てのコマンドの実行が終了した際に、クラスターは不活性状態とみなされます。ここには、クラスターへのSSH接続を介したbashコマンドの実行は含まれません。

> **警告!**

> - クラスターはDStreamsの実行結果をレポートしません。すなわち、DStreams実行中にクラスターが自動停止される場合があります。DStreamを実行するクラスターで自動停止を無効にするか、構造化ストリーミングの利用をご検討ください。
- 自動停止はSparkジョブのみを監視し、ユーザー定義のローカルプロセスは監視しません。そのため、全てのSparkジョブが完了した場合、ローカルプロセスが稼働していたとしても、クラスターが自動停止する場合があります。
- 停止するまでは、不活性状態のクラスターでもDBUは消費され、クラウドサービスのインスタンスに対する課金も発生します。

### 自動停止の設定

クラスター作成ページの**Autopilot Options**における**Auto Termination**ボックスで自動停止の設定を行うことができます。
![](https://docs.databricks.com/_images/autopilot-aws.png)

> **重要!**
クラスター作成時に、[標準クラスター、ハイコンカレンシークラスター(英語)](https://docs.databricks.com/clusters/configure.html#cluster-mode)を選択するのかに応じて、自動停止のデフォルト値が異なります。

> - 標準クラスターは、120分経過後に自動停止します。
- ハイコンカレンシークラスターでは、自動停止は設定されません。

Auto Terminationのチェックボックスを外すか、不活性状態の時間を`0`にすることで、自動停止をオプトアウトすることができます。

> **注意**
自動停止機能は、最新のSparkで最適な動作をします。古いSparkバージョンにおいては、クラスターの活動を正確に報告しないなどの制限があります。例えば、JDBC、R、ストリーミングコマンドが古い活動時刻を報告し、不適切なクラスター停止につながる場合があります。バグフィクス、自動停止の改善などの恩恵を享受するために最新のSparkをご利用くだしあ。

## 予期しない停止

まれに、手動停止や自動停止によらず、予期せずにクラスターが停止することがあります。停止の理由や対策に関しては、[Knowledge Base(英語)](https://kb.databricks.com/clusters/termination-reasons.html)を参照ください。

# クラスターの削除

クラスターの削除により、クラスターは停止され設定が削除されます。

> **警告!**
このアクションを取り消すことはできません。

[ピン留め](#クラスターのピン留め)されたクラスターを削除することはできません。削除するためには、管理者によってピンを解除する必要があります。

クラスターを削除するには、[クラスター一覧](#クラスターの表示)にあるクラスターアクションの![](https://docs.databricks.com/_images/delete-icon.png)アイコンをクリックします。

[Permanent delete API(英語)](https://docs.databricks.com/dev-tools/api/latest/clusters.html#clusterclusterservicepermanentdeletecluster)を使用することで、プログラムからクラスターを削除することができます。

![](https://docs.databricks.com/_images/delete-list.png)

# Apache Spark UIでのクラスター情報の参照

Sparkジョブの詳細をSpark UIで参照することができます。以下の方法でSpark UIにアクセスすることができます：

- クラスター一覧: クラスターの行に表示される**Spark UI**リンクをクリックします
- クラスター詳細ページ: **Spark UI**タブをクリックします

Spark UIは稼働中のクラスター、停止中のクラスター両方で表示することができます。
![](https://docs.databricks.com/_images/spark-ui-aws.png)

> **注意**
停止クラスターが再起動すると、Spark UIには停止していたクラスターではなく、新たに起動したクラスターの情報が表示されます。

# クラスターログの参照

Databricksは3種類のクラスター関連ログを提供します：

- [クラスターイベントログ](#クラスターイベントログ): 作成、停止、設定変更などクラスターのライフサイクルイベントを捕捉します。
- [Apache Sparkドライバー、ワーカーログ](#クラスターのドライバーノードワーカーノードのログ): デバッグに活用できます。
- クラスターinit-scriptログ: init scriptのデバッグに活用できます。

## クラスターイベントログ

クラスターイベントログには、ユーザーによって手動で実行されたライフサイクルイベント、Databricksによって自動で実行されたライフサイクルイベントが含まれます。これらのイベントはクラスターのオペレーション、クラスターにおけるジョブの実行に影響を与えるものです。

サポートされているイベントタイプに関しては、REST APIの[ClusterEventType(英語)](https://docs.databricks.com/dev-tools/api/latest/clusters.html#clustereventsclustereventtype)を参照ください。

### クラスターイベントログの参照

1. サイドバーのclustersアイコンをクリックします。
![](https://docs.databricks.com/_images/clusters-icon.png)

1. クラスター名をクリックします。
1. **Event Log**タブをクリックします。
![](https://docs.databricks.com/_images/cluster-event-log.png)

イベントをフィルタリングするには、**Filter by Event Type…**の![](https://docs.databricks.com/_images/menu-dropdown.png)をクリックし、一つ以上のイベントタイプにチェックを付けます。

特定のイベントを除外したい場合には、**Select all**を使うと便利です。
![](https://docs.databricks.com/_images/cluster-event-log-filter.gif)

### イベント詳細の参照

イベントの詳細を参照したい場合には、ログの行をクリックし、**JSON**タブをクリックします。
![](https://docs.databricks.com/_images/cluster-event-details.png)

## クラスターのドライバーノード、ワーカーノードのログ

ノートブック、ジョブ、ライブラリからの出力結果を参照するには、Sparkドライバーログを参照します。このログには以下の3種類のアウトプットが含まれます。

- 標準出力(Standard output)
- エラー出力(Standard error)
- Log4j logs

UIからこれらのドライバーログにアクセスするには、クラスター詳細ページの**Driver Logs**にアクセスします。
![](https://docs.databricks.com/_images/driver-logs.png)

ログファイルは定期的にローテートされます。ページ上部から古いログから順にタイムスタンプと共に表示されます。トラブルシューティングのためにこれらのファイルをダウンロードできます。

ワーカーノードのログを参照するには、Spark UIを使用します。また、クラスターログの[出力先を設定(英語)](https://docs.databricks.com/clusters/configure.html#cluster-log-delivery)することができます。指定された格納場所に、ドライバーノード、ワーカーノードのログを保存することができます。

# パフォーマンス監視

Databricksクラスターの性能を監視するために、Databricksでは、クラスター詳細ページから[Ganglia](http://ganglia.sourceforge.net/)のメトリクスにアクセスすることができます。

また、[Datadog](https://www.datadoghq.com/)のエージェントをクラスターにインストールし、あなたのDatadogアカウントにメトリクスを送信することができます。

## Gangliaのメトリクス

GangliaのUIにアクセスするためには、クラスター詳細ページの**Metrics**タブにアクセスします。CPUメトリクスに関しては、Databricksランタイム全てのGanglia UIで参照することができます。GPUメトリクスはGPUが有効化されたクラスターでのみ参照できます。
![](https://docs.databricks.com/_images/metrics-tab.png)

メトリクスを参照するには、**Ganglia UI**リンクをクリックします。

過去のメトリクスを参照するには、スナップショットファイルをクリックします。スナップショットには、指定された時間までに蓄積されたメトリクスが含まれます。

## メトリクス収集の設定

デフォルトでは、Databricksは15分間隔でGangliaのメトリクスを収集します。この周期を変更するには、[init script(英語)](https://docs.databricks.com/clusters/init-scripts.html)か[Cluster Create API(英語)](https://docs.databricks.com/dev-tools/api/latest/clusters.html#clusterclusterservicecreatecluster)の`spark_env_vars`フィールドを用いて、環境変数`DATABRICKS_GANGLIA_SNAPSHOT_PERIOD_MINUTES`を設定します。

## Datadogのメトリクス

![](https://docs.databricks.com/_images/datadog-metrics.png)

クラスターにDatadogのエージェントをインストールし、Datadogのアカウントにメトリクスを送信することができます。以下のノートブックでは、[クラスタースコープのinit script(英語)](https://docs.databricks.com/clusters/init-scripts.html#cluster-scoped-init-script)を用いて、どのようにDatadogのエージェントをインストールするのかを説明しています。

- [Datadog Init Script Working \- Databricks](https://docs.databricks.com/_static/notebooks/datadog-init-script.html)

### Databricks 無料トライアル

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