在運行Spark應用程序的時候,driver會提供一個webUI給出應用程序的運行信息,但是該webUI隨着應用程序的完成而關閉端口,也就是 說,Spark應用程序運行完后,將無法查看應用程序的歷史記錄。Spark history server就是為了應對這種情況而產生的,通過配置,Spark應用程序在運行完應用程序之后,將應用程序的運行信息寫入指定目錄,而Spark history server可以將這些運行信息裝載並以web的方式供用戶瀏覽。
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop1:8000/sparklogs spark.yarn.historyServer.address hadoop1:18080
進入$SPARK_HOME/sbin路徑
./start-all.sh
./start-history-server.sh
注意:會啟動失敗,控制台顯示
hadoop@Node4:/usr/local/SPARK/spark-1.1.0-bin-hadoop2.4/sbin$ ./start-history-server.sh starting org.apache.spark.deploy.history.HistoryServer, logging to /usr/local/SPARK/spark-1.1.0-bin-hadoop2.4/sbin/../logs/spark-hadoop-org.apache.spark.deploy.history.HistoryServer-1-Node4.out failed to launch org.apache.spark.deploy.history.HistoryServer: at org.apache.spark.deploy.history.FsHistoryProvider.<init>(FsHistoryProvider.scala:41) ... 6 more full log in /usr/local/SPARK/spark-1.1.0-bin-hadoop2.4/sbin/../logs/spark-hadoop-org.apache.spark.deploy.history.HistoryServer-1-Node4.out
找到日志文件,發現報錯 Logging directory must be specified
解決:在啟動historyserver的時候需要加上參數,指明log的存放位置,例如,我們在spark-default.conf中配置的存放路徑為hdfs://hadoop1:8000/sparklogs
有下面兩種方法解決問題
1. 將啟動命令改成
start-history-server.sh hdfs://node4:9000/directory
2. 啟動命令不變,在conf/spark-env.sh中添加
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node4:9000/directory"
這樣,在啟動HistoryServer之后,在瀏覽器中打開http://node4:18080就可以看到web頁面了
附:在conf/spark-defaults.conf中配置參數
history server相關的配置參數描述
1) spark.history.updateInterval
默認值:10
以秒為單位,更新日志相關信息的時間間隔
2)spark.history.retainedApplications
默認值:50
在內存中保存Application歷史記錄的個數,如果超過這個值,舊的應用程序信息將被刪除,當再次訪問已被刪除的應用信息時需要重新構建頁面。
3)spark.history.ui.port
默認值:18080
HistoryServer的web端口
4)spark.history.kerberos.enabled
默認值:false
是否使用kerberos方式登錄訪問HistoryServer,對於持久層位於安全集群的HDFS上是有用的,如果設置為true,就要配置下面的兩個屬性
5)spark.history.kerberos.principal
默認值:用於HistoryServer的kerberos主體名稱
6)spark.history.kerberos.keytab
用於HistoryServer的kerberos keytab文件位置
7)spark.history.ui.acls.enable
默認值:false
授權用戶查看應用程序信息的時候是否檢查acl。如果啟用,只有應用程序所有者和spark.ui.view.acls指定的用戶可以查看應用程序信息;否則,不做任何檢查
8)spark.eventLog.enabled
默認值:false
是否記錄Spark事件,用於應用程序在完成后重構webUI
9)spark.eventLog.dir
默認值:file:///tmp/spark-events
保存日志相關信息的路徑,可以是hdfs://開頭的HDFS路徑,也可以是file://開頭的本地路徑,都需要提前創建
10)spark.eventLog.compress
默認值:false
是否壓縮記錄Spark事件,前提spark.eventLog.enabled為true,默認使用的是snappy
以spark.history開頭的需要配置在spark-env.sh中的SPARK_HISTORY_OPTS,以spark.eventLog開頭的配置在spark-defaults.conf
