Spark开发-SparkUI查看metric和日志

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快速开发
原文地址:https://www.cnblogs.com/ytwang/p/13722672.html