在运行Spark应用程序的时候,driver会提供一个webUI给出应用程序的运行信息,但是该webUI随着应用程序的完成而关闭端口,也就是说,Spark应用程序运行完后,将无法查看应用程序的历史记录。Spark history server就是为了应对这种情况而产生的,通过配置,Spark应用程序在运行完应用程序之后,将应用程序的运行信息写入指定目录,而Spark history server可以将这些运行信息装载并以web的方式供用户浏览。
要使用history server,对于提交应用程序的客户端需要配置以下参数(在conf/spark-defaults.conf中配置): spark.eventLog.enabled 是否记录Spark事件,用于应用程序在完成后重构webUI。 spark.eventLog.dir 如果spark.eventLog.enabled为 true,该属性为记录spark事件的根目录。在此根目录中,Spark为每个应用程序创建分目录,并将应用程序的事件记录到在此目录中。用户可以将此属性设置为HDFS目录,以便history server读取历史记录文件。 spark.yarn.historyServer.address Spark history server的地址(不要加http://)。这个地址会在Spark应用程序完成后提交给YARN RM,然后RM将信息从RM UI写到history server UI上。
而对于history server的服务端,可以配置以下环境变量:
SPARK_DAEMON_MEMORY 分配给history server的内存大小,默认512m。
SPARK_DAEMON_JAVA_OPTS history server的JVM选择,默认为空。
SPARK_PUBLIC_DNS history server的公网地址,如果不设置,可以用内网地址来访问。默认为空。
SPARK_HISTORY_OPTS history server的属性设置,属性如下面所示。默认为空。
4:TIPS
driver在SparkContext使用stop()方法后才将完整的信息提交到指定的目录,如果不使用stop()方法,即使在指定目录中产生该应用程序的目录,history server也将不会加载该应用程序的运行信息。所以如果直接使用Spark1.0.0源代码/examples/src/main/python/pi.py,就无法显示其应用程序,在最后加上一行sc.stop()后,就可以显示。
history server增强版代码可以参看https://github.com/apache/spark/pull/718/files#r13398770