Spark UI
查看內容
查看DAG- 了解Job 和Stage具體邏輯
查看Task運行時間 : Duration :Task的運行時間-可用來定位數據傾斜
查看Shuffle Read Size和Record 數據量大小和記錄數
日志查看: stdout 用戶打印代碼的日志
Thread Dump 線程堆棧信息,如果Task執行時間長,可以看看Task為什么卡着不動
Job:
User : testName
Total Uptime : 3.0 min
Scheduling Mode : FAIR
HDFS Read/Write Ops : 21975 / 5355
HDFS Read/Write Bytes : 36.0 GB / 45.6 MB
Job總的統計: Completed Jobs: 2 Active Jobs: 1
Event Timeline 事件時間軸
Executors : Added Removed
Jobs的狀態有: Succeeded Failed Running
status submitted completed
Job Id:
Stages:
Stage總的統計: Completed Stages: 10 Skipped Stages: 8
Event Timeline 事件時間軸
Executors : Added Removed
Stages的狀態有: Completed Failed Active
查看數據量 input
查看時間:
點擊具體的
Details for Stage 5
DAG Visualization
有兩類
Spark計算 物理plan 和算子
SparkSQL計算 物理plan 和算子--這里的
Event Timeline
藍色 Scheduler Delay 等待的時間,即Executor正在等待某些東西 —— 通常這是等待驅動程序來控制和協調作業。
紅色 Task Deserialization Time 任務反序列化時間Task Deserialization Time,一般來說它不應該這占用如此大的比例
綠色 —— Executor Computing Time的比例,就是executor真正執行工作所花的時間。
Stage 血緣依賴關系
Stage分為需要處理 Shuffle的ShuffleMapStage和最下游的ResultStage。
上游Stage先於下游Stage丸行, ResultStage是最后執行的Stage
Executors
Executors 查看一些日志入口
日志查看
1.日志管理是由NodeManager進行管理
ID下的 application_150575191676_6936280 點擊進入
Tracking URL: ApplicationMaster
Spark的on Yarn模式,其資源分配是交給Yarn的ResourceManager來進行管理的
Attempt ID 那一行有 Logs 點擊 Logs 進入日志
每個Container會輸出三類日志
prelaunch.err prelaunch.out
gclog : Total file length is 13623 bytes.
stderr : Total file length is 6453551 bytes. stderr是spark輸出的規范日志。
stdout : Total file length is 19809 bytes. stdout是自己定義println的輸出日志,
2. 轉存到hdfs的日志,生命周期不再由Nodemanager負責,
而是由JobHistory 服務負責管理。
每個日志文件最大存留時間為yarn.log-aggregation.retain-seconds(單位為s,默認為3*60*60,即3小時)。
ResourceManager NodeManager ApplicationMaster 端的日志 container
Tracking UI
ApplicationMaster
executor節點上的日志
一個driver
executor后可以看到 其他executor
Spark UI 上面顯示的 Storage Memory 可用內存其實等於 Execution 內存和 Storage 內存之和
Spark UI 上面顯示的 Storage Memory 可用內存等於堆內內存和堆外內存之和
注釋:
1.taskscheduler和schedulerbackend兩個類,並且初始化一個調度池
Scheduling Mode: Spark中的調度模式主要有兩種:FIFO和FAIR,
哪種調度器由參數spark.scheduler.mode來設置,可選的參數有FAIR和FIFO,默認是FIFO
源碼中根據用戶配置的 SchedulingMode 決定是生成
FIFOSchedulableBuilder 還是生成 FairSchedulableBuilder 類型的 schedulableBuilder 對象
在生成 schedulableBuilder 后,調用其buildPools方法生成 調度池
如果不加設置,jobs會提交到 default 調度池 中。由於 調度池 的使用是Thread級別的,
wight 調度池的權重 poolname 調度池名
如果有必要,可以去了解FairScheduler是如何在各個Pool之間分配資源,以及每個Pool如何在Job之間分配資源的
2.Job的Stage沒有分解成TaskSet提交執行,則這個Stage和它對應的Task會標記為skipped stage和skipped task進行統計顯示
skipped是因為要計算的數據已經緩存到了內存,沒有必要再重復計算
3.Input /Output/ Shuffle Read /Shuffle Write
Shuffle描述着數據從map task輸出到reduce task輸入的這段過程
Map階段的數據准備和Reduce階段的數據拷貝處理。
一般將在map端的Shuffle稱之為Shuffle Write,
在Reduce端的Shuffle稱之為Shuffle Read
一般順序: Input -- Shuffle Write -- Shuffle Read -- Output
4.大小和數據量的評估
基本類型 大小 最小值 最大值 包裝器類型
char 兩個字節-16bit Unicode 0 Unicode 2^16-1 Character
byte 一個字節-8bit -128 127 Byte
int 四個字節 -2^31 +2^31-1 Integer
long 八個字節 -2^63 +2^63-1 Long
8位(bit)=1字節(Byte),1024字節=1KB,1024KB=1MB, 1MB大約可以存儲256個整型
一個英文字母占用1個字節。 一個中文會占用2-4個字節
Spark SQL DAG圖示
通過DAG可視化,用戶和開發人員可以一目了然地查明RDDS是否被恰當地緩存
SparkPlan根據操作的子節點類型主要分為三種trait: BinaryExecNode LeafExecNode UnaryExecNode
01.sparkPlanner 可以理解為物理計划針對RDD操作的描述
HadoopRDD
HiveTableScan
Exchange
WholeStageCodegen
SortMergeJoin * Performs a sort merge join of two child relations.
ShuffledHashJoin * Performs a hash join of two child relations by first shuffling the data using the join keys.
BroadcastHashJoin
Union
02.具體的RDD操作
ShuffledRowRDD
MapPartitionsRDD
ZippedPartitionsRDD2
UnionRDD
參考:
Spark快速開發