Spark笔记整理(十二):日志记录与监控
1 Standalone模式下
按照香飘叶子的文档部署好完全分布式集群后,提交任务到Spark集群中,查看hadoop01:8080,想点击查看某个已完成应用的历史情况,出现下面的提示:
Event logging is not enabledNo event logs were found for this application! To enable event logging, set spark.eventLog.enabled to true and spark.eventLog.dir to the directory to which your event logs are written.
显然需要按照提示进行相关的配置,先将Spark服务停掉,然后在conf
目录下的spark-defaults.conf
配置文件中添加如下配置:
spark.eventLog.enabled truespark.eventLog.dir hdfs://ns1/logs/spark
不过需要提前在hdfs中创建好相关目录,将配置文件同步到各个节点上,然后重启Spark集群。
再提交任务:
./spark-submit-standalone.sh spark-process-1.0-SNAPSHOT.jar cn.xpleaf.spark.scala.core.p1._01SparkWordCountOps
然后就可以完成standalone
模式下Spark日志的记录和查看了。
2 Yarn模式下
2.1 必知常识
当采用Spark on Yarn
的方式来执行Spark
应用程序时,只需要在节点上配置好Spark
的环境即可,不需要启动Spark
的master
或者Worker
节点,因为最终的程序是跑在Hadoop
集群上,由Yarn
进行调度的,这点需要明确。
在这种情况下,提交任务到Yarn
上,是可以通过ResourceManager
的地址来查看到执行的应用程序,比如RM
是在hadoop02
节点上启动,则默认可以通过hadoop02:8088
来访问到其Application
页面,但是如果这时希望查看到前面standalone
模式下详细的Spark
程序执行情况时,是没有办法的,即便启动了Hadoop
的history-server
,也仅仅只能查看到logs
日志信息而已。
这时,就需要启动Spark本身的日志服务器,并通过其来查看执行的应用程序的Spark详细日志信息。
本文的描述都是基于Spark 1.6.2,后面新的Spark版本可能会有所不同。
2.2 日志(历史)服务器配置、启动与原理
在当前安装Spark的节点上,进入到conf目录,在配置文件spark-defaults.conf
添加下面的配置:
spark.eventLog.enabled true # 开启日志记录spark.eventLog.dir hdfs://ns1/logs/spark # 日志的保存位置spark.history.fs.logDirectory hdfs://ns1/logs/spark # 历史日志保存的位置
前面两个的配置是保证,执行Spark
程序时,完整的日志信息会保存下来,并保存到指定的位置上,最后一个配置则是说明,当启动Spark
的应用程序历史服务器时,应该从哪里去读取相关的日志信息,并以与standalone
模式相同的Web UI
的形式将日志信息展示出来。
配置完成后,使用下面的命令来启动历史服务器:
./sbin/start-history-server.sh
该日志历史服务器默认以18080
端口号来启动,因此,可以访问相关地址+端口号来进行访问,比如我是在hadoop01
节点上配置并启动该历史服务器的,那么就可以通过下面的地址进行访问:
hadoop01:18080
访问之后看到的就跟standalone
模式下的Web UI
是一样的,更详细的配置说明可以参考官方文档:
http://spark.apache.org/docs/1.6.2/monitoring.html#viewing-after-the-fact