目录

Sparklint调研

概述

这个项目是之前的同事推荐看的,周末看了下,写篇文章总结下,本文主要解读一下 README,然后本地跑起来看看,最后分析一下具体实现。

Sparklint是什么

Sparklint 提供了一个优雅的 Web UI 来观察 Spark 任务的运行状态和性能。具体包括了:

  1. Spark 任务生命周期的一些统计指标,例如空闲时间,平均 CPU 使用,数据的本地性情况等等
  2. Executor 的 Task 分配情况
  3. FAIR 调度组的 VCore 使用情况可视化
  4. 任务本地性
  5. 发现可以持久化优化性能的 RDD

这个项目主要是希望通过抓取这些指标来报告 Spark 任务的性能瓶颈,和对 Spark 的一些重要指标进行实时的监控。

/sparklint%E8%B0%83%E7%A0%94/image_1d78p30av1abf12891j781pug1uhcp.png

Sparklint demo

关于这个项目的使用,请仔细阅读其文档,主要是 Spark 版本等问题。

这个项目比较骚的地方在于,除了可以在实时分析,也可以基于日志问题做离线分析,启动项目之后,Web UI 是这样的。

关于如何打开 EventLog 的配置,就不在此赘述了,需要的同学可以自行查找资料。我本地运行环境可以参考以下。

1
spark-2.2.0-bin-hadoop2.7

命令行运行了一个 local 任务,并且把 EventLog 保存到 /tmp/directory 路径下。

/sparklint%E8%B0%83%E7%A0%94/image_1d78rc1gpfpjlt414eq19hllqk19.png

实时观察,可以看到按照官网方法,运行的时候跑出来是这样的,可以实时观察图中各指标的情况。

/sparklint%E8%B0%83%E7%A0%94/image_1d79jhd3ki4o16oe69ndih482m.png

实现分析

笔者分析一般喜欢 debug 整个程序,在 sbt 项目中,一般有个 assembly 插件,其中可以在 build.sbt 文件中加入 test in assembly := {},这样在断点 debug 的时候就可以跳过所有的测试用例。

也可以一个个测试用例跑一下,看看主要的程序代码逻辑是怎么走的。

总结

很多公司都会针对 SparkEventListener 做点事情。需要对 Spark 消息机制比较熟悉。

警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。