背景
当我们在跑一个spark任务的时候,如果碰到数据倾斜或者我们想去看下运行参数或者具体的运行情况,这时候我们就需要一个可视化的日志页面,去监控spark的运行。
(注明:大部分知识点是从官方文档翻译,少部分是自己测试,或者在实际项目中的总结。)
官方文档地址:https://spark.apache.org/docs/latest/monitoring.html
1、spark UI
默认情况下,SparkContext都会默认在端口4040上启动一个Web UI,即启动一个application会在端口4040启动一个web UI。如果多个application在同一个主机上运行,则会从4040开始往后顺延,即4041,4042 等(这个在启动日志可以看到),如下所示
20/03/25 11:16:16 WARN util.Utils: Service ‘SparkUI’ could not bind on port 4040. Attempting port 4041.
20/03/25 11:16:16 INFO server.AbstractConnector: Started ServerConnector@61533ae{HTTP/1.1,[http/1.1]}{0.0.0.0:4041}
20/03/25 11:16:16 INFO util.Utils: Successfully started service ‘SparkUI’ on port 4041.
但是默认情况WEB ui只在程序访问期间有效。在一个application结束的时候,就会去关闭此端口,所以页面也就访问不了了。
20/03/25 11:17:17 INFO server.AbstractConnector: Stopped Spark@61533ae{HTTP/1.1,[http/1.1]}{0.0.0.0:4041}
20/03/25 11:17:17 INFO ui.SparkUI: Stopped Spark web UI at http://****:4041
2、history server
spark提供了history server,使其可以在application 完成以后来查看相应的页面。
原理是将spark application执行过程中的信息以及结果保存成一个文件存到相应的路径,然后server端会去指定的位置扫描加载。如下所示
-rwxrwxrwx 3 hadoop hadoop 22165 2019-07-29 07:14 hdfs://beh/var/log/hadoop-spark/application_1544095686986_0001
-rwxrwx— 2 hadoop hadoop 87292 2020-03-25 19:41 hdfs://beh/var/log/hadoop-spark/application_1584768368082_0023
每一个文件使用json保存的一些信息,等待server端的扫描加载
1、配置
1、客户端的配置
在spark-defaults.conf下
spark.eventLog.dir hdfs:///sparkHistory
spark.eventLog.enabled true
- 2、server端的配置
在spark-env.sh 下
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.fs.logDirectory=hdfs:///sparkHistory"
2、启动
进入spark根目录的sbin下
./start-history-server.sh
3、参数说明
history server有一些相关的配置,具体的如官网所示
https://spark.apache.org/docs/latest/monitoring.html
4、参数说明、在yarn的UI 界面跳转
在yarn界面链接到spark历史服务器
抱歉之前的写法只是能在访问 ip:18080 这样可以访问,但是如果在yarn UI的界面链接过去是不能的
如这个界面
如果想点击history 跳转到spark的history界面的话,需要在你的spark-default.conf 中配置 spark.yarn.historyServer.address :18080 ( 就是你启动服务的IP)。
配置好了 然后启动history server 即可连接过去了(猜想应该是去照这个spark-default.conf的配置去了,没有就不跳转)
看下日志,看下端口,是否启动成功
启动成功 则开启了history-server