Fork me on GitHub

Spark 历史记录 Web 监控 [Spark JobHistory Web UI]

4040端口只能看到正在运行App的情况,并不能看到App运行结束后的各项数据

Mesos或YARN模式下可以通过各自的Web UI看到JobHistory情况的,但是在Standalone模式下是有自己的JobHistory Web UI

以下内容主要是怎样开启Standalone模式下的JobHistory Web UI


测试环境

1
2
3
4
5
6
7
8
9
10
测试环境:
Ubuntu 14.04 LTS x64
Hadoop:hadoop-2.7.1.tar.gz
Spark:spark-1.5.2-bin-hadoop2.6.tgz
Scala:scala-2.11.7.tgz

伪分布式 + Yarn

hostname IP role
spark-master: 192.168.108.20 master & worker

概述


翻译:运行结束后监控 [Viewing After the Fact]

在Spark的 Standalone 模式下,有它自己的web UI监控界面,如果一个应用程序已经记录了它的生命周期,在程序运行结束后,Standalone模式下master主机的web UI将会自动重现App的信息UI。

如果Spark运行在Mesos或YARN上,并且App的日志记录存在,依然有可能通过Spark历史服务来重新修改已经完成应用的UI。你可以通过以下内容启动历史服务:

1
./sbin/start-history-server.sh

当使用文件系统作为日志文件的存储时,必须提供 spark.history.fs.logDirectory 参数的配置(请看下面的 spark.history.provider 参数详情),并且应该包含子目录,每个子目录表示一个应用程序日志记录的位置。这将会创建一个默认web界面:

1
http://<server-url>:18080

历史服务的配置参数如下:

环境变量 意义
SPARK_DAEMON_MEMORY 分配给历史服务器的内存(默认:1G)
SPARK_DAEMON_JAVA_OPTS 历史服务器JVM选项(默认:none)
SPARK_PUBLIC_DNS 设置历史服务器的公共地址,如果不设定,连接应用程序的历史记录会使用服务器内部地址,可能会导致连接失效(默认:none)
SPARK_HISTORY_OPTS 历史服务器的spark.history.*配置选项(默认:none)

spark.history.* 如下:

参数名称 默认值 意义
spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider 历史应用接入的类名,目前只有一个Spark提供的实现类,它是通过存储在文件系统中的应用程序日志中寻找出来的
spark.history.fs.logDirectory file:/tmp/spark-events 用于存放提供给历史服务器加载的应用程序日志目录
spark.history.fs.update.interval 10s 呈现在历史服务器上的应用数据更新周期,每一个更新操作都会记录日志并做持久化操作
spark.history.retainedApplications 50 保留在UI上应用数目,如果超过这个限制,旧的应用记录将被移除
spark.history.ui.port 18080 历史服务器所绑定的UI端口
spark.history.kerberos.enabled false 用于表明历史服务器是否允许使用kerberos登录,当历史服务器需要访问一个安全Hadoop上的HDFS时,这是很有用的;如果设置为true,则用配置spark.history.kerberos.principal 和 spark.history.kerberos.keytab
spark.history.kerberos.principal (none) Kerberos安全配置的名字
spark.history.kerberos.keytab (none) kerberos keytab的存放位置
spark.history.ui.acls.enable false 指定是否应该检查访问控制列表,以授权用户查看应用详情;如果启用,当应用运行后,检查将忽略应用本身设置的spark.ui.acls.enable参数;应用所有者有权查看他们自己的应用情况,当设置了spark.ui.view.acls参数的其他用户也有权查看这类应用;如果禁用,则不会进行检查
spark.history.fs.cleaner.enabled false 指定历史服务器是否应该定期从存储设备上清理日志信息
spark.history.fs.cleaner.interval 1d 设定job历史文件清理周期,只有超过spark.history.fs.cleaner.maxAge参数设定的文件才会被删除
spark.history.fs.cleaner.maxAge 7d Job历史文件超过这个设定时间,将会被删除

UI上的所有信息,都可以通过点击他们的标题头部进行分类,这样就可以方便的看出慢的tasks,数据不均衡等问题。

历史服务器上展现的只是已经完成的Spark Jobs,一个标志Spark Job完成的信号就是Spark Context的停止 (sc.stop())

在Python中可以使用:

1
with SparkContext() as sc:

去操纵Spark Context的启动和销毁,并且能让运行完成的应用展示在历史工作的UI上


历史监控的配置

将历史Log保存到HDFS上


HDFS上创建 Spark History Log 目录

1
hadoop fs -mkdir -p /test_log/spark_hislog

修改spark-env.sh

1
2
3
4
vim conf/spark-env.sh

# 添加
PARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://localhost:9000/test_log/spark_hislog"

修改spark-defaults.conf

1
2
3
4
5
6
7
8
9
cp spark-defaults.conf.template ./spark-defaults.conf
vim spark-defaults.conf

# 开启日志记录
spark.eventLog.enabled true
# 日志存储地址
spark.eventLog.dir hdfs://localhost:9000/test_log/spark_hislog
# 是否进行压缩
spark.eventLog.compress true

启动start-history-server.sh

1
./sbin/start-history-server.sh

访问Web UI

1
http://<server-url>:18080

参考:Monitoring and Instrumentation 官方文档


转载请注明出处


Thank you for your support.