[Spark] 从 Spark UI 找效能调校的目标

最近因为种种原因,複习了Spark的架构和概念,参考的是欧莱礼的Spark学习手册,笔记在这里。

一般来说,有大量资料运算需求的Cluster比较会需要常做效能调校,可能是Working Node主机或是Code的问题。最简单的查询方式就是透过 Spark UI,预设网址是 http://{your_server_ip}:4040 。

Spark UI主要包含几个页面:Job, Stage, Storage, Executor, Environment,每个页面大概可以检视的内容及观察重点如下:

工作页面(job page): 评量工作的执行效能

检查组成工作的stage,观察是否有执行特别慢,或是在多次执行中执行时间变化很大的stage如果有某个花特别久的stage,可点击该stage并观察该stage连结了哪些使用者程式码

阶段页面(stage page): 独立检查某个stage的效能

观察stage页面不同的指标在所有task中的分布情况如果有相对少数的任务花了大量时间 (此状况称作skew),需检视这些task过慢的原因且这些task是否花了比其他任务多的读写时间? 或是在某个节点执行的工作是否都比较慢?task花费少量的读写时间,整体执行时间却很长代表使用者程式码本身的操作是花费昂贵的,需考虑Spark Partition的基础工作原理,将程式码最佳化某些任务可能消耗将近全部的时间从外部读取资料,因为瓶颈在于读取输入资料代表程式码最佳化不会获益太多,可能在于资料量或其他问题

储存页面(storage page): 快取RDD资讯

RDD可透过呼叫persist()进行快取,并在之后的工作使用如果快取RDD的请求超过所能负荷量,较旧的快取RDD会被移出memory,以提供足够空间给新的快取RDD。显示每个RDD有多少部份被快取、在不同储存媒介中分别快取的资料量(disk, memory)。了解重要的资料集是否被快取,对效能调校有很大帮助

执行器页面(executor page): 应用程式目前的执行器列表

确认应用程式有取得预期的资源量错误的配置将导致执行器数量比预期中少,明显影响效能观察执行器是否有异常行为task失败比例特别高?
代表实体主机有错误配置或是设备异常),从cluster中移除该主机可能提升整体效能透过 Thread Dump,收集堆叠追蹤资讯(stack trace)掌握某个时间点执行的程式码如果执行器短时间内被捕捉到很多次,可推测此执行器为热点(hot spots)或是代价昂贵的程式码段。

环境页面(environment page): Spark配置的除错

察看应用程式正在使用中的设定值检查应用程式执行的当下,哪些配置flag是否有开启 (尤其是使用多重配置来源时)列举应用程式加入的JARS和档案检查是否有相依性遗失问题

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章