Spark ジョブ間のギャップ
次のように、ジョブのタイムラインにギャップが表れます。
これが発生する可能性がある理由はいくつかあります。 ワークロードに費やされた時間の割合の多くをギャップが占める場合は、これらのギャップの原因と、これが想定どおりかどうかを把握する必要があります。 ギャップの間に発生する可能性がある事柄はいくつかあります。
- 実行する作業がない
- ドライバーが複雑な実行プランをコンパイル中
- Spark 以外のコードの実行
- ドライバーがオーバーロード
- クラスターの誤動作
作業がない
All-Purpose Compute では、実行する作業がないことが、ギャップの説明として最も可能性が高いと考えられます。 クラスターが実行されており、ユーザーがクエリを送信しているため、ギャップが発生すると予想されます。 これらのギャップは、クエリの送信の間の時間です。
実行プランが複雑
たとえば、ループで withColumn()
を使用すると、処理にかかるコストが非常に高い計画が作成されます。 ギャップは、ドライバーがこの計画の構築と処理に費やしている時間である可能性があります。 その場合は、コードを簡略化してみてください。 複数の withColumn()
呼び出しを 1 つの式に結合するか、コードを SQL に変換するために、selectExpr()
を使用します。 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 以降にある場合は、次のスクリーンショットで強調表示されている [メトリック] をクリックします。
サーバーの負荷分散の視覚化に注目してください。 ドライバーの負荷が高いかどうかを確認する必要があります。 この視覚化には、クラスター内の各マシンに色のブロックがあります。 赤は大きな負荷を意味し、青は負荷がまったくないことを意味します。
前のスクリーンショットは、基本的にアイドル状態のクラスターを示しています。 ドライバーがオーバーロードされている場合、次のように見えます。
1 つの正方形が赤で、もう 1 つの正方形が青であることがわかります。 赤い正方形の上にマウスを移動し、赤いブロックがドライバーを表していることを確認します。
オーバーロードされたドライバーを修正するには、Spark ドライバーのオーバーロードに関して参照してください。
クラスターの誤動作
クラスターの誤動作が起きるのはめったにありませんが、起きた場合、その事象を判断するのは難しいことがあります。 クラスターを単に再起動し、問題が解決するかどうかを確認できる場合もあります。 または、ログを調べ、疑わしい点があるかどうかを確認することもできます。 次のスクリーンショットに強調表示されている [イベント ログ] タブと [ドライバー ログ] タブが、このときの注目箇所です。
ワーカーのログにアクセスするために、[クラスター ログの配信] を有効にできます。 ログ レベルを変更することもできますが、Databricks アカウント チームに連絡してサポートを求める必要がある場合があります。