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

Spark ジョブ間のギャップ

そのため、ジョブのタイムラインには次のようなギャップがあります。

ジョブギャップ

これにはいくつかの理由が考えられます。 ギャップがワークロードに費やされる時間の大部分を占めている場合は、これらのギャップの原因と、それが予想されているかどうかを把握する必要があります。 ギャップの間には、いくつかのことが考えられます。

  • やるべき仕事はありません
  • ドライバーが複雑な実行プランをコンパイルしています
  • 非スパークコードの実行
  • ドライバーが過負荷です
  • クラスターが誤動作しています

仕事なし

万能コンピュートでは、やることがないことがギャップの説明として最も可能性が高いです。クラスターが実行されており、ユーザーがクエリを送信しているため、ギャップが予想されます。 これらのギャップは、クエリの送信間の時間です。

複雑な実行計画

たとえば、ループで withColumn() を使用すると、処理に非常にコストのかかるプランが作成されます。 ギャップは、ドライバーが単に計画を作成して処理するのに費やしている時間である可能性があります。 このような場合は、コードを簡略化してみてください。 selectExpr() を使用して、複数の withColumn() 呼び出しを 1 つの式に結合したり、コードを SQL に変換したりします。Python コードに SQL を埋め込むことはでき、Python を使用して文字列関数でクエリを操作します。 これにより、多くの場合、このタイプの問題が解決されます。

Spark 以外のコードの実行

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

Spark の実行

セルの下にある Spark ジョブ ドロップダウンを展開して、ジョブがアクティブに実行されているかどうかを確認することもできます (Spark がアイドル状態の場合)。 Spark を使用していない場合は、セルの下に Spark ジョブ が表示されないか、アクティブなジョブがないことがわかります。 コードを対話形式で実行できない場合は、コードにログインしてみて、タイム スタンプでコードのセクションとギャップを一致させることができるかどうかを確認できますが、それには注意が必要です。

Spark 以外のコードの実行によってタイムラインにギャップが生じている場合は、ワーカー全員がアイドル状態であり、ギャップの間にお金を浪費している可能性があります。 これは意図的で避けられないかもしれませんが、このコードを Spark に記述できれば、クラスターを十分に活用できます。 このチュートリアルから始めて、Spark の操作方法を学習します。

ドライバーが過負荷です

ドライバーが過負荷になっているかどうかを判断するには、クラスター メトリクスを確認する必要があります。

クラスターが DBR 13.0 以降にある場合は、次のスクリーンショットで強調表示されているように [メトリクス ] をクリックします。

New クラスター メトリクス

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

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

New メトリクス, Busy Driver

1つの正方形が赤で、他の正方形が青であることがわかります。 赤い四角の上にマウスを移動して、赤いブロックがドライバーを表していることを確認します。

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

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

クラスターの誤動作はまれですが、その場合は、何が起こったのかを判断するのが難しくなる可能性があります。 クラスターを再起動して、問題が解決するかどうかを確認することもできます。 また、ログを調べて、疑わしいものがないか確認することもできます。 次のスクリーンショットで強調表示されている [イベント ログ タブ] タブと [ドライバー ログ ] タブが、確認する場所になります。

ドライバー ログの取得

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