我想说4040端口太坑了,我运行wodcount案例,时间那么短,想去4040里查看任务具体运行情况,根本不可能。spark程序运行完毕后,就再无法通过4040端口看到什么了。今天我们通过修改spark的一些配置文件,使得我们的程序运行结束后,依然能够查看,并且通过WEBUI页面,可以看到一些详细内容,这对于我们的优化也有很大帮助。能够实现这个功能的就是HistoryServer服务。
1、首先关闭还在启动中的spark服务(如果是关闭状态,直接下一步)
hadoop@master:/usr/local/spark/spark-2.4.7/sbin$ ./stop-all.sh
2、首先创建spark-defaults.conf配置文件(所有节点都要更改),然后在HDFS文件系统上创建一个文件夹(只在master机器上创建)
#2.1重命名
hadoop@master:/usr/local/spark/spark-2.4.7/conf$ mv spark-defaults.conf.template spark-defaults.conf
hadoop@master:/usr/local/spark/spark-2.4.7/conf$ ll
total 48
-rw-r--r-- 1 hadoop hadoop 996 Sep 8 14:47 docker.properties.template
-rw-r--r-- 1 hadoop hadoop 1105 Sep 8 14:47 fairscheduler.xml.template
-rw-r--r-- 1 hadoop hadoop 2025 Sep 8 14:47 log4j.properties.template
-rw-r--r-- 1 hadoop hadoop 7801 Sep 8 14:47 metrics.properties.template
-rw-r--r-- 1 hadoop hadoop 878 Dec 13 13:38 slaves
-rw-r--r-- 1 hadoop hadoop 865 Sep 8 14:47 slaves.template
-rw-r--r-- 1 hadoop hadoop 1292 Sep 8 14:47 spark-defaults.conf
-rwxr-xr-x 1 hadoop hadoop 5148 Jan 26 09:35 spark-env.sh
-rwxr-xr-x 1 hadoop hadoop 4221 Sep 8 14:47 spark-env.sh.template
#2.2在HDFS文件系统上创建一个文件夹
hadoop@master:/usr/local/spark/spark-2.4.7/conf$ hdfs dfs -mkdir /spark-job-log
21/01/27 14:04:15 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
结果如下图:
3、在spark-defaults.conf文件中, 添加如下内容:(所有节点都要更改)
hadoop@master:/usr/local/spark/spark-2.4.7/conf$ vim spark-defaults.conf
spark.eventLog.enabled true spark.eventLog.dir hdfs://master:9000/spark-job-log
:wq (保存退出)
4、 修改spark-env.sh文件,添加如下配置(所有节点都要更改)
hadoop@master:/usr/local/spark/spark-2.4.7/conf$ vim spark-env.sh
添加下面这句:
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://master:9000/spark-job-log"
参数说明:
参数描述:
spark.eventLog.dir:Application在运行过程中所有的信息均记录在该属性指定的路径下;
spark.history.ui.port=18080 WEBUI访问的端口号为18080
spark.history.fs.logDirectory=hdfs://hadoop002:9000/spark-job-log 配置了该属性后,在start-history-server.sh时就无需再显式的指定路径,Spark History Server页面只展示该指定路径下的信息
spark.history.retainedApplications=30指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。
4、验证
#启动spark集群:
hadoop@master:/usr/local/spark/spark-2.4.7/sbin$ ./start-all.sh
#启动历史服务
hadoop@master:/usr/local/spark/spark-2.4.7/sbin$ ./start-history-server.sh
starting org.apache.spark.deploy.history.HistoryServer, logging to /usr/local/spark/spark-2.4.7/logs/spark-hadoop-org.apache.spark.deploy.history.HistoryServer-1-master.out
hadoop@master:/usr/local/spark/spark-2.4.7/sbin$ jps
4113 HistoryServer
4003 Master
1364 SecondaryNameNode
1142 NameNode
4158 Jps
hadoop@master:/usr/local/spark/spark-2.4.7/sbin$
master节点jps之后会出现HistoryServer,但是其他slave节点并不会有HistoryServer
下面开始激动人心的时刻啦!
登录WEB页面,输入: IP:18080(这里的IP是指你的master机器的公网IP)
他出来了!!!
下面我提交一个wordcount案例:
hadoop@master:/usr/local/spark/spark-2.4.7/bin$ ./spark-submit --master spark://master:7077 --class spark.WordCount --total-executor-cores 6 /home/hadoop/sparkmvn-1.0-SNAPSHOT.jar
运行成功后,就可以显示出来了。
点击APP ID,就到了和4040端口页面一样的了。下面愉快的分析,并进行优化。