Spark UI は、オープンソースの Spark ジョブを診断するための重要なツールです。本トピックでは、Spark UI を使用してジョブを診断する方法について説明します。
Spark UI を使用したジョブの診断
手順 1:リンクの取得
MaxCompute Spark LogView の URL を開いた後、Spark UI のリンクを取得できます。Spark UI は、オープンソースの Spark ジョブを診断するための重要なツールであり、ジョブのログを取得したり、ジョブが正しく送信・実行されたことを確認したりするために利用できます。
MaxCompute Spark LogView の URL の「まとめ」モジュールで、Spark UI リンク および History Server リンク を確認します(以下の図を参照):

Spark Web UI:ジョブが実行中のみアクセス可能です。現在のジョブ進捗状況やスレッドスタックなどの情報を含みます。
Spark History Server:ジョブ完了後にアクセス可能になります。ドライバーから History Server へイベントが送信されるまでに 1~3 分程度の遅延があります。そのため、追跡 URL を直後に開くと、「
Application application_1560240626712_2078769635 not found.」というエラーが表示される場合があります。しばらく待ってから再度アクセスしてください。kube モードで History Server を表示するには、spark-defaults.conf 構成ファイル内の
eventLogパラメーターを以下のように変更します:(必須) spark.eventLog.enabled = true (必須) spark.eventLog.dir = /workdir/eventlog/ (任意) spark.eventLog.compress = true (任意) spark.eventLog.overwrite = true
手順 2:Spark UI を使用した基本ジョブ情報の確認
リンクをコピーし、ブラウザに貼り付けます。以下の図に示すように、Spark Web UI が表示されます:

Environmentタブをクリックして、構成済みの Spark パラメーターを確認します。Environmentタブで、構成済みのパラメーターを確認し、すべての設定が有効になっていることを検証します。この問題は、通常SPARK_HOMEが未設定であるために発生し、その結果spark-defaults.conf構成ファイルが正しく読み込まれません。Executorsタブをクリックします。DeadステータスのノードおよびThread Dumpに特に注意してください。
[Logs-StdOut] ボタンをクリックして、ノードの標準出力結果を確認します。
[Logs-StdErr] ボタンをクリックして、ノードの
log4jログを確認します。
手順 3:Spark UI を使用したブロッキングまたは低速ジョブのトラブルシューティング
Spark UI を使用すると、実行中のタスクおよびそのステータスを確認できます。[Executors] タブでは、各エグゼキュータの [Thread Dump] ボタンをクリックすることで、そのスレッドスタックのスナップショットを表示できます。
実行中のジョブの Spark UI を開き、[Executors] タブに切り替えます。

ドライバーのスレッドまたはエグゼキュータのスレッドのいずれかが停止しているかを特定します。
図では、Executor 59 に 1 つのアクティブなタスクがあります。これは、1 つのタスクがまだ完了していないことを意味します。該当するエグゼキュータの [Thread Dump] ボタンをクリックして、そのスレッドスタック情報を確認します。
すべてのエグゼキュータにおいてアクティブなタスク数が 0 の場合、すべてのエグゼキュータはアイドル状態です。この場合、現在のジョブはドライバーの実行ロジック内で停止している可能性が高いです。ドライバーの [Thread Dump] ボタンをクリックして、そのスレッドスタック情報を確認します。
ドライバーのメインスレッドは通常、以下のようになります:

エグゼキュータの実行スレッドは通常、以下のようになります:
