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快速开发