Spark之Monitor

在跑Spark作业的时候,或者从半夜跑到第二天,你常常需要看下运行信息以及运行情况;这样就可以根据这些运行情况进行调优,由此可见,Spark作业在运行时的监控就显得尤为重要了。

常用的Spark应用程序监控方法有Spark Web UI、Spark HistoryServer UI、REST API等,详情可参考上一篇转载的博客。

通过Spark Web UI进行监控

在每一个SparkContext都会启动一个Web UI用来展示一些有关应用程序的非常有用的信息,默认在4040端口;

在Web UI上可以看到很多有用的信息,比如:Status、Host、Duration、gc、launch的时间,这些在生产过程中经常需要去观察;但是当任务跑完或者挂了的话,就没有Web UI了,上面也不能看到任何信息;不论local模式还是Cluster模式,都是一样的;
比如访问http://hadoop-01:4040,看到以下信息:
在这里插入图片描述
在这里插入图片描述
当然,如果你想在sc.stop()后,即Spark应用程序停掉后,仍能去访问Web UI,那么你就需要在启动应用程序前,把spark.eventLog.enabled 这个参数设置成true。

通过Spark HistoryServer UI进行监控

在Spark应用程序结束后,通过Spark HistoryServer把已经记录记录或者保存下来的event事件的信息,重新在UI界面上把这些信息给渲染出来,渲染出来的UI界面同Web UI展示的是一模一样的;

如何通过Spark HistoryServer 就行监控?

1.修改spark-defaults.conf配置文件:
spark.eventLog.enabled true    //把记录日志事件开启
spark.eventLog.dir hdfs://namenode/shared/spark-logs  把记录的日志放在这个目录

[hadoop@hadoop-01 ~]$ cd $SPARK_HOME 
[hadoop@hadoop-01 spark-2.4.2-bin-2.6.0-cdh5.7.0]$ cd conf/

//编辑这个配置文件,修改s上述两个参数(其它参数不动)
 //9000这个端口号要注意一下,有的可能是8020
[hadoop@hadoop001 conf]$ vi spark-defaults.conf 
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://hadoop-01:9000/g6_directory

[hadoop@hadoop001 conf]$ hdfs dfs -mkdir /g6_directory   //这个目录需要手动创建

2.修改spark-env.sh配置文件

有些环境变量需要配置,比如SPARK_HISTORY_OPTS (当然还有其它参数,请参考上一篇转载的博客):

SPARK_HISTORY_OPTS   //以spark.history.*这个开头的都配置在这个地方配置

那么以spark.history.*这个开头的配置有哪些呢?比如说:

//这些参数都有默认值的
spark.history.fs.logDirectory    //从哪里读取日志,上面的spark.eventLog.dir 表示记到哪里去,记在哪里就要从哪里去读取这个日志
spark.history.fs.update.interval	
spark.history.fs.cleaner.enabled	
spark.history.fs.cleaner.interval

如何配置呢?在spark-env.sh这个配置文件里配置,例如:

[hadoop@hadoop001 conf]$ vi spark-env.sh
 # - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y") 
 SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://hadoop001:9000/g6_directory"
 //其余参数类似
3.启动
//启动
[hadoop@hadoop-01 sbin]$ ./start-history-server.sh
starting org.apache.spark.deploy.history.HistoryServer, logging to /home/hadoop/app/spark-2.4.2-bin-2.6.0-cdh5.7.0/logs/spark-hadoop-org.apache.spark.deploy.history.HistoryServer-1-hadoop-01.out

//jps看下进程,出现了HistoryServer进程
[hadoop@hadoop-01 sbin]$ jps
32258 SparkSubmit
15511 SecondaryNameNode
11241 ResourceManager
32715 HistoryServer
32764 Jps
11373 NodeManager
15278 DataNode
15151 NameNode

//HistoryServer
[hadoop@hadoop-01 sbin]$ more /home/hadoop/app/spark-2.4.2-bin-2.6.0-cdh5.7.0/logs/spark-hadoop-org.apache.spark.deploy.history.HistoryServer-1-hadoop-01.out
Spark Command: /usr/java/jdk1.8.0_45/bin/java -cp /home/hadoop/app/spark-2.4.2-bin-2.6.0-cd
h5.7.0/conf/:/home/hadoop/app/spark-2.4.2-bin-2.6.0-cdh5.7.0/jars/* -Dspark.history.fs.logD
irectory=hdfs://hadoop-01:9000/g6_directory -Xmx1g org.apache.spark.deploy.history.HistoryS
erver
========================================
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
19/07/26 10:41:35 INFO HistoryServer: Started daemon with process name: 32715@hadoop-01
19/07/26 10:41:35 INFO SignalUtils: Registered signal handler for TERM
19/07/26 10:41:35 INFO SignalUtils: Registered signal handler for HUP
19/07/26 10:41:35 INFO SignalUtils: Registered signal handler for INT
19/07/26 10:41:35 WARN NativeCodeLoader: Unable to load native-hadoop library for your plat
form... using builtin-java classes where applicable
19/07/26 10:41:35 INFO SecurityManager: Changing view acls to: hadoop
19/07/26 10:41:35 INFO SecurityManager: Changing modify acls to: hadoop
19/07/26 10:41:35 INFO SecurityManager: Changing view acls groups to: 
19/07/26 10:41:35 INFO SecurityManager: Changing modify acls groups to: 
19/07/26 10:41:35 INFO SecurityManager: SecurityManager: authentication disabled; ui acls d
isabled; users  with view permissions: Set(hadoop); groups with view permissions: Set(); us
ers  with modify permissions: Set(hadoop); groups with modify permissions: Set()
19/07/26 10:41:35 INFO FsHistoryProvider: History server ui acls disabled; users with admin
 permissions: ; groups with admin permissions
19/07/26 10:41:36 INFO FsHistoryProvider: Parsing hdfs://hadoop-01:9000/g6_directory/local-
1564107825549.inprogress for listing data...
19/07/26 10:41:37 INFO Utils: Successfully started service on port 18080.
19/07/26 10:41:37 INFO HistoryServer: Bound HistoryServer to 0.0.0.0, and started at http:/
/hadoop-01:18080
19/07/26 10:41:37 INFO FsHistoryProvider: Finished parsing hdfs://hadoop-01:9000/g6_directo
ry/local-1564107825549.inprogress

//ps -ef看一下,可以看到它是一个java进程 还有其它参数 包括我们自己设置的
[hadoop@hadoop-01 sbin]$ ps -ef |grep HistoryServer
hadoop     361 31384  0 10:43 pts/1    00:00:00 grep HistoryServer
hadoop   32715     1  5 10:41 pts/1    00:00:06 /usr/java/jdk1.8.0_45/bin/java -cp /home/hadoop/app/spark-2.4.2-bin-2.6.0-cdh5.7.0/conf/:/home/hadoop/app/spark-2.4.2-bin-2.6.0-cdh5.7.0/jars/* -Dspark.history.fs.logDirectory=hdfs://hadoop-01:9000/g6_directory -Xmx1g org.apache.spark.deploy.history.HistoryServer
4.访问

通过以上日志可以看出访问地址:http://hadoop-01:18080

5.停止HistoryServer
//不需要的话可以这样停掉
[hadoop@hadoop-01 sbin]$ ./stop-history-server.sh
stopping org.apache.spark.deploy.history.HistoryServer

可以去这个目录看一下它的日志;

[hadoop@hadoop-01 sbin]$ hdfs dfs -ls /g6_directory
Found 1 items
-rwxrwx---   3 hadoop supergroup        213 2019-07-26 10:23 /g6_directory/local-1564107825549.inprogress

可以看到它后缀是一个application id,如果有多个应用程序的话,就会有多个类似的文件,而且如果查看的话,会发现它是一个json格式的。下面访问的json格式的信息就是从这里来的,把这些信息放到页面上而已。

通过REST API进行监控

这种方式通过向REST发送一个请求,返回的是JSON格式的信息,这是以JSON来进行交互的。而上面的Web UI的监控方式都是页面定义好的。而通过这种REST API的监控,对于开发人员来说,可以自己去创建新的可视化和监视工具,定义自己想要的监控程序。
正在运行的程序,以前运行的程序,都可以使用REST API来监控。对于历史服务器,它们通常可以在http://hadoop-01:18080/api/v1访问,对于正在运行的应用程序,可以在http://hadoop-01:18080/api/v1访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值