默认情况下,一个作业运行完成之后,就再也无法看到其web ui以及执行信息了,在生产环境中,这对调试以及故障定位有影响。
如果要在作业执行完之后,还能看到其web ui,那么必须将作业的spark.eventLog.enabled属性设置为true,这个属性会告诉spark去记录该作业的所有要在web ui上展示的事件以及信息。
如果spark记录下了一个作业生命周期内的所有事件,那么就会在该作业执行完成之后,我们进入其web ui时,自动用记录的数据重新绘制作业的web ui。
我们可以设置的属性
- spark.eventLog.enabled,必须设置为true,开启关联
- spark.eventLog.dir,默认是/tmp/spark-events,建议自己手动调整为其他目录,比如/usr/local/spark-event或是hdfs目录,必须手动创建
- spark.history.fs.logDirectory,记录日志的目录
- spark.history.fs.update.interval,默认10s更新检测/spark-log目录下的文件内容变更)
- spark.history.retainedApplicaions,50
- spark.eventLog.compress ,是否压缩数据,默认为false,建议可以开启压缩以减少磁盘空间占用
- spark.io.compression.codec,默认是lz4压缩,不用改,直接用推荐的即可)
- spark.io.compression.lz4.blocksize,默认是32k,太小,需要调大
- spark.history.ui.port,默认是18080
- spark.history.fs.cleaner.enable,开启日清理,默认是false
- spark.history.fs.cleaner.interval,默认1d检测一次
- spark.history.fs.cleaner.maxAge,清理7d前的日志
这些属性可以在提交一个作业的时候设置,如果想要对所有作业都启用该机制,那么可以在spark-defaults.conf文件中配置这三个属性
实验
- 先看看之前的已经执行完成的作业,是否可以进入spark web ui界面
- 关闭现有的master和worker进程
- 修改spark-defaults.conf文件,配置上述属性,启用standalone模式下的作业历史信息记录,手动创建hdfs目录
## 配置history server ##
spark.eventLog.enabled true
#是否压缩记录Spark事件,前提spark.eventLog.enabled为true,默认使用的是snappy
spark.eventLog.compress true
#Application在运行过程中所有的信息均记录在该属性指定的路径下
spark.eventLog.dir hdfs://hd1:9000/spark-event-log
#Spark History Server页面只展示该指定路径下的信息
#spark.history.fs.logDirectory hdfs://hd1:9000/spark-event-log
#该参数并不是也页面中显示的application的记录数,而是存放在内存中的个数,内存中的信息在访问页面时直接读取渲染既可;
#比如说该参数配置了10个,那么内存中就最多只能存放10个applicaiton的日志信息,当第11个加入时,第一个就会被踢除,
#当再次访问第1个application的页面信息时就需要重新读取指定路径上的日志信息来渲染展示页面。
#spark.history.retainedApplications 3
#以秒为单位,更新日志相关信息的时间间隔,默认是10s
#spark.history.fs.update.interval 10
#history server的端口18080
#spark.history.ui.port 18081
#日志清理
#spark.history.fs.cleaner.enabled true
#spark.history.fs.cleaner.interval 1d (默认是1天检测一次)
#spark.history.fs.cleaner.maxAge 7d (默认清理超过7天的日志)
#默认值:false,是否使用kerberos方式登录访问HistoryServer,对于持久层位于安全集群的HDFS上是有用的,如果设置为true,就要配置下面的两个属性
#spark.history.kerberos.enabled
#默认值:用于HistoryServer的kerberos主体名称
#spark.history.kerberos.principal
#用于HistoryServer的kerberos keytab文件位置
#spark.history.kerberos.keytab
#默认值:false,授权用户查看应用程序信息的时候是否检查acl。如果启用,只有应用程序所有者和spark.ui.view.acls指定的用户可以查看应用程序信息;否则,不做任何检查
#spark.history.ui.acls.enable
- 重新启动spark集群,启动历史服务器
- 提交一个作业,然后再次尝试进入spark web ui界面
-
访问历史服务器端口 查看历史作业
Spark历史服务器.png
注意:如果要让spark完成作业的事件记录,那么必须最后以sc.stop()结尾。
网友评论