运行时作业查看
每一个SparkContext启动一个web UI,默认情况下在端口4040, 显示关于应用程序的有用信息,包括:
· 调度器阶段和任务的列表
· RDD大小和内存使用的概览
· 环境信息。
· 关于运行中执行器的信息
在web浏览器打开 http:// < driver-node >:4040就可以访问该接口。如果在同一个主机上运行多个SparkContexts,将4040开始递增绑定端口 (4041、4042、等)。
请注意,默认情况下,这些信息仅适用于应用程序的生命周期。要想在应用程序完成之后查看web UI,在应用程序启动之前,spark.eventLog.enabled必须设置为true。这样Spark会将Spark事件编码显示信息持久化存储。
运行完成后作业查看
Spark的集群管理器也有自己的独立模式 web UI 。如果应用程序已将其生命周期内的事件信息记录进日志中,那么在应用程序完成后,独立主机的web UI将自动重新呈现应用程序的UI。
如果Spark运行在Mesos或者Yarn上, 通过Spark的历史服务器仍然可以重建完成的应用程序的UI,只要历史服务器存有应用程序事件日志。可以执行下面的命令启动历史服务器:
./sbin/start-history-server.sh
当使用文件系统提供者类(参见下面的spark.history.provider), 配置选项spark.history.fs.logDirectory基本日志记录目录必须提供,而且应该包含子目录,每个子目录对应一个应用程序的事件日志。默认情况下这将在 http:// <服务器url >:18080创建一个web界面。历史服务器可以配置 如下:
环境变量 |
意义 |
|
分配给历史服务器的内存(默认值:512m)。 |
|
历史服务器JVM选项(默认值:none)。 |
|
历史服务器的公共地址。如果没有设置,应用程序历史的的链接可能会使用服务器的内部地址, 这可能导致失效链接(默认值:无)。 |
|
|
属性名 |
默认值 |
意义 |
spark.history.provider |
org.apache.spark.deploy.history.FsHistoryProvider |
实现应用程序历史后端类名。目前Spark只提供一种实现,用于查找存储在文件系统的应用程序日志。 |
spark.history.fs.logDirectory |
file:/tmp/spark-events |
历史服务器加载的包含应用程序事件日志的目录 |
spark.history.fs.updateInterval |
10 |
历史服务器显示的信息更新时间间隔,以秒为单位的.每次更新将检查事件日志在持久化存储上的任何更改。 |
spark.history.retainedApplications |
50 |
应用程序ui保留的数量。如果超过这个上限,然后最古老的应用程序记录将被删除。 |
spark.history.ui.port |
18080 |
历史服务器web界面的绑定端口 |
spark.history.kerberos.enabled |
false |
指示历史服务器是否应该使用kerberos登录。如果历史服务器访问的是一个安全的Hadoop集群HDFS文件, 这是有用的。如果设置为true,它将使用 |
spark.history.kerberos.principal |
(none) |
历史服务器的Kerberos主体名称。 |
spark.history.kerberos.keytab |
(none) |
历史服务器的kerberos keytab文件的位置。 |
spark.history.ui.acls.enable |
false |
指定是否应该检查查看应用程序的acl授权用户。 如果设置为启用, 当应用程序运行时,无论应用程序是否设置 了 |
请注意,所有的这些ui,表,都可以通过点击表头进行排序,以方便识别任务,数据等。
注意,历史服务器只显示已经完成的Spark Job。 要想使Spark Job提前完成, 使Spark上下文(Spark Context) 停止( 执行sc.stop()
),或者在Python中使用 SparkContext() as sc:
来处理Spark上下文建立和拆除,也会在UI上显示job历史信息。
指标Metrics
Spark自带一个基于Coda Hale指标库 的可配置的指标系统。允许用户使用各式各样的sinks输出Spark指标,包括HTTP、JMX、CSV 文件。指标系统通过$SPARK_HOME/conf/metrics.properties配置文件进行配置。也可以通过指定spark.metrics.conf配置属性自定义文件的位置。 关于Spark指标,不同的Spark组件是对应不同的指标实例 。在每个实例中,可以配置一系列的报告指标槽sink。 下面是目前支持的实例:
· master: Spark独立的主进程。
· applications: 在主程序上的一个组件,对应各种应用程序报告。
· worker:一个Spark独立的工作进程。
· executor: 一个Spark执行器。
· driver: Spark驱动程序进程(创建SparkContext的进程)。
每个实例的报告可以有零个或更多的sinks 。自带的 Sinks 存在于 org.apache.spark.metrics.sink 包:
· ConsoleSink :将指标信息输出到控制台。
· CSVSink :定期使用CSV文件导出数据。
· JmxSink :将指标输出到JMX控制台。
· MetricsServlet :在现有的SparkUI内添加一个servlet,以JSON格式提供指标数据。
· GraphiteSink :将指标发送到Graphite节点。
Spark也支持Ganglia sink,但由于许可限制的原因并不包含在默认的构建中:
· GangliaSink :发送指标到Ganglia节点或广播组。
安装 GangliaSink 您需要执行一个自定义Spark构建。 请注意, 嵌入这个库 ,那么Spark包就包含有了LGPL 许可代码 。 对于sbt用户,在构建之前设置SPARK_GANGLIA_LGPL环境变量即可。 对于Maven用户来说,启用 -Pspark-ganglia-lgpl 配置即可。 除此之外, 修改Spark的集群构建,用户应用程序需要链接到 spark-ganglia-lgpl。
指标配置文件示例位于$SPARK_HOME/conf/metrics.properties.template。
高级工具
一些外部工具可以用来帮助提升Spark Job的性能:
· 整个集群范围的监视工具,如 Ganglia ,可以提供集群的总体利用率和资源瓶颈。 例如,一个Ganglia指示板可以很快发现一个特定的工作负载是否磁盘绑定,网络绑定,或者 CPU绑定。
· 操作系统分析工具如 dstat , iostat , iotop等可以提供单个节点细粒度的分析。
· JVM 实用工具如jstack 可以提供栈跟踪信息, jmap 可以生成堆dump, jstat报告分时统计以及jconsole等对于JVM内部结构分析都是非常有用的.