Databricksクラスター起動に関するトラブルシュート

[Cluster failed to launch \- Databricks](https://kb.databricks.com/clusters/cluster-failed-launch?from_search=110458579) [2022/3/4時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

本書では、クラスターの起動に失敗するいくつかのシナリオを説明し、ログに表示されるエラーメッセージに基づいてそれぞれのシナリオにおけるトラブルシュートのステップを説明します。

# クラスターのタイムアウト

エラーメッセージ:

```
Driver failed to start in time
INTERNAL_ERROR: The Spark driver failed to start within 300 seconds
Cluster failed to be healthy within 200 seconds
```

## 原因

外部のHiveメタストアに接続しており、MavenリポジトリからすべてのHiveメタストアライブラリをダウンロードしようとする際、起動に失敗することがあります。クラスターは依存関係を含む約200個のJARファイルをダウンロードします。Databricksのクラスターマネージャがドライバーノードが5分以内に準備できたことを確認できない場合、起動に失敗します。これは、JARのダウンロードに時間がかかりすぎることによって発生します。

## 解決策

HiveのライブラリをDBFSに格納し、DBFSロケーションからローカルにアクセスしてください。[Spark Options](https://docs.databricks.com/data/metastores/external-hive-metastore.html#spark-options)をご覧ください。


# グローバルあるいはクラスターのinitスクリプト

エラーメッセージ:

```
The cluster could not be started in 50 minutes. Cause: Timed out with exception after <xxx> attempts
```

## 原因

クラスターの起動ステージにおいて実行されるinitスクリプトは、スクリプトをワーカーのローカルで実行するためにそれぞれのワーカーマシンにRPC(リモートプロシージャコール)を送信します。すべてのRPCはプロセスを継続する前に自分のステータスを返信しなくてはなりません。(ネットワークの問題などによって)いずれかのRPCに問題が生じて返信せず、1時間のタイムアウトになる場合があり、結果としてセットアップのジョブが失敗します。

## 解決策

グローバルやクラスター固有のinitスクリプトではなく、[クラスタースコープのinitスクリプト](https://qiita.com/taka_yayoi/items/88cb46be00a175085f87#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97init%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88)を使用してください。クラスタースコープのinitスクリプトでは、Databricksはinitスクリプトの実行ステータスを取得するためにRPCの同期ブロックを使用しません。

# クラスターUIでインストールしたライブラリが多すぎる

エラーメッセージ:

```
Library installation timed out after 1800 seconds. Libraries that are not yet installed:
```

## 原因

これは、通常はネットワークの問題に起因する一時的な問題です。

## 解決策

通常は、ジョブを再実行するかクラスターを再起動することでこの問題を解決することができます。

ライブラリのインストーラーは3分後にタイムアウトになるように設定されています。JARを取得し、インストールしている際にも、ネットワーク問題によってタイムアウトが発生することがあります。この問題を回避するために、MavenからDBFSロケーションにライブラリをダウンロードし、そこからライブラリをインストールすることができます。

# クラウドプロバイダーの制限

エラーメッセージ:

```
Cluster terminated. Reason: Cloud Provider Limit
```

## 原因

通常このエラーはクラウドプロバイダーによって引き起こされます。

## 解決策

[Databricksクラスターの予期しない停止への対応方法](https://qiita.com/taka_yayoi/items/d32fb1e1d7e56a5044c5)におけるクラウドプロバイダーのエラー情報をご覧ください。

# クラウドプロバイダーによるシャットダウン

エラーメッセージ:

```
Cluster terminated. Reason: Cloud Provider Shutdown
```

## 原因

通常このエラーはクラウドプロバイダーによって引き起こされます。

## 解決策

[Databricksクラスターの予期しない停止への対応方法](https://qiita.com/taka_yayoi/items/d32fb1e1d7e56a5044c5)におけるクラウドプロバイダーのエラー情報をご覧ください。

# インスタンスに到達できない(Azure)

エラーメッセージ:

```
Cluster terminated. Reason: Instances Unreachable
An unexpected error was encountered while setting up the cluster. Please retry and contact Azure Databricks if the problem persists. Internal error message: Timeout while placing node
```

## 原因

通常このエラーはクラウドプロバイダーによって引き起こされます。特に、(新規のAzure Databricksワークスペースを起動する際に作成されるデフォルトのVNetではなく)[自分のバーチャルネットワーク(VNet)にAzure Databricksワークスペースをデプロイ](https://docs.microsoft.com/azure/databricks/administration-guide/cloud-configurations/azure/vnet-inject)した際に発生します。ワークスペースがデプロイされているバーチャルネットワークがすでにオンプレミスのリソースに対するExpressRoute接続とピアリングしてるあるいは接続を有している場合、Azure Databricksがクラスターを作成しようとした際、バーチャルネットワークはクラスターノードにssh接続を行うことができません。

## 解決策

クラスターインスタンス、Blobストレージインスタンス、アーティファクトのリソースに対するsshアクセスをAzure Databricksコントロールプレーンに与えるために、ユーザー定義ルート(UDR)を追加します。このカスタムUDRによって、アウトバウンドの通信が可能となり、クラスター作成を阻害しません。UDRの詳細手順に関しては、[Step 3: Create user\-defined routes and associate them with your Azure Databricks virtual network subnets](https://docs.microsoft.com/azure/databricks/administration-guide/cloud-configurations/azure/on-prem-network#create-routes)をご覧ください。VNetに関連するトラブルシュートの情報に関しては、[Troubleshooting](https://docs.microsoft.com/azure/databricks/administration-guide/cloud-configurations/azure/vnet-inject#troubleshooting)をご覧ください。

### Databricks 無料トライアル

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