文章目录
官网:Monitoring and Instrumentation
http://spark.apache.org/docs/2.4.2/monitoring.html
1、History-Server介绍
当你执行spark-shell --master local[2]
的时候
默认情况下,每个SparkContext在端口4040上启动一个web UI;如果多个sparkcontext在同一主机上运行,它们将从4040(4041、4042等)开始的连续端口启动web UI。
但是应用程序执行完成后都会sc.stop
,此时再次刷新web UI发现再也无法代开,如果想继续监控未完成的作业,那么就需要History-Server,通过相应的配置,Spark应用程序在运行完应用程序之后,将应用程序的运行信息写入指定日志记录目录,而 history server可以将这些运行信息装载并以web的方式供用户浏览。
2、History-Server配置
[hadoop@vm01 ~]$ hdfs dfs -mkdir /spark-logs
[hadoop@vm01 conf]$ vi spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://vm01:9000/spark-logs
#所有spark.history.* 开头的参数,都是配置在SPARK_HISTORY_OPTS选项中
#SPARK_HISTORY_OPTS="-Dx=y",x代表参数,y代表值
[hadoop@vm01 conf]$ vi spark-env.sh
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://vm01:9000/spark-logs"
启动
[hadoop@vm01 sbin]$ ./start-history-server.sh
vm01:18080
3、验证
打开spark-shell,然后在浏览器同时打开vm01:4040
和vm01:18080
界面,然后sc.stop
验证结果。
scala> val a = sc.textFile("hdfs://192.168.137.130:9000/test.txt")
scala> a.flatMap(line=>line.split(" ")).map((_,1)).reduceByKey(_+_).collect
此时两个都是可以查看的
scala> sc.stop
此时vm01:4040
刷新web后是无法访问的,但是vm01:18080
界面依然可以继续监控
4、History-Server参数
#指定刷新日志的时间,更短的时间可以更快检测到新的任务以及任务执行情况,但过快会加重服务器负载
spark.history.fs.update.interval 默认值10秒
#UI上最多显示的作业的数目
spark.history.ui.maxApplication 默认值intMaxValue
#history-server的网页UI端口号
spark.history.ui.port 默认值18080
#参数指定history-server的日志是否定时清除,true为定时清除,false为不清除
spark.history.fs.cleaner.enabled 默认为false
#日志检查间隔,默认每一天会检查一下日志文件
spark.history.fs.cleaner.interval 默认值为1d
#日志生命周期,当检查到某个日志文件的生命周期为7d时,则会删除该日志文件
spark.history.fs.cleaner.maxAge 默认值为7d
#这个参数设置history-server产生的日志文件是否使用压缩,true为使用,false为不使用
spark.eventLog.compress 默认值为false
#压缩格式
spark.io.compress.codec 默认值lz4
#在内存中保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除
spark.history.retainedApplications 默认值:50
5、REST API
后缀添加什么想看什么具体信息,看官网:REST API
http://spark.apache.org/docs/2.4.2/monitoring.html#rest-api
打开REST API可以访问<server-url>:18080/api/v1
,和history-server网页内容一样。<server-url>
值得是启用history-server服务的机器ip。<server-url>:18080/api/v1/applications
就是查看所有的作业信息。<server-url>:18080/api/v1/applications/?status=completed
就是查看所有已经完成的作业的信息