Web UI

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

目次

Jobsタブ

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

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

Basic info

Event timeline

Details of jobs grouped by status

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

ジョブの詳細

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

Event timeline

DAG

DAG

Stagesタブ

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

ページの一番上には、ステータス(アクティブ、保留中、完了、スキップ、失敗)ごとのすべてのステージのカウントを含むサマリーがあります

Stages header

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

Pool properties

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

Stages detail

ステージの詳細

ステージの詳細ページは、すべてのタスクでの合計時間、局所性レベルの概要シャッフル読み取りサイズ/レコード、および関連するジョブIDなどの情報から始まります。

Stage header

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

Stage DAG

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

Stages metrics

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

Stages metrics per executors

アキュムレータは、共有変数のタイプです。これにより、さまざまな変換内で更新できる変更可能な変数が提供されます。名前付きおよび名前なしでアキュムレータを作成できますが、名前付きのアキュムレータのみが表示されます。

Stage accumulator

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

Tasks

Storageタブ

Storageタブには、アプリケーションに存在する場合は、永続化されたRDDとデータフレームが表示されます。サマリーページには、すべてのRDDのストレージレベル、サイズ、パーティションが表示され、詳細ページには、RDDまたはデータフレーム内のすべてのパーティションのサイズと使用中のエグゼキューターが表示されます。

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

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

Storage detail

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

Environmentタブ

Environmentタブには、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タブ

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

Executors Tab

Executorsタブには、リソース情報(各エグゼキューターで使用されるメモリ、ディスク、コアの量)だけでなく、パフォーマンス情報(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演算子がリストに表示されています。最後のクエリの「<console>: 24 で表示」リンクをクリックすると、クエリ実行のDAGと詳細が表示されます。

SQL DAG

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

logical plans and the physical plan

下部にある「詳細」リンクをクリックすると、論理プランと物理プランが表示され、Sparkがクエリをどのように解析、分析、最適化、実行するかが示されます。ホールステージコード生成最適化の対象となる物理プランのステップには、アスタリスクに続いてコード生成IDがプレフィックスとして付加されます。例:「*(1) LocalTableScan」

SQLメトリクス

SQL演算子のメトリクスは、物理演算子のブロックに表示されます。SQLメトリクスは、各演算子の実行詳細を詳しく調べたい場合に役立ちます。たとえば、「出力行数」は、Filter演算子後に出力された行数を示し、Exchange演算子の「シャッフル書き込みバイト数合計」は、シャッフルによって書き込まれたバイト数を示します。

以下はSQLメトリクスのリストです

SQLメトリクス意味演算子
出力行数 演算子の出力行数集計演算子、結合演算子、Sample、Range、スキャン演算子、Filterなど
データサイズ 演算子のブロードキャスト/シャッフル/収集されたデータのサイズ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ワーカーに送信されたシリアル化データのバイト数ArrowEvalPython、AggregateInPandas、BatchEvalPython、FlatMapGroupsInPandas、FlatMapsCoGroupsInPandas、FlatMapsCoGroupsInPandasWithState、MapInPandas、PythonMapInArrow、WindowsInPandas
Pythonワーカーから返されたデータ Pythonワーカーから返されたシリアル化データのバイト数ArrowEvalPython、AggregateInPandas、BatchEvalPython、FlatMapGroupsInPandas、FlatMapsCoGroupsInPandas、FlatMapsCoGroupsInPandasWithState、MapInPandas、PythonMapInArrow、WindowsInPandas

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

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

Structured Streaming Query Statistics

統計ページには、ストリーミングクエリのステータスを把握するための便利なメトリクスが表示されます。現在、次のメトリクスが含まれています。

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

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

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

JDBC/ODBCサーバータブ

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

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

JDBC/ODBC Header

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

JDBC/ODBC sessions

3番目のセクションには、送信された操作のSQL統計があります。

JDBC/ODBC SQL Statistics