【Spark十八】Spark History Server

本文包括如下内容:

 

  • Spark History Server的作用

  • 配置Spark History Server

  • 运行Spark History Server

  • 查看Spark程序的运行信息

Spark History Server的作用

在 运行Spark应用程序的时候,driver会提供一个webUI用于展现应用程序的运行信息,但是该webUI随着应用程序的完成而关闭端口。也就是说,这个服务是伴随Spark应用程序的运行周期的,也就是当应用程序运行完成后,将无法查看应用程序的历史记录。Spark history server就是为了应对这种情况而产生的,通过配置,Spark应用程序在运行完应用程序之后,将应用程序的运行信息写入指定目录,而Spark history server可以将这些运行信息装载并以web的方式供用户浏览

 

伴随Spark应用程序而启动的web查看服务的默认端口号是4040,或者4041(如果当前端口被占用,比如4040被占用,那么Spark会抛一个异常,但是不影响应用继续运行,driver会使用这个已用的端口加1,以此类推)

 

 

 

配置Spark History Server

1. 在Spark的conf目录下,将spark-defaults.conf.template改名为spark-defaults.conf

mv spark-defaults.conf.template spark-defaults.conf

 

2. 对spark-defaults.conf作如下配置

 

///Spark Master的IP/Port
spark.master                     spark://hadoop.master:7077
///是否记录作业产生的事件或者运行状态(job,stage等使用内存等信息)
spark.eventLog.enabled           true
///如果记录作业产生的事件或者运行状态,则将事件写入什么位置
spark.eventLog.dir               hdfs://hadoop.master:9000/user/hadoop/sparkevtlog
///http history的监听端口号,通过http://hadoop.master:18080访问
spark.history.ui.port            18080

 

 

启动Spark History Server

1, 使用如下命令启动History Server

 

[[email protected] sbin]$sbin/start-history-server.sh

 

启动完成后,发现18080并没有监听,到Spark的logs目录下查看history server的启动日志,发现报如下错误:

 

 

Caused by: java.lang.IllegalArgumentException: Log directory specified does not exist: file:/tmp/spark-events. Did you configure the correct one through spark.fs.history.logDirectory?

 

2. 将spark.fs.history.logDirectory配置到conf/spark-defaults.conf目录里,发现并不起作用,

 

3.查看start-history-server.sh脚本内容,发现这个参数可以作为启动脚本的第一个参数传递:

 

if [ $# != 0 ]; then
  echo "Using command line arguments for setting the log directory is deprecated. Please "
  echo "set the spark.history.fs.logDirectory configuration option instead."
  export SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS -Dspark.history.fs.logDirectory=$1"
fi

 所以使用如下命令启动History Server

 

./start-history-server.sh hdfs://hadoop.master:9000/user/hadoop/sparkhistorylog

 

查看作业的执行情况

1. 当History第一次启动,从没有作业执行,那么History Server上不显示内容(只提示没有Job信息可供查看)

2. 使用spark-submit提交一个作业,保证SparkContext调用了stop方法,否则History Server不会显示历史信息

3.访问http://hadoop.master:18080得到如下结果

 

 
【Spark十八】Spark History Server
 

查看作业信息

点击App ID访问http://192.168.26.136:18080/history/app-20150110055201-0002/,可以打开这个Spark程序的执行情况。

可以查看如下信息:

  • Spark程序启动几个作业

  • 这个Spark程序一个Job包含多少Stages

  • 这个Spark程序一共包含多少个Stages

  • Stage的详细信息

  • 这个Spark程序是几个Executor执行完成的

 

1. 在这个Spark程序启动几个Job


 

 【Spark十八】Spark History Server2. Spark程序一个Job包含多少Stages

 


【Spark十八】Spark History Server
 

 

3. Spark程序一共包含多少个Stages

 

 
【Spark十八】Spark History Server
 

4. Stage的详细信息

 

 
【Spark十八】Spark History Server
 

5. Spark程序是几个Executor执行完成的


【Spark十八】Spark History Server