Unexpected cluster termination - Databricks [2022/3/4時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
手動による停止や設定された自動停止によるものではなく、予期せずクラスターが停止されることがあります。さまざまな理由によってクラスターが停止されることがあります。ある停止処理はDatabricksによって行われ、他のものはクラウドプロバイダーによって行われます。本書では、停止の理由と対応ステップを説明します。
Databricksによるリクエスト制限超過による停止
APIの濫用を防ぎ、サービスの品質を担保し、皆様が誤って大量のクラスターを作成することを防ぐために、Databricksではクラスターの作成、起動、リサイズを含む全てのクラスターのサイズを増加させるリクエストのスロットリングを行っています。スロットリングでは、特定サイズのリクエストのバーストを許容しつつも、皆様のDatabricksデプロイメントにおいて定義された間隔で皆様が起動できるノードの総数を制限するためにトークンバケットアルゴリズムを採用しています。ウェブUIとAPIの両方からのリクエストはレート制限の対象となります。クラスターのリクエストがレート制限を超えると、制限を超えたリクエストはREQUEST_LIMIT_EXCEEDED
エラーで失敗します。
解決策
正当なワークフローにおいて制限に到達した場合は、以下のことを行うことを推奨しています。
- 数分後にリクエストをリトライします。
- 計画された時間フレームで繰り返されるワークフローを均等に分散します。例えば、1時間ごとに全てのジョブをスケジュールするのではなく、1時間で異なる間隔にジョブを分散します。
- クラスターをより大きなノードタイプにし、ノード数を削減することを検討します。
- オートスケーリングクラスターを使用します。
これらの選択肢がうまく行かない場合、コア数に対する制限増加をリクエストするためにDatabricksサポートにコンタクトしてください。
Databricksによる他の停止理由に関しては、Termination Codeをご覧ください。
クラウドプロバイダーによる停止
本セクションでは、クラウドプロバイダーに関連する停止理由と多王ステップを説明します。
プロバイダーの制限(AWS)
Databricksでは、皆様のクラウドアカウントに代わってリソースをリクエストすることでクラスターを起動します。時には、これらのリクエストはお使いのクラウドプロバイダーのリソース制限を上回ることで失敗します。AWSにおいては、一般的なエラーには以下のようなものがあります。
InstanceLimitExceeded
AWSではノードタイプごとに稼働できるインスタンスの数を制限しています。解決策には以下のようなものがあります。
- ノード数を減らしてクラスターを起動します。
- 別のノードタイプでクラスターを起動します。
- AWSのサポートにインスタンス制限の増加をリクエストします。
Client.VolumeLimitExceeded
クラスター作成リクエストでEBSボリュームの制限を上回りました。AWSでは2種類のボリューム制限があります: EBSボリュームの総数に対する制限とEBSボリュームのトータルストレージ容量の制限です。対応法には以下のようなものがあります。
- ノード数を減らしてクラスターを起動します。
- 上述の2つの制限を超えていないかを確認します。(AWS trusted advisorは無料でサービス制限を表示します)。リクエストがEBSボリュームの総数を超えているのであれば、ノードあたりのボリューム数を削減することを検討してください。トータルサイズを超えているのであれば、EBSのストレージサイズ、あるいは総数を削減することを検討してください。
- AWSのサポートにEBSボリューム制限の増加をリクエストします。
RequestLimitExceeded
AWSではアカウントにおけるAPIリクエストのレートに制限を課しています。リクエストを再トライする前にしばらくお待ちください。
プロバイダーによるシャットダウン(AWS)
Sparkドライバーは全てのクラスターの状態を保持するので、単一障害点となります。ドライバーノードをホスティングしているインスタンスがシャットダウンされると、Databricksはクラスターを停止します。AWSでは、一般的なエラーコードは以下のようなものとなります。
Client.UserInitiatedShutdown
DatabricksではなくAWSに対する直接のリクエストによってインスタンスが停止されました。詳細はAWS管理者にお問い合わせください。
Server.InsufficientInstanceCapacity
AWSでインスタンスのリクエストを充当することができませんでした。しばらく待ってからリクエストを試行してください。問題が継続する場合にはAWSサポートにお問い合わせください。
Server.SpotInstanceTermination
現在のスポット価格が当該インスタンスの最大ビッド費用を上回ったので、AWSによってインスタンスが停止されました。ドライバーではオンデマンドインスタンスを使用し、別のアベイラビリティゾーンを選択するか、より高いスポットビッド価格を指定してください。
そのほかのシャットダウンに関するエラーコードについては、AWS docsをご覧ください。
起動の失敗
AWS
AWSでの一般的なエラーコードは以下のようなものとなります。
UnauthorizedOperation
リクエストされたインスタンスを起動する権限がDatabricksに許可されていません。可能性のある理由には以下のようなものがあります。
- あなたの組織のAWS管理者がインスタンスを起動するために使用されるAWSアクセスキーやIAMロールを無効化しました。
- Databricksが使用できる権限を持たないIAMロールを用いてクラスターを起動しようとしました。IAMロールをセットアップしたAWS管理者にお問い合わせください。詳細については、Databricksにおけるインスタンスプロファイルを用いたS3バケットへのセキュアなアクセスをご覧ください。
Unsupported with message “EBS-optimized instances are not supported for your requested configuration”
選択されたインスタンスタイプは、指定されているアベイラビリティゾーン(AZ)で利用できません。EBS最適化が有効化されたとしても、実際のところできることはありません。対策としては、別のインスタンスタイプかAZを選択してください。
AuthFailure.ServiceLinkedRoleCreationNotPermitted
指定された資格情報には、EC2スポットインスタンスに対するサービスリンクのロールを作成する権限がありません。Databricksの管理者はお使いのアカウントでインスタンスを起動するために使用される資格情報をアップデートする必要があります。手順や更新されたポリシーについては、AWS Accountをご覧ください。
AWSエラーコードの完全なリストについては、Error Codesをご覧ください。
Azure
こちらの停止理由は、Azure Databricksがバーチャルマシンの取得に失敗した際に発生します。APIのエラーコードとメッセージは、問題のトラブルシュートに役立ちます。
OperationNotAllowed
お使いのサブスクリプションで起動できるコア数などのクォータ制限に到達しました。Azureポータルから制限増加のリクエストをしてください。Azure subscription and service limits, quotas, and constraintsをご覧ください。
PublicIPCountLimitReached
稼働させることのできるパブリックIP数の制限に到達しました。Azureポータルから制限増加のリクエストをしてください。
SkuNotAvailable
選択した(VMサイズなどの)リソースSKUは選択しているロケーションで利用できません。解決するには、Resolve errors for SKU not availableをご覧ください。
ReadOnlyDisabledSubscription
お使いのサブスクリプションが無効化されました。サブスクリプションを再アクティベートするには、Why is my Azure subscription disabled and how do I reactivate it?のステップに従ってください。
ResourceGroupBeingDeleted
誰かがAzureポータルでAzure Databricksワークスペースをキャンセルし、同時にクラスターを作成しようとした際に発生することがあります。リソースグループが削除されたためクラスターは失敗します。
SubscriptionRequestsThrottled
お使いのサブスクリプションは、Azureリソースマネージャのリクエスト制限に到達しました(Throttling Resource Manager requestsをご覧ください)。典型的な原因は、Azure Databricks外の別のシステムがAzureに対して大量のAPI呼び出しを行なっているというものです。このシステムを特定するためにAzureサポートにコンタクトし、API呼び出し数を削減してください。
通信のロスト
Databricksはクラスターを起動できていましたが、Sparkドライバーをホスティングするインスタンスへの接続を失いました。
AWS
適切なネットワーク設定(Databricksワーカーのセキュリティグループの設定変更など)あるいは一過的なAWSネットワークの問題によって引き起こされます。
Azure
ドライバーのバーチャルマシンの停止やネットワーク問題によって引き起こされます。