Web UI

Apache Spark 提供一組 Web 使用者介面 (UI),您可以使用這些介面來監控 Spark 集群的狀態和資源消耗。

目錄

工作索引標籤

工作標籤顯示 Spark 應用程式中所有工作的摘要頁面,以及每個工作的詳細資料頁面。摘要頁面顯示高階資訊,例如所有工作的狀態、持續時間和進度,以及整體事件時間軸。當您在摘要頁面上按一下某個工作時,您會看到該工作的詳細資料頁面。詳細資料頁面進一步顯示事件時間軸、DAG 視覺化和工作的各個階段。

此區段中顯示的資訊為

Basic info

Event timeline

Details of jobs grouped by status

當您按一下特定工作時,您可以看到此工作的詳細資訊。

工作詳細資料

此頁面顯示由工作 ID 識別的特定工作的詳細資料。

Event timeline

DAG

DAG

階段索引標籤

「階段」標籤會顯示一個摘要頁面,顯示 Spark 應用程式中所有階段的所有工作目前的狀態。

頁面開頭是摘要,其中包含依狀態計算的所有階段(已啟動、待處理、已完成、已略過和已失敗)

Stages header

公平排程模式 中,有一個表格會顯示 池屬性

Pool properties

之後是依狀態(已啟動、待處理、已完成、已略過、已失敗)顯示的階段詳細資料。在已啟動階段中,可以使用終止連結終止階段。只有在已失敗階段中,才會顯示失敗原因。可以按一下說明來存取工作詳細資料。

Stages detail

階段詳細資料

階段詳細資料頁面會從資訊開始,例如所有工作的所有時間、區域性層級摘要Shuffle 讀取大小/記錄 和相關工作 ID。

Stage header

此階段的非循環有向圖 (DAG) 也有視覺化表示,其中頂點代表 RDD 或資料框,而邊緣代表要套用的作業。節點會依 DAG 視覺化中的作業範圍進行分組,並標示作業範圍名稱(批次掃描、WholeStageCodegen、交換等)。特別是,Whole Stage Code Generation 作業也會註解有程式碼產生 ID。對於屬於 Spark 資料框或 SQL 執行的階段,這允許將階段執行詳細資料交叉參照到 Web UI SQL 標籤頁面中的相關詳細資料,其中會報告 SQL 計畫圖形和執行計畫。

Stage DAG

所有工作的摘要指標會以表格和時間軸表示。

Stages metrics

依執行器彙總的指標會顯示依執行器彙總的相同資訊。

Stages metrics per executors

累加器是一種共用變數。它提供一個可變變數,可以在各種轉換內更新。可以建立有或沒有名稱的累加器,但只會顯示有名稱的累加器。

Stage accumulator

任務詳細資料基本上包含與摘要區段中相同的資訊,但會依任務詳細說明。它也包含檢閱記錄的連結,以及如果任務因任何原因失敗,則包含任務嘗試次數。如果有命名累加器,則可以在此看到每個任務結束時的累加器值。

Tasks

儲存空間索引標籤

儲存標籤會顯示應用程式中(如果有)的持續 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

在執行以上範例後,我們可以在儲存標籤中找到兩個 RDD。會提供基本資訊,例如儲存層級、分割數和記憶體開銷。請注意,在實體化之前,不會在標籤中顯示新持續的 RDD 或資料框。若要監控特定 RDD 或資料框,請確定已觸發動作操作。

Storage detail

您可以按一下 RDD 名稱「rdd」以取得資料持續性的詳細資料,例如叢集上的資料分佈。

環境索引標籤

環境標籤會顯示不同環境和組態變數的值,包括 JVM、Spark 和系統屬性。

Env tab

此環境頁面包含五個部分。這是檢查您的屬性是否已正確設定的實用地方。第一部分「執行時間資訊」僅包含執行時間屬性,例如 Java 和 Scala 的版本。第二部分「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

現在,上述三個資料框/SQL 運算子會顯示在清單中。如果我們按一下最後一個查詢的「在 <主控台> 中顯示:24」連結,我們將會看到查詢執行的 DAG 和詳細資料。

SQL DAG

查詢詳細資料頁面會顯示有關查詢執行時間、持續時間、相關工作的清單,以及查詢執行 DAG 的資訊。第一個區塊「WholeStageCodegen (1)」會將多個運算子(「LocalTableScan」和「HashAggregate」)編譯成單一 Java 函數以改善效能,而區塊中會列出列數和溢出大小等指標。「(1)」是區塊名稱中的程式碼產生 ID。第二個區塊「Exchange」會顯示洗牌交換的指標,包括已寫入的洗牌記錄數、總資料大小等。

logical plans and the physical plan

按一下底部的「詳細資料」連結會顯示邏輯計畫和實體計畫,說明 Spark 如何剖析、分析、最佳化和執行查詢。實體計畫中受全階段程式碼產生最佳化影響的步驟會加上星號,後接程式碼產生 ID,例如:「*(1) LocalTableScan」

SQL 指標

SQL 運算子的指標顯示在實體運算子區塊中。當我們想要深入了解每個運算子的執行細節時,SQL 指標會很有用。例如,在 Filter 運算子之後,「輸出列數」可以回答輸出多少列,「Exchange 運算子中的「總寫入交換位元組」顯示交換寫入的位元組數。

以下是 SQL 指標清單

SQL 指標意義運算子
輸出列數 運算子的輸出列數 聚集運算子、Join 運算子、Sample、Range、Scan 運算子、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
排序時間 花在排序上的時間 排序
記憶體使用高峰 運算子中記憶體使用的高峰 排序、HashAggregate
溢位大小 運算子中從記憶體溢位至磁碟的位元組數目 排序、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 上。概觀頁面會顯示正在執行和已完成查詢的一些簡要統計資料。此外,您也可以查看失敗查詢的最新例外狀況。如需詳細統計資料,請按表格中的「執行 ID」。

Structured Streaming Query Statistics

統計資料頁面會顯示一些有用的指標,讓您深入了解串流查詢的狀態。目前,它包含下列指標。

作為早期版本,統計資料頁面仍處於開發階段,並將在未來版本中進行改善。

串流 (DStreams) 標籤

如果應用程式使用 DStream API 搭配 Spark Streaming,網路 UI 會包含一個串流標籤。此標籤會顯示資料串流中每個微批次的排程延遲和處理時間,這對於解決串流應用程式的問題很有用。

JDBC/ODBC 伺服器標籤

當 Spark 以 分散式 SQL 引擎 執行時,我們可以看到這個標籤。它會顯示有關工作階段和已提交 SQL 作業的資訊。

此頁面的第一個區段會顯示 JDBC/ODBC 伺服器的概括資訊:開始時間和正常執行時間。

JDBC/ODBC Header

第二個區段包含有關活動和已完成工作階段的資訊。

JDBC/ODBC sessions

第三個區段包含已提交作業的 SQL 統計資料。

JDBC/ODBC SQL Statistics