Spark Web UI及任務(wù)優(yōu)化實(shí)戰(zhàn)-了解 web ui
Spark專題
Spark Web UI
課程簡介:
- 認(rèn)識Spark Web Ui :Spark Web Ui 的基礎(chǔ)信息介紹
- 使用Spark Web Ui:Spark Web Ui 從問題定位到問題解決
課程難度:????
課程使用的平臺:EasyData spark版本:3.3.1.2
Spark Web UI 是什么?
- Spark Web UI 是 Apache Spark 提供的一個基于 Web 的用戶界面。它是 Spark 監(jiān)控和調(diào)試的重要工具,隨著 Spark 應(yīng)用程序的運(yùn)行而自動啟動,用于展示應(yīng)用程序運(yùn)行過程中的各種詳細(xì)信息。
Spark Web UI 作用
Web UI 作用 | 詳情 | |
監(jiān)控作業(yè)執(zhí)行情況 | 作業(yè)進(jìn)度跟蹤 | Spark Web UI 的 Jobs 頁面可以清晰地展示每個作業(yè)的狀態(tài),包括作業(yè)的提交時間、開始時間、結(jié)束時間等信息。 |
階段劃分與依賴分析 | Web UI 能夠呈現(xiàn)出各個階段之間的依賴關(guān)系。這有助于理解數(shù)據(jù)在不同階段是如何流動和轉(zhuǎn)換的。例如,在一個基于 Spark SQL 的數(shù)據(jù)分析任務(wù)中,數(shù)據(jù)的讀取、過濾、聚合和輸出可能分別是不同的階段,通過查看階段的劃分和依賴 | |
性能分析與優(yōu)化 | 任務(wù)執(zhí)行時間監(jiān)測 | Web UI 的 Tasks 頁面可以顯示每個任務(wù)的執(zhí)行時間。通過分析任務(wù)執(zhí)行時間的分布,可以發(fā)現(xiàn)性能瓶頸 |
資源利用評估 | 通過 Executors 頁面可以查看執(zhí)行器(Executors)的資源使用情況,包括 CPU 使用率、內(nèi)存使用率等。 | |
故障診斷與調(diào)試 | 任務(wù)失敗原因查找 | 當(dāng)任務(wù)出現(xiàn)失敗時,Spark Web UI 能夠提供詳細(xì)的錯誤信息??焖俣ㄎ还收显?,例如是由于數(shù)據(jù)格式錯誤、OOM、網(wǎng)絡(luò)故障等等 |
數(shù)據(jù)傾斜分析 | 通過查看各個任務(wù)的數(shù)據(jù)輸入量和處理時間,可以發(fā)現(xiàn)是否存在數(shù)據(jù)傾斜現(xiàn)象。 |
Spark Web UI 模塊
模塊 | 功能 |
Jobs |
|
Stages |
|
Storage |
|
environment |
|
Executors |
|
SQL/DaraFrame |
|
通過Sql 看 UI
select * from mammut_user.dws_tradels_order_cus_1d where dt = '2024-03-26'
Jobs模塊
在提交spark任務(wù)運(yùn)行后,點(diǎn)擊日志鏈接,Jobs展示的是整個spark應(yīng)用任務(wù)的job整體信息
Jobs
User | hadoop賬號,spark任務(wù)提交的用戶,用以進(jìn)行權(quán)限控制與資源分配 |
Total Uptime | Spark 應(yīng)用從啟動到當(dāng)前時刻的持續(xù)運(yùn)行時間。它就像一個計(jì)時器,記錄了應(yīng)用在集群環(huán)境中的存活時長 |
Scheduling Model | Job的調(diào)度模式, Spark 用于安排任務(wù)執(zhí)行順序和資源分配的策略。分為FIFO(先進(jìn)先出)和FAIR(公平調(diào)度) |
Completed Jobs | 執(zhí)行完成的Job |
Active Jobs | 正在執(zhí)行的Job |
Event Timeline | Event Timeline 提供了一個時間序列上的任務(wù)執(zhí)行視圖。Job執(zhí)行時間線和Exector的增加和刪除事件時間線 |
Job details
點(diǎn)擊某個job,查看該job的詳細(xì)信息
Status | job的運(yùn)行狀態(tài):running、succeeded、 failed |
Submitted | Job提交時間 |
Duration | Job執(zhí)行時長 |
Associated SQL Query | 關(guān)聯(lián)的SQL模塊的query id |
Job Group | 任務(wù)組。通過 Job Group,用戶可以對一組作業(yè)進(jìn)行統(tǒng)一的操作,可以為不同的 Job Group 分配不同的資源配額 |
Event Timeline | 當(dāng)前Job執(zhí)行時間線和Exector的增加和刪除事件時間線 |
DAG Visualization | DAG可視化展示, 當(dāng)前Job所包含的所有stage信息 |
Completed Stages | 執(zhí)行完成的stages信息 |
Skipped Stages | 跳過執(zhí)行的stages信息 |
為什么stage被跳過?
skipped的stage代表是之前被其他stage執(zhí)行過并落盤了,并不需要重新計(jì)算,可以直接使用之前的結(jié)果。
Stage模塊(重點(diǎn))
Stage概覽
點(diǎn)擊Stages模塊,可進(jìn)入到Stage界面
Completed Stages | 所有任務(wù)的stages信息 |
Skipped Stages | 跳過執(zhí)行的stages信息 |
Stage詳細(xì)(重點(diǎn))
在Stages頁點(diǎn)擊進(jìn)入某個stage后,可以查看某一stage的詳細(xì)信息:
Resource Profile Id | 用于標(biāo)識資源配置文件的唯一標(biāo)識符,定義 Spark 應(yīng)用在運(yùn)行過程中所使用的資源分配方式。例如: 包括了諸如每個執(zhí)行器(Executor)分配多少內(nèi)存、多少 CPU 核心數(shù)等資源分配細(xì)節(jié) | |
Total Time Across All Tasks | 當(dāng)前stage中所有task總花費(fèi)的時長 | |
Locality Level Summary | 數(shù)據(jù)本地化方式和數(shù)量 | |
Associated Job Ids | stage關(guān)聯(lián)的job id | |
DAG Visualization | DAG可視化圖,表示當(dāng)前stage中包含的詳細(xì)的tranformation操作流程圖 | |
Event Timeline | 同之前 | |
Summary Metrics for x Completed Tasks | 已完成的Task的執(zhí)行匯總情況:(task層面)
| |
Aggregated Metrics by Executor | task運(yùn)行的指標(biāo)信息按executor做聚合后的統(tǒng)計(jì)信息 | |
Output Size / Records | 輸出的數(shù)據(jù)字節(jié)數(shù)大小/記錄條數(shù) | |
Input Size / Records | 輸入的數(shù)據(jù)字節(jié)數(shù)大小/記錄條數(shù) | |
Shuffle Write | 有多少數(shù)據(jù)Shuffle寫,一般是map task寫數(shù)據(jù),也可以是reduce task寫數(shù)據(jù)。為下一個依賴的stage提供輸入數(shù)據(jù),shuffle過程中通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)/記錄條數(shù) | |
Shuffle read | 表示有多少數(shù)據(jù)Shuffle讀, 該項(xiàng)值有內(nèi)容表示為reduce task | |
Tasks | 當(dāng)前stage所有task信息 |
數(shù)據(jù)本地化:數(shù)據(jù)離計(jì)算它的代碼有多近?;跀?shù)據(jù)距離代碼的距離,有幾種數(shù)據(jù)本地化級別:
- PROCESS_LOCAL :數(shù)據(jù)和計(jì)算它的代碼在同一個Executor JVM進(jìn)程中。
- NODE_LOCAL : 數(shù)據(jù)和計(jì)算它的代碼在同一個節(jié)點(diǎn),但不在同一個進(jìn)程中,比如在不同的executor進(jìn)程中,或者是數(shù)據(jù)在HDFS文件的block中。因?yàn)閿?shù)據(jù)需要在不同的進(jìn)程之間傳遞或從文件中讀取。分為兩種情況,第一種:task 要計(jì)算的數(shù)據(jù)是在同一個 worker 的不同 Executor 進(jìn)程中。第二種:task 要計(jì)算的數(shù)據(jù)是在同一個 worker 的磁盤上,或在 HDFS 上恰好有 block 在同一個節(jié)點(diǎn)上。如果 Spark 要計(jì)算的數(shù)據(jù)來源于 HDFS 上,那么最好的本地化級別就是 NODE_LOCAL。
- NO_PREF : 從任何地方訪問數(shù)據(jù)速度都是一樣,不關(guān)心數(shù)據(jù)的位置。
- RACK_LOCAL : 機(jī)架本地化,數(shù)據(jù)在同一機(jī)架的不同節(jié)點(diǎn)上。需要通過網(wǎng)絡(luò)傳輸數(shù)據(jù)以及文件 IO,比NODE_LOCAL 慢。情況一:task 計(jì)算的數(shù)據(jù)在 worker2 的 EXecutor 中。情況二:task 計(jì)算的數(shù)據(jù)在 work2 的磁盤上。
越往前的級別等待時間應(yīng)該設(shè)置的長一點(diǎn),因?yàn)樵绞乔懊嫘阅茉胶?/p>
Storge模塊
用于展示存儲情況,能呈現(xiàn) RDD、DataFrame 等存儲對象的存儲級別
Environment模塊
提供全面的環(huán)境信息展示。它清晰呈現(xiàn)出 Spark 應(yīng)用運(yùn)行時所處的各類環(huán)境參數(shù)
概覽信息 | |
Runtime Information | |
Spark Properties | |
Resource Profiles | |
Hadoop Properties | |
System Properties | |
Classpath Entries |
Executor模塊
executors頁面展示了executor和driver的一些統(tǒng)計(jì)信息和明細(xì)信息,匯總信息包括內(nèi)存、磁盤、cpu的使用量,任務(wù)執(zhí)行時間、GC時間,成功、失敗、完成的task數(shù)量,以及輸入輸出的數(shù)據(jù)量等內(nèi)容
SQL模塊(重點(diǎn))
完整的展示了任務(wù)的DAG過程,跟Stages結(jié)合可以對應(yīng)該Stages與SQL代碼的關(guān)系,也就是這是在運(yùn)行哪一串代碼,用于定位數(shù)據(jù)傾斜的核心功能之一
SQL算子和 UI SQl關(guān)鍵詞對應(yīng)關(guān)系
- WholeStageCodegen:全階段代碼生成,把一個stage里的算子進(jìn)行了整合、優(yōu)化
- Filter:where
- Project:select 后的字段
- Exchange:shuffle
- Sort:排序,一般在Exchange之后
- CustomShuffleReader:定制化shuffle,存在該算子說明啟用了AE
- HashAggregate:group by (hash聚合)
- SortAggregate:group by(sort聚合,內(nèi)存不足會采用sort兜底)
- Expand:對于select中存在多個distinct 或 group by id,name with cube會存在該算子
- Generate:explode函數(shù)
- ColumnarToRow:spark內(nèi)部優(yōu)化,向量化讀
- SortMergeJoin(skew=true):join方式是SMJ,并且命中了AE自動處理傾斜的邏輯