1.概要Apache Spark 提供了一套 Web UI/用户界面Jobs、Stages、Tasks、Storage、Environment、Executors和SQL来监控 Spark/PySpark 应用程序的状态、Spark 集群的资源消耗和 Spark 配置本篇文章详细解释了webui上每个指标的含义教你怎么快速查看一个spark作业的资源使用情况。2.概念2.1.Jobs在提交spark任务运行后日志中会输出tracking URL即任务的日志链接。在浏览器中打开tracking URL后默认进入Jobs页。Jobs展示的是整个spark应用任务的job整体信息序号指标说明1Userspark任务提交的用户用以进行权限控制与资源分配。2Total Uptimespark application总的运行时间从appmaster开始运行到结束的整体时间。3Scheduling Modeapplication中task任务的调度策略由参数spark.scheduler.mode来设置可选的参数有FAIR和FIFO默认是FIFO。这与yarn的资源调度策略的层级不同yarn的资源调度是针对集群中不同application间的而spark scheduler mode则是针对application内部task set级别的资源分配不同FAIR策略的参数配置方式与yarn中FAIR策略的配置方式相同。4Completed Jobs已完成Job的基本信息如想查看某一个Job的详细情况可点击对应Job进行查看。5Active Jobs正在运行的Job的基本信息。6Event Timeline在application应用运行期间Job和Exector的增加和删除事件进行图形化的展现。这个就是用来表示调度job何时启动何时结束以及Excutor何时加入何时移除。我们可以很方便看到哪些job已经运行完成使用了多少Excutor哪些正在运行。2.2.Job Details在Jobs页面点击进入某个Job之后可以查看某一Job的详细信息序号指标说明1Staus展示Job的当前状态信息。2Active Stages正在运行的stages信息点击某个stage可进入查看具体的stage信息。3Pending Stages排队的stages信息根据解析的DAG图stage可并发提交运行而有依赖的stage未运行完时则处于等待队列中。4Completed Stages已经完成的stages信息。5Event Timeline展示当前Job运行期间stage的提交与结束、Executor的加入与退出等事件信息。6DAG Visualization当前Job所包含的所有stage信息stage中包含的明细的tranformation操作以及各stage间的DAG依赖图。DAG也是一种调度模型在spark的作业调度中有很多作业存在依赖关系所以没有依赖关系的作业可以并行执行有依赖的作业不能并行执行。2.3.Stages序号指标说明1Total time across all tasks:当前stage中所有task花费的时间和。2Locality Level Summary:不同本地化级别下的任务数本地化级别是指数据与计算间的关系PROCESS_LOCAL进程本地化task与计算的数据在同一个Executor中。NODE_LOCAL节点本地化情况一task要计算的数据是在同一个Worker的不同Executor进程中情况二task要计算的数据是在同一个Worker的磁盘上或在 HDFS 上恰好有 block 在同一个节点上。RACK_LOCAL机架本地化数据在同一机架的不同节点上情况一task计算的数据在Worker2的Executor中情况二task计算的数据在Worker2的磁盘上。ANY跨机架数据在非同一机架的网络上速度最慢。3Input Size/Records:输入的数据字节数大小/记录条数。4Shuffle Write:为下一个依赖的stage提供输入数据shuffle过程中通过网络传输的数据字节数/记录条数。应该尽量减少shuffle的数据量及其操作次数这是spark任务优化的一条基本原则。5DAG Visualization当前stage中包含的详细的tranformation操作流程图。6Metrics:当前stage中所有task的一些指标每一指标项鼠标移动上去后会有对应解释信息统计信息。7Event Timeline:清楚地展示在每个Executor上各个task的各个阶段的时间统计信息可以清楚地看到task任务时间是否有明显倾斜以及倾斜的时间主要是属于哪个阶段从而有针对性的进行优化。8Aggregated Metrics by Executor:将task运行的指标信息按excutor做聚合后的统计信息并可查看某个Excutor上任务运行的日志信息。9Tasks:当前stage中所有任务运行的明细信息是与Event Timeline中的信息对应的文字展示可以点击某个task查看具体的任务日志。第一部分event timeline展开后可以看到executor创建的时间点以及某个action触发的算子任务执行的时间。通过这个时间图可以快速的发现应用的执行瓶颈触发了多少个action。第二部分的图表显示了触发action的job名字它通常是某个count,collect等操作。在spark中rdd的计算分为两类一类是transform转换操作一类是action操作只有action操作才会触发真正的rdd计算。具体的有哪些action可以触发计算可以参考api。collect at test2.java:27描述了action的名字和所在的行号这里的行号是精准匹配到代码的所以通过它可以直接定位到任务所属的代码这在调试分析的时候是非常有帮助的。Duration显示了该action的耗时通过它也可以对代码进行专门的优化。最后的进度条显示了该任务失败和成功的次数如果有失败的就需要引起注意因为这种情况在生产环境可能会更普遍更严重。点击能进入该action具体的分析页面可以看到DAG图等详细信息。第三部分指标Total time across all tasks: 当前stage中所有task花费的时间和。Locality Level Summary: 不同本地化级别下的任务数本地化级别是指数据与计算间的关系PROCESS_LOCAL进程本地化task与计算的数据在同一个Executor中。NODE_LOCAL节点本地化情况一task要计算的数据是在同一个Worker的不同Executor进程中情况二task要计算的数据是在同一个Worker的磁盘上或在 HDFS 上恰好有 block 在同一个节点上。RACK_LOCAL机架本地化数据在同一机架的不同节点上情况一task计算的数据在Worker2的Executor中情况二task计算的数据在Worker2的磁盘上。ANY跨机架数据在非同一机架的网络上速度最慢。Input Size/Records: 输入的数据字节数大小/记录条数。Shuffle Write: 为下一个依赖的stage提供输入数据shuffle过程中通过网络传输的数据字节数/记录条数。应该尽量减少shuffle的数据量及其操作次数这是spark任务优化的一条基本原则。DAG Visualization: 当前stage中包含的详细的tranformation操作流程图。Metrics: 当前stage中所有task的一些指标每一指标项鼠标移动上去后会有对应解释信息统计信息。Event Timeline: 清楚地展示在每个Executor上各个task的各个阶段的时间统计信息可以清楚地看到task任务时间是否有明显倾斜以及倾斜的时间主要是属于哪个阶段从而有针对性的进行优化。Aggregated Metrics by Executor: 将task运行的指标信息按excutor做聚合后的统计信息并可查看某个Excutor上任务运行的日志信息。Tasks: 当前stage中所有任务运行的明细信息是与Event Timeline中的信息对应的文字展示可以点击某个task查看具体的任务日志。2.4.StorageStorage页面能看出application当前使用的缓存情况可以看到有哪些RDD被缓存了以及占用的内存资源。如果job在执行时持久化persist/缓存cache了一个RDD那么RDD的信息可以在这个选项卡中查看。2.5.Storage Detail点击某个RDD即可查看该RDD缓存的详细信息包括缓存在哪个Executor中使用的block情况RDD上分区partitions的信息以及存储RDD的主机的地址。2.6.EnvironmentEnvironment选项卡提供有关Spark应用程序或SparkContext中使用的各种属性和环境变量的信息。用户可以通过这个选项卡得到非常有用的各种Spark属性信息而不用去翻找属性配置文件。序号指标说明1Runtime Information仅包含运行时属性如 Java 和 Scala 版本。2Spark Properties列出应用程序属性如“spark.app.name”和“ spark.driver.memory”。3System Properties显示有关 JVM 的更多详细信息。4Classpath Entries列出从不同来源加载的类这对于解决类冲突非常有用2.7.7. ExecutorExecutors选项卡提供了关于内存、CPU核和其他被Executors使用的资源的信息。这些信息在Executor级别和汇总级别都可以获取到。一方面通过它可以看出来每个excutor是否发生了数据倾斜另一方面可以具体分析目前的应用是否产生了大量的shuffle是否可以通过数据的本地性或者减小数据的传输来减少shuffle的数据量。·Summary:该application运行过程中使用Executor的统计信息。·Executors:每个Excutor的详细信息包含driver可以点击查看某个Executor中任务运行的详细日志。这个页面比较常用了一方面通过它可以看出来每个excutor是否发生了数据倾斜另一方面可以具体分析目前的应用是否产生了大量的shuffle是否可以通过数据的本地性或者减小数据的传输来减少shuffle的数据量。2.8.8. SQLSQL选项卡只有执行了spark SQL查询才会有SQL选项卡可以查看SQL执行计划的细节它提供了SQL查询的DAG以及显示Spark如何优化已执行的SQL查询的查询计划。