强力推荐,相见恨晚的文档,建议先看
关于Spark监控,推荐一个讲的非常好的PPT:monitoring-spark-applications,简练、全面的讲解了Spark监控的必要性、方法、缺点及改进方法。
下面是我自己的一些总结
本文内容主要来自Spark Monitoring官方文档和Cloudera文档,和一些自己的思考。
Spark UI监控,有三个维度
对Spark运行时的状态进行监控可以对运行时间较长的大型任务运行过程心中有数,明白时间花费在什么地方,看任务在什么地方发生异常。首先说明Spark的一个application的划分规则。
- job :job是application的组成单位。 A job is triggered by an action, like count() or saveAsTextFile(). Click on a job to see information about the stages of tasks inside it. 一个 job,就是由一个 rdd 的 action 触发的动作,可以简单的理解为,当你需要执行一个 rdd 的 action 的时候,会生成一个 job.
- stage : stage 是 job 的组成单位,就是说,一个 job 会被切分成 1 个或 1 个以上的 stage,然后各个 stage 会按照执行顺序依次执行。job 根据Spark的shuffle过程来切分 stage,如某stage有2个shuffle过程,它就被切分成3个stage.
- task : A unit of work within a stage, corresponding to one RDD partition。即 stage 下的一个任务执行单元。“一般来说,一个 rdd 有多少个 partition,就会有多少个 task,因为每一个 task 只是处理一个 partition 上的数据。”
对Spark的监控需求,可以按需划分为针对job的监控、针对stage的监控和针对task的监控,Spark UI提供了以下三种监控界面:
- 针对job的监控:每次查询都是一个Job,下图显示一个已经完成的查询任