Web UI

Apache Spark は、Spark クラスターの状態とリソース消費を監視するために使用できる一連の Web ユーザーインターフェイス (UI) を提供します。

目次

ジョブタブ

ジョブタブには、Spark アプリケーション内のすべてのジョブの概要ページと、各ジョブの詳細ページが表示されます。概要ページには、すべてのジョブの状態、期間、進捗状況、および全体的なイベントタイムラインなどのハイレベルな情報が表示されます。概要ページでジョブをクリックすると、そのジョブの詳細ページが表示されます。詳細ページには、さらにイベントタイムライン、DAG の視覚化、およびジョブのすべてのステージが表示されます。

このセクションに表示される情報は以下のとおりです。

Basic info

Event timeline

Details of jobs grouped by status

特定のジョブをクリックすると、そのジョブの詳細情報を確認できます。

ジョブ詳細

このページには、ジョブ ID で識別される特定のジョブの詳細が表示されます。

Event timeline

DAG

DAG

ステージタブ

ステージタブには、Spark アプリケーション内のすべてのジョブのすべてのステージの現在の状態を示す概要ページが表示されます。

ページの先頭には、ステータスごとのステージの合計数 (アクティブ、保留中、完了、スキップ、失敗) を含む概要があります。

Stages header

フェアスケジューリングモードでは、プールプロパティを表示するテーブルがあります。

Pool properties

その後に、ステータスごとのステージ詳細 (アクティブ、保留中、完了、スキップ、失敗) が続きます。アクティブなステージでは、キルリンクを使用してステージをキルできます。失敗したステージでのみ、失敗理由が表示されます。タスクの詳細は、説明をクリックすることでアクセスできます。

Stages detail

ステージ詳細

ステージ詳細ページには、すべてのタスクにわたる総時間、データローカリティの概要シャフル読み取りサイズ/レコード、および関連ジョブ ID などの情報が含まれています。

Stage header

また、このステージの有向非巡回グラフ (DAG) の視覚的な表現もあります。頂点は RDD または DataFrame を表し、エッジは適用される操作を表します。ノードは DAG 視覚化で操作スコープごとにグループ化され、操作スコープ名 (BatchScan、WholeStageCodegen、Exchange など) でラベル付けされます。特に、Whole Stage Code Generation 操作はコード生成 ID で注釈付けされます。Spark DataFrame または SQL 実行に属するステージの場合、これにより、ステージ実行の詳細を Web UI SQL タブページで SQL プラングラフと実行プランが報告される関連詳細にクロス参照できます。

Stage DAG

すべてのタスクの集計メトリクスは、テーブルとタイムラインで表されます。

Stages metrics

エグゼキュータごとの集計メトリクスは、エグゼキュータごとに集計された同じ情報を示します。

Stages metrics per executors

アキュムレータ は、共有変数の型です。これは、さまざまな変換内で更新できるミュータブルな変数を提供します。アキュムレータは名前あり/なしで作成できますが、表示されるのは名前付きアキュムレータのみです。

Stage accumulator

タスクの詳細は、基本的に概要セクションと同じ情報を含みますが、タスクごとに詳細化されています。また、ログを確認するためのリンクや、何らかの理由で失敗した場合のタスク試行回数も含まれます。名前付きアキュムレータがある場合、ここでは各タスクの終わりにアキュムレータの値を確認できます。

Tasks

ストレージタブ

ストレージタブには、アプリケーションで永続化された RDD および DataFrame (存在する場合) が表示されます。概要ページには、すべての RDD のストレージレベル、サイズ、パーティションが表示され、詳細ページには、RDD または DataFrame のすべてのパーティションのサイズと使用されているエグゼキュータが表示されます。

scala> import org.apache.spark.storage.StorageLevel._
import org.apache.spark.storage.StorageLevel._

scala> val rdd = sc.range(0, 100, 1, 5).setName("rdd")
rdd: org.apache.spark.rdd.RDD[Long] = rdd MapPartitionsRDD[1] at range at <console>:27

scala> rdd.persist(MEMORY_ONLY_SER)
res0: rdd.type = rdd MapPartitionsRDD[1] at range at <console>:27

scala> rdd.count
res1: Long = 100

scala> val df = Seq((1, "andy"), (2, "bob"), (2, "andy")).toDF("count", "name")
df: org.apache.spark.sql.DataFrame = [count: int, name: string]

scala> df.persist(DISK_ONLY)
res2: df.type = [count: int, name: string]

scala> df.count
res3: Long = 3

Storage tab

上記の例を実行した後、ストレージタブに 2 つの RDD がリストされていることがわかります。ストレージレベル、パーティション数、メモリオーバーヘッドなどの基本情報が提供されています。新しく永続化された RDD または DataFrame は、マテリアライズされる前にタブに表示されないことに注意してください。特定の RDD または DataFrame を監視するには、アクション操作がトリガーされていることを確認してください。

Storage detail

RDD 名「rdd」をクリックすると、クラスター上のデータ分散などのデータ永続化の詳細を取得できます。

環境タブ

環境タブには、JVM、Spark、およびシステムプロパティを含む、さまざまな環境および構成変数の値が表示されます。

Env tab

この環境ページは 5 つの部分で構成されています。プロパティが正しく設定されているかどうかを確認するのに役立ちます。最初の部分「ランタイム情報」には、Java および Scala のバージョンなどのランタイムプロパティが含まれています。2 番目の部分「Spark プロパティ」には、「spark.app.name」や「spark.driver.memory」などのアプリケーションプロパティがリストされています。

Hadoop Properties

「Hadoop プロパティ」リンクをクリックすると、Hadoop および YARN に関連するプロパティが表示されます。「spark.hadoop.*」などのプロパティは、この部分ではなく「Spark プロパティ」に表示されることに注意してください。

System Properties

「システムプロパティ」は、JVM に関する詳細情報を示します。

Classpath Entries

最後の部分「クラスパスエントリ」は、さまざまなソースからロードされたクラスをリストしており、クラスの競合を解決するのに非常に役立ちます。

エグゼキュータタブ

エグゼキュータタブには、アプリケーションのために作成されたエグゼキュータに関する概要情報 (メモリおよびディスクの使用量、タスクおよびシャフル情報を含む) が表示されます。ストレージメモリ列には、データのキャッシュに使用されるメモリ量と予約済みのメモリ量が表示されます。

Executors Tab

エグゼキュータタブは、リソース情報 (各エグゼキュータによって使用されるメモリ、ディスク、コアの量) だけでなく、パフォーマンス情報 (GC 時間とシャフル情報) も提供します。

Stderr Log

エグゼキュータ 0 の「stderr」リンクをクリックすると、コンソールで標準エラーログの詳細が表示されます。

Thread Dump

エグゼキュータ 0 の「スレッドダンプ」リンクをクリックすると、エグゼキュータ 0 の JVM のスレッドダンプが表示され、パフォーマンス分析に非常に役立ちます。

SQLタブ

アプリケーションが Spark SQL クエリを実行する場合、SQL タブには、クエリの期間、ジョブ、物理プランおよび論理プランなどの情報が表示されます。ここでは、このタブを説明するための簡単な例を含めます。

scala> val df = Seq((1, "andy"), (2, "bob"), (2, "andy")).toDF("count", "name")
df: org.apache.spark.sql.DataFrame = [count: int, name: string]

scala> df.count
res0: Long = 3

scala> df.createGlobalTempView("df")

scala> spark.sql("select name,sum(count) from global_temp.df group by name").show
+----+----------+
|name|sum(count)|
+----+----------+
|andy|         3|
| bob|         2|
+----+----------+

SQL tab

これで、上記の 3 つのデータフレーム/SQL オペレーターがリストに表示されます。最後のクエリの「show at <console>: 24」リンクをクリックすると、クエリ実行の DAG と詳細を確認できます。

SQL DAG

クエリ詳細ページには、クエリ実行時間、その期間、関連ジョブのリスト、およびクエリ実行 DAG に関する情報が表示されます。最初のブロック「WholeStageCodegen (1)」は、複数のオペレーター (「LocalTableScan」と「HashAggregate」) を 1 つの Java 関数にコンパイルしてパフォーマンスを向上させ、行数やスピルサイズなどのメトリクスがブロックにリストされています。ブロック名のアノテーション「(1)」はコード生成 ID です。2 番目のブロック「Exchange」は、シャフル交換に関するメトリクスを表示します。これには、書き込まれたシャフルレコード数、合計データサイズなどが含まれます。

logical plans and the physical plan

下部にある「詳細」リンクをクリックすると、Spark がクエリを解析、分析、最適化、および実行する方法を示す論理プランと物理プランが表示されます。Whole Stage Code Generation 最適化の対象となる物理プランのステップには、アスタリスクとコード生成 ID がプレフィックスとして付けられています。例: 「*(1) LocalTableScan」。

SQLメトリクス

SQL オペレーターのメトリクスは、物理オペレーターのブロックに表示されます。SQL メトリクスは、各オペレーターの実行詳細を掘り下げたい場合に役立ちます。たとえば、「出力行数」は、Filter オペレーターの後に何行が出力されるかを示し、「Exchange」オペレーターの「シャフルバイト書き込み合計」は、シャフルによって書き込まれたバイト数を示します。

SQL メトリクスのリストを以下に示します。

SQLメトリクス意味オペレーター
出力行数 オペレーターの出力行数集計オペレーター、結合オペレーター、サンプル、範囲、スキャンオペレーター、フィルターなど。
データサイズ オペレーターのブロードキャスト/シャフル/収集されたデータのサイズBroadcastExchange、ShuffleExchange、Subquery
収集時間 データの収集に費やされた時間BroadcastExchange、Subquery
スキャン時間 データのスキャンに費やされた時間ColumnarBatchScan、FileSourceScan
メタデータ時間 パーティション数、ファイル数などのメタデータを取得するのに費やされた時間FileSourceScan
シャフルバイト書き込み 書き込まれたバイト数CollectLimit、TakeOrderedAndProject、ShuffleExchange
シャフルレコード書き込み 書き込まれたレコード数CollectLimit、TakeOrderedAndProject、ShuffleExchange
シャフル書き込み時間 シャフル書き込みに費やされた時間CollectLimit、TakeOrderedAndProject、ShuffleExchange
リモートブロック読み取り リモートで読み取られたブロック数CollectLimit、TakeOrderedAndProject、ShuffleExchange
リモートバイト読み取り リモートで読み取られたバイト数CollectLimit、TakeOrderedAndProject、ShuffleExchange
リモートからディスクへのバイト読み取り リモートからローカルディスクに読み取られたバイト数CollectLimit、TakeOrderedAndProject、ShuffleExchange
ローカルブロック読み取り ローカルで読み取られたブロック数CollectLimit、TakeOrderedAndProject、ShuffleExchange
ローカルバイト読み取り ローカルで読み取られたバイト数CollectLimit、TakeOrderedAndProject、ShuffleExchange
フェッチ待機時間 データのフェッチに費やされた時間 (ローカルおよびリモート)CollectLimit、TakeOrderedAndProject、ShuffleExchange
読み取られたレコード 読み取られたレコード数CollectLimit、TakeOrderedAndProject、ShuffleExchange
ソート時間 ソートに費やされた時間Sort
ピークメモリ オペレーターでのピークメモリ使用量Sort、HashAggregate
スピルサイズ オペレーターでメモリからディスクにスピルされたバイト数Sort、HashAggregate
集計ビルド時間 集計に費やされた時間HashAggregate、ObjectHashAggregate
平均ハッシュプローブバケットリストイテレータ 集計中のルックアップごとの平均バケットリストイテレータ数HashAggregate
ビルドサイドのデータサイズ 構築されたハッシュマップのサイズShuffledHashJoin
ハッシュマップ構築時間 ハッシュマップの構築に費やされた時間ShuffledHashJoin
タスクコミット時間 書き込みが成功した後、タスクの出力をコミットするのに費やされた時間ファイルベースのテーブルに対する任意の書き込み操作
ジョブコミット時間 書き込みが成功した後、ジョブの出力をコミットするのに費やされた時間ファイルベースのテーブルに対する任意の書き込み操作
Python ワーカーに送信されたデータ Python ワーカーに送信されたシリアライズ済みデータのバイト数Python UDF、Pandas UDF、Pandas Functions API、Python データソース
Python ワーカーから返されたデータ Python ワーカーから受信したシリアライズ済みデータのバイト数Python UDF、Pandas UDF、Pandas Functions API、Python データソース

構造化ストリーミングタブ

マイクロバッチモードで構造化ストリーミングジョブを実行すると、Web UI に構造化ストリーミングタブが利用可能になります。概要ページには、実行中および完了したクエリの簡単な統計情報が表示されます。また、失敗したクエリの最新の例外を確認することもできます。詳細な統計情報については、テーブル内の「実行 ID」をクリックしてください。

Structured Streaming Query Statistics

統計ページには、ストリーミングクエリの状態を把握するためのいくつかの有用なメトリクスが表示されます。現在、以下のメトリクスが含まれています。

早期リリース版として、統計ページはまだ開発中であり、将来のリリースで改善される予定です。

ストリーミング (DStreams) タブ

アプリケーションが Spark Streaming と DStream API を使用している場合、Web UI にストリーミングタブが含まれます。このタブには、データストリーム内の各マイクロバッチのスケジューリング遅延と処理時間が表示され、ストリーミングアプリケーションのトラブルシューティングに役立ちます。

JDBC/ODBC サーバータブ

Spark が分散 SQL エンジンとして実行されている場合に、このタブを確認できます。セッションと送信された SQL 操作に関する情報が表示されます。

ページの最初のセクションには、JDBC/ODBC サーバーの一般情報 (起動時刻と稼働時間) が表示されます。

JDBC/ODBC Header

2 番目のセクションには、アクティブなセッションと完了したセッションに関する情報が含まれています。

JDBC/ODBC sessions

3 番目のセクションには、送信された操作の SQL 統計情報が含まれています。

JDBC/ODBC SQL Statistics