在运行 Spark 应用程序的时候,Driver 会提供一个 WebUI 用于展现应用程序的运行信息,但是这个服务是伴随 Spark 应用程序的运行周期的,当应用程序运行完成后,将无法查看应用程序的历史记录。
Spark history server 就是为了应对这种情况而产生的,通过配置,Spark 应用程序在运行成之后,将应用程序的运行信息写入指定目录,Spark history server 可以将这些信息加载并以 Web 或命令行的方式供用户浏览。
配置 Spark History Server
在 Spark 的 /conf
目录下,基于 spark-defaults.conf.template
复制创建 spark-defaults.conf
# Spark Master Host:Port
spark.master spark://hadoop.master:7077
# 是否记录作业产生的事件或者运行状态(job,stage 等使用内存等信息)
spark.eventLog.enabled true
# 如果记录作业产生的事件或者运行状态,则将事件写入什么位置
spark.eventLog.dir hdfs://hadoop.master:9000/user/hadoop/sparkevtlog
# history http 的监听端口号,通过 http://hadoop.master:${spark.history.ui.port} 访问
spark.history.ui.port 18080
启动 Spark History Server
使用如下命令启动 History Server
> ./start-history-server.sh
starting org.apache.spark.deploy.history.HistoryServer, logging to ../logs/spark-hadoop-org.apache.spark.deploy.history.HistoryServer-1-hadoop.out
启动后访问 http://${spark.master}:{spark.history.ui.port}
History Server 参数
spark-env.sh
配置
通过设置 SPARK_HISTORY_OPTS
的方式
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=7777 -Dspark.history.retainedApplications=3"
spark.history.fs.update.interval
默认值: 10,单位秒
刷新日志的时间,更短的时间可以更快检测到新的任务以及任务执行情况,但过快会加重服务器负载
spark.history.ui.port
默认值:18080
history-server 的 Web 端口
spark.history.retainedApplications
默认值:50
在内存中保存 Application 历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,当再次访问已被删除的应用信息时需要重新构建页面。
spark.history.fs.cleaner.enabled
默认值:false
指定 history 日志是否定时清除,一定要设置成 true。
spark.history.fs.cleaner.interval
默认值:1d
指定 history 日志定时清除的周期,默认一天
spark.history.fs.cleaner.maxAge
默认值:7d
指定 history 日志生命周期,默认七天
spark-defaults.conf
配置
每个配置一行
spark.eventLog.enabled true
spark.eventLog.compress true
spark.eventLog.enabled
默认值:false
是否记录 Spark 事件,用于应用程序在完成后重构 WebUI
spark.eventLog.compress
默认值:false
是否压缩记录 Spark 事件,前提 spark.eventLog.enabled
为 true,默认使用的是 snappy 压缩
spark.eventLog.dir
默认值:file:///tmp/spark-events
保存日志相关信息的路径,以 hdfs:// 开头的是 HDFS 路径,以 file:// 开头的是本地路径,需要提前创建
spark.history.fs.logDirectory
和 spark.eventLog.dir
指定目录的区别?
spark.eventLog.dir:日志记录的位置
spark.history.fs.logDirectory:页面展示指定路径下的信息
所以如果要显示最新的全部的日志,这两个参数需要指定同一个目录
网友评论