1 Standalone模式下

按照香飘叶子的文档部署好完全分布式集群后,提交任务到Spark集群中,查看hadoop01:8080,想点击查看某个已完成应用的历史情况,出现下面的提示:

Event logging is not enabled
No 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  true
spark.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的环境即可,不需要启动Sparkmaster或者Worker节点,因为最终的程序是跑在Hadoop集群上,由Yarn进行调度的,这点需要明确。

在这种情况下,提交任务到Yarn上,是可以通过ResourceManager的地址来查看到执行的应用程序,比如RM是在hadoop02节点上启动,则默认可以通过hadoop02:8088来访问到其Application页面,但是如果这时希望查看到前面standalone模式下详细的Spark程序执行情况时,是没有办法的,即便启动了Hadoophistory-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