• 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快速开发
  • 相关阅读:
    python--函数的返回值、函数的参数
    python--字典,解包
    Vue--ElementUI实现头部组件和左侧组件效果
    Vue--整体页面布局
    jmeter--non GUI
    python--切片,字符串操作
    celery--调用异步任务的三种方法和task参数
    celery--实现异步任务
    celery--介绍
    开发问题记录
  • 原文地址:https://www.cnblogs.com/ytwang/p/13722672.html
Copyright © 2020-2023  润新知