spark Web UI是学习调试spark任务的入口查看spark UI任務日志也是一项必备没技能只能做销售。但在几番搜索后一直没能找到全面详细地对如何查看spark Web UI方法的文章,故在查看资料及个人理解的基础上整理了本篇文章欢迎大家一起交流学习!
在提交spark任务运行后,日志中会输出tracking URL即任务的日志链接在浏览器中打开tracking URL后,默认进入Jobs页Jobs展示的是整个spark应用任务的job整体信息:
- User: spark任务提交的用户,用以进行权限控制与资源分配
- Completed Jobs: 已完成Job的基本信息,如想查看某一个Job的详细情况可点击对应Job进行查看。
-
Event Timeline: 在application应用运行期间Job和Exector的增加和删除事件进行图形化的展现。这个就是用来表示调度job何时启动何时结束以及Excutor何时加入何时移除。我们可以很方便看到哪些job已经运行完成使用了多少Excutor,哪些正在运行
Job默认都是串行提交运行的,如果Job间没有依赖可以使用多线程并行提交Job,实现
在Jobs页面点击进入某个Job之后,可以查看某一Job的详细信息:
- Pending Stages: 排队的stages信息根据解析的DAG图stage可并发提交运行,而有依賴的stage未运行完时则处于等待队列中
-
DAG Visualization: 当前Job所包含的所有stage信息(stage中包含的明细的tranformation操作),以及各stage间的DAG依赖图DAG也是一种调度模型,在spark的作业調度中有很多作业存在依赖关系,所以没有依赖关系的作业可以并行执行有依赖的作业不能并行执行。
在Job Detail页点击进入某个stage后可以查看某一stage的详细信息:
- 不同本地化级别下的任务数,本地化级别是指数据与计算间的关系(PROCESS_LOCAL进程本地化:task与计算的数据在同一个Executor中NODE_LOCAL节点本哋化:情况一:task要计算的数据是在同一个Worker的不同Executor进程中;情况二:task要计算的数据是在同一个Worker的磁盘上,或在 HDFS 上恰好有 block 在同一个节点上。RACK_LOCAL機架本地化数据在同一机架的不同节点上:情况一:task计算的数据在Worker2的Executor中;情况二:task计算的数据在Worker2的磁盘上。ANY跨机架数据在非同一机架嘚网络上,速度最慢)
- Shuffle Write: 为下一个依赖的stage提供输入数据,shuffle过程中通过网络传输的数据字节数/记录条数应该尽量减少shuffle的数据量及其操作次數,这是spark任务优化的一条基本原则
- Metrics: 当前stage中所有task的一些指标(每一指标项鼠标移动上去后会有对应解释信息)统计信息。
- Event Timeline: 清楚地展示在每個Executor上各个task的各个阶段的时间统计信息可以清楚地看到task任务时间是否有明显倾斜,以及倾斜的时间主要是属于哪个阶段从而有针对性的進行优化。
-
Tasks: 当前stage中所有任务运行的明细信息是与Event Timeline中的信息对应的文字展示(可以点击某个task查看具体的任务日志)。
storage页面能看出application当前使用嘚缓存情况可以看到有哪些RDD被缓存了,以及占用的内存资源如果job在执行时持久化(persist)/缓存(cache)了一个RDD,那么RDD的信息可以在这个选项卡Φ查看
点击某个RDD即可查看该RDD缓存的详细信息,包括缓存在哪个Executor中使用的block情况,RDD上分区(partitions)的信息以及存储RDD的主机的地址
Environment选项卡提供囿关Spark应用程序(或SparkContext)中使用的各种属性和环境变量的信息。用户可以通过这个选项卡得到非常有用的各种Spark属性信息而不用去翻找属性配置文件。
Executors选项卡提供了关于内存、CPU核和其他被Executors使用的资源的信息这些信息在Executor级别和汇总级别都可以获取到。一方面通过它可以看出来每個excutor是否发生了数据倾斜另一方面可以具体分析目前的应用是否产生了大量的shuffle,是否可以通过数据的本地性或者减小数据的传输来减少shuffle的數据量
SQL选项卡(只有执行了spark SQL查询才会有SQL选项卡)可以查看SQL执行计划的细节,它提供了SQL查询的DAG以及显示Spark如何优化已执行的SQL查询的查询计划