监控Spark应用有很多种方法。 Web接口每一个SparkContext启动一个web UI用来展示应用相关的一些非常有用的信息,默认在4040端口。这些信息包括: - 任务和调度状态的列表
- RDD大小和内存使用的统计信息
- 正在运行的executor的信息
- 环境信息
你可以在浏览器中打开http://<driver-node>:4040网址来访问这些信息。如果在同一台机器上有多个SparkContext正在运行,那么他们的端口从4040开始依次增加(4041,4042等)。 注意,在所有这些web接口可以通过点击“表头”来对这些表格进行排序。这使得鉴别运行速度慢的任务、判别数据倾斜等非从容易。
MetricsSpark基于 Coda Hale Metrics库提供一个可配置的统计系统。这允许用户向不同的终端发送统计信息,包括HTTP、JMX和CSV文件。统计系统可以通过配置文件来进行配置,Spark默认将配置文件保存在$SPARK_HOME/conf/mertics.conf。用户可以通过Java property spark.metrics.conf来修改配置文件的保存路径。Spark根据组件的不同将统计信息分为多个实例。可以配置每一个实例向多个方向发送统计信息。目前支持下面几种实例: - master:Spark管理进程
- applications:位于master的组件,统计发送各种应用的信息
- worker:Spark工作进程
- executor:执行器
- driver:Spark驱动程序
每一个实例可以向多个渠道发送统计信息。渠道包含在包org.apache.spark.metrics.sink: - ConsoleSink:将统计信息发送到控制台
- CSVSink:每隔一段时间将统计信息写入到CSV文件
- GangliaSink:将统计信息发送到Ganglia或者多播组
- JmxSink:将统计信息注册到JMX控制台
- MetricsServlet:在Spark UI中添加servlet用来以JSON的方式提供统计信息
统计信息配置文件的语法有一个示例文件——$SPARK_HOME/conf/metrics.conf.template.
高级的仪器有几个外部工具可用来衡量Spark作业的性能: - 集群范围的监控工具,比如 Ganglia,可以洞察整个集群的利用率和资源瓶颈。例如,Ganglia仪表盘可以迅速揭示出某个特定载荷是磁盘相关,网络相关,还是CPU相关的。
- OS性能分析工具,比如 dstat, iostat,和 iotop, 可以提供各个节点的细粒度的分析。
- JVM工具,比如 jstack提供了堆栈跟踪,jmap提供了创建堆转储,jstat提供了时间序列统计报告,还有jconsole提供了各种JVM属性的视觉显示,它们对JVM内部构件的舒适运作都是非常有用的。
|