この記事では、拡張された Apache Spark History Server を使用して、完成して実行されている Apache Spark アプリケーションのデバッグおよび診断を行う方法に関するガイダンスを提供します。
Apache Spark History Server へのアクセス
Apache Spark 履歴サーバーは、完了および実行中の Spark アプリケーションの Web ユーザー インターフェイスです。 Apache Spark Web ユーザー インターフェイス (UI) は、進行状況インジケーター ノートブックまたは Apache Spark アプリケーションの詳細ページから開くことができます。
進行状況インジケーター ノートブックから Spark Web UI を開く
Apache Spark ジョブがトリガーされると、Spark Web UI を開くボタンが、進行状況インジケーターの [その他のアクション] オプション内にあります。 [Spark Web UI] を選択し、数秒待つと、Spark UI ページが表示されます。
Apache Spark アプリケーションの詳細ページから Spark Web UI を開く
Spark Web UI は、Apache Spark アプリケーションの詳細ページから開くこともできます。 ページの左側にある [監視 ] を選択し、Apache Spark アプリケーションを選択します。 アプリケーションの詳細ページが表示されます。
状態が実行中の Apache Spark アプリケーションの場合、ボタンに [Spark UI] とが表示されます。 [Spark UI] を選択すると、Spark UI ページが表示されます。
終了した状態の Apache Spark アプリケーションの場合、終了状態は [停止]、[失敗]、[キャンセル済み]、または [完了] のいずれかになります。 ボタンには [Spark 履歴サーバー] と表示されます。 [Spark 履歴サーバー] を選択すると、Spark UI ページが表示されます。
大規模イベントログ向けのスナップショットベースの読み込み
新しいスナップショット ベースの読み込み方法が Spark History Server に導入され、大規模なイベント ログ シナリオ向けに最適化されました。
この機能強化により、Spark UI では、完全な再生が完了するのを待つ代わりに、使用可能なデータが徐々に表示されます。 イベント ログのサイズが 6 GB以上の場合は、追加の読み込み時間 (通常は数分) が必要であることを示す読み込みメッセージが表示されます。
部分的なスナップショットが使用可能になるとすぐに、そのデータを使用して UI がレンダリングされます。 上部のメッセージ バーは、データがまだバックグラウンドで処理されていることを示します。 完全再生が完了すると、メッセージ バーが自動的に削除され、フル ビューが表示されます。
このエクスペリエンスでは、次のことができます。
- 大きなイベント ログ (≥ 6 GB) の読み込みメッセージが明確に表示されるため、システムが応答しない代わりにアクティブに処理されていることがわかります
- 明確にラベル付けされたプレビュー バナーを使用して部分的なスナップショットを早期に参照し、完全な再生を待たずにジョブとステージを調査できます
- 処理が完了したら、後でページを更新して完全なデータセットを読み込みます
Spark 履歴データが完全に読み込まれると、部分的な読み込みメッセージ バーが表示されなくなり、完全なエクスペリエンスが利用できるようになります。
Apache Spark History Server を探索する
Apache Spark History Server には、イベント ログから Spark アプリケーションの実行の詳細を再構築する Web ベースのユーザー インターフェイス (UI) が用意されています。 これにより、ユーザーは、ランタイム ライフサイクルを超えて、完了したアプリケーションまたは実行中のアプリケーションを分析できます。
History Server UI は複数のタブで構成され、それぞれがアプリケーションの動作、パフォーマンス、およびリソース使用率を理解するための異なる観点を提供します。
ジョブ タブ
[ ジョブ] タブには、Spark アプリケーション内のすべてのジョブの概要が表示されます。
このビューを使用すると、次のことができます。
- ジョブの状態 (実行中、成功、または失敗) を監視する
- ジョブの期間を比較する
- 失敗したジョブまたは実行速度が遅いジョブをすばやく特定する
ステージ タブ
[ ステージ ] タブには、各ステージの詳細な実行情報が表示されます。
このビューを使用すると、次のことができます。
- ステージ レベルのパフォーマンスを分析する
- タスクの分布を確認し、メトリックをシャッフルする
- 偏ったデータや高価な操作などのボトルネックを特定する
ステージ数の制限
パフォーマンスを考慮して、既定では、Spark アプリケーションのステージ数が 500 未満の場合にのみ、グラフを使用できます。 ステージが多すぎると、次のようなエラーで失敗します。
The number of stages in this application exceeds limit (500), graph page is disabled in this case.
これを回避するには、Spark アプリケーションを開始する前に、次の Spark 構成を適用して制限を引き上げてください。
spark.ui.enhancement.maxGraphStages 1000
ただし、このようにすると、ブラウザーでフェッチしてレンダリングするにはコンテンツが大きくなりすぎる場合があり、ページと API のパフォーマンスが低下する可能性があることに注意してください。
[ストレージ] タブ
[ ストレージ ] タブには、キャッシュされたデータに関する情報が表示されます。
このビューを使用すると、次のことができます。
- キャッシュされたデータセットのメモリとディスクの使用状況を理解する
- キャッシュが有効かどうかを確認する
[環境] タブ
[ 環境 ] タブには、ランタイム構成と環境の詳細が一覧表示されます。
このビューを使用すると、次のことができます。
- Spark の構成設定を検査する
- 環境変数と依存関係を確認する
- 構成関連の問題のトラブルシューティング
エグゼキューター タブ
[Executors] タブには、Executor 全体のリソース使用率が表示されます。
このビューを使用すると、次のことができます。
- CPU とメモリの使用率の監視
- Executor 間のタスク分布を分析する
- Executor のエラーまたは不均衡を特定する
「グラフ」タブ
[ グラフ ] タブでは、Spark ジョブの実行を有向非循環グラフ (DAG) として視覚化し、ステージ間の関係を表します。
このビューを使用すると、次のことができます。
- ジョブがステージとその依存関係にどのように分割されるかを理解する
- 全体的なジョブ期間を決定するクリティカル パスを特定する
- 失敗したステージまたは再試行されたステージを検出する
- ジョブの実行を再生して、時間の経過に伴うタスクの進行状況を確認する
このタブは、実行フローを理解し、高レベルのパフォーマンスのボトルネックを特定するために特に役立ちます。
[診断] タブ
[ 診断 ] タブには、次のような高度な分析機能が用意されています。
- データスキュー検出
- 時刻ずれ解析
- 実行プログラムの使用状況の分析
[Data Skew](データ スキュー) 、 [Time Skew](時間のずれ) 、および [Executor Usage Analysis](実行プログラムの使用状況の分析) を確認するには、各タブを選択します。
このタブは、ジョブの実行におけるパフォーマンスのボトルネックと非効率性を特定するのに役立ちます。
[Data Skew](データ スキュー)
[データ スキュー] タブを選択すると、指定されたパラメーターに基づいて、対応する偏りのあるタスクが表示されます。
[パラメーターの指定] - 最初のセクションには、データ スキューの検出に使用するパラメーターが表示されます。 既定の規則は次のとおりです。読み取られたタスク データが、読み取られたタスク データの平均量の 3 倍を超えており、なおかつ 10 MB を超えている。 傾斜したタスクに独自の規則を定義する場合は、パラメーターを選択できます。 Skewed Stage と Skew Char セクションは、それに合わせて更新されます。
傾斜したステージ - 2 番目のセクションには、前に指定した条件を満たす偏りのあるタスクがあるステージが表示されます。 偏りのあるタスクがステージ内に複数ある場合、偏りのあるステージ テーブルには、最も偏りの大きなタスク (たとえば、データ スキューの最大データ) のみが表示されます。
Skew Chart (スキュー グラフ) - スキュー ステージ テーブルの行を選択すると、データの読み取りと実行時間に基づいて、スキュー グラフにさらに多くのタスク分布の詳細が表示されます。 偏りのあるタスクは赤でマークされ、通常のタスクは青でマークされます。 グラフには最大 100 個のサンプル タスクが表示され、タスクの詳細が右下のパネルに表示されます。
時刻のずれ
[Time Skew](時間のずれ) タブには、タスクの実行時間に基づいて偏りのあるタスクが表示されます。
パラメーターの指定 - 最初のセクションには、時間の偏りの検出に使用するパラメーターが表示されます。 時間のずれを検出する既定の条件は、タスクの実行時間が平均実行時間の 3 倍を超えており、なおかつ 30 秒を超えていることです。 必要に応じてパラメーターを変更できます。 [傾斜したステージ] と [Skew Chart] (スキュー グラフ) には、前に説明した [Data Skew] (データ スキュー) タブと同様に対応するステージとタスクの情報が表示されます。
[時間のずれ] を選択すると、 [パラメーターの指定] セクションで設定されたパラメーターに従って、フィルター処理された結果が [傾斜したステージ] セクションに表示されます。 [傾斜したステージ] セクションで項目を選択すると、対応するグラフの下書きがセクション 3 に表示され、タスクの詳細が右下のパネルに表示されます。
実行プログラムの使用状況の分析
この機能は Microsoft Fabric で非推奨になりました。 それでも回避策としてこれを使用する場合は、次のように、URL のパス "/diagnostic" の背後に "/executorusage" を明示的に追加してページにアクセスしてください。
[SQL/DataFrame] タブ
Spark SQL を使用するワークロードの場合、[ SQL ] タブにはクエリ レベルの分析情報が表示されます。
このビューを使用すると、次のことができます。
- クエリ実行プランを分析する
- クエリの期間とパフォーマンスを確認する
注
特定のタブの可用性は、ワークロードの種類と有効な Spark 機能によって異なります。
Spark Executor ローリングログ: 大規模ジョブと長時間実行されるジョブのログを簡単に取得可能
Spark アプリケーションの規模と期間が拡大し続けるにつれて、効率的なログ管理と分析がますます重要になっています。 これらの進化するニーズに対応するために、Spark History Server (完成したアプリケーション用) と Spark UI (実行中のアプリケーション用) の機能強化が導入され、Spark 3.4 以降の Executor ローリング ログが有効になります。
この機能強化により、Executor ログが 16 MB を超えるか、Spark ジョブが 1 時間以上実行されると、システムによってログが 1 時間ごとに自動的に分割されます。 これにより、非常に大きなファイルを処理することなく、ログの移動、表示、ダウンロードが簡単になります。
次のことができるようになりました。
- ログを時間単位で表示して、特定の実行ウィンドウをすばやく特定する
- ジョブの実行中に最新のアクティブ ログにアクセスします。
- 必要に応じて、個々の 1 時間ごとのログまたはすべてのログをまとめてダウンロードする
この機能を使用すると、ユーザーは、大量の 1 つのログ ファイルをダウンロードまたは開く手間を省きながら、特定のタイムポイントからログを簡単に見つけて分析できます。
Executor のローリング ログ ビューの例を次に示します。