メインコンテンツまでスキップ

Spark ジョブ間のギャップ

ジョブのタイムラインにおけるギャップは、Spark ジョブが実行されていない期間です。ギャップの間、ワーカーは通常アイドル状態ですが、クラスターには課金されます。ギャップがワークロードの実行時間の大部分を占める場合、ワークロードはSparkの作業だけで必要な時間よりも時間がかかり、コストもかかります。

ジョブタイムラインで、パイプラインの中間に1分以上のギャップが表示される場合にこのページを使用してください。例:

ジョブギャップ

ドライバーが作業を調整している間、短いギャップが予想されます。タイムラインに長時間のジョブなど異なるパターンが表示される場合は、他のパターンについてジョブのタイムラインを確認し、このガイドの他のページを使用して問題を診断してください。Spark UIを使用したコストとパフォーマンスの問題の診断を参照してください。

ギャップが予想されるかどうかを判断するには、その間にクラスターが何をしているかを把握します。最も一般的な原因は次のとおりです。

処理がない​

汎用コンピュートでは、ギャップは通常、クラスターにやることがないことを意味します。たとえば、ユーザーは断続的にクエリーを送信するため、クラスターはそれらの間でアイドル状態になります。コストを削減するために、Databricksはアイドリング時間に対して支払う必要がないServerlessコンピュートの使用を推奨しています。

複雑な実行計画​

ドライバーが複雑な実行計画を構築および処理するのに時間がかかる場合があります。その期間中はSparkジョブが実行されないため、ジョブタイムラインにはギャップが表示されます。例えば、ループ内でwithColumn()を呼び出すと、非常にコストの高いプランが作成されます。これを修正するには、コードを簡略化します。selectExpr()を使用して複数のwithColumn()呼び出しを単一の式に結合するか、コードをSQLに変換します。SQLをPythonコードに埋め込み、Python文字列関数を使用してクエリーを構築できます。

Spark 以外のコードの実行​

Sparkコードは、SQLまたはPySparkなどのSpark APIを使用します。Spark を使用しないコードは、タイムラインにギャップとして表示されます。たとえば、ネイティブの Python 関数を呼び出す Python ループは、Spark の外部で実行されます。コードが Spark を実行しているかどうかわからない場合は、ノートブックで対話的に実行してください。コードが Spark を使用している場合、セルの下に Spark ジョブが表示されます。

Spark の実行

それらのジョブがまだ実行中かどうかを確認するには、セル下の Spark ジョブ ドロップダウンを展開します。コードで Spark を使用していない場合、セルに Spark ジョブ が表示されないか、ジョブが実行されていません。コードを対話的にランできない場合は、コードにログ記録を追加し、Timestamp を使用してギャップをコードのセクションと照合します。そのアプローチはトリッキーかもしれません。

タイムラインにSpark以外のコードの実行によるギャップが表示される場合、ギャップの間、ワーカーはアイドル状態になりますが、料金は発生し続けます。意図的でない場合は、Sparkを使用するようにコードを書き換えて、クラスターを十分に活用してください:

非Sparkコードが必要な場合は、Serverless コンピュートの利用を検討してください。アイドル時間に対して料金を支払う必要はありません。このアプローチにより、コストを大幅に削減できる可能性があります。

ドライバーが過負荷です​

ドライバーが過負荷になっているかどうかを確認するには、クラスター メトリクスを確認してください。Databricks Runtime 13.0以降では、このスクリーンショットで強調表示されているように、 メトリクス をクリックしてください:

新たなクラスター メトリクス

[Server load distribution] の視覚化 で、ドライバーに大きな負荷がかかっていないかどうかを確認してください。視覚化には、クラスター内の各マシンの色のブロックがあります。赤は重負荷を意味し、青は負荷がかかっていないことを意味します。

前のスクリーンショットは、ほとんどアイドル状態のクラスターを示しています。ドライバーが過負荷になっている場合、視覚化は次のようになります。

新たなメトリクス、ドライバーが過負荷

この例では、1つの四角が赤で、他は青です。赤い四角にカーソルを合わせると、それがドライバーを表していることを確認できます。

過負荷のドライバーを修正するには、「 Spark ドライバーの過負荷」を参照してください。

クラスターが誤動作しています​

クラスターの誤動作はまれですが、その場合は原因を見つけるのが難しい場合があります。クラスターを再起動して、問題が解決するかどうかを確認します。ログに疑わしいものがないか確認するには、次のスクリーンショットで強調表示されている イベント Logs と ドライバー Logs tabを使用します。

ドライバー ログの取得

ワーカーのログにアクセスするには、クラスター ログ配信を有効にしてください。ログ レベルを変更することもできますが、Databricks アカウント チームのサポートが必要になる場合があります。