在執行Spark應用程序的時候,driver會提供一個webUI給出應用程序的執行信息。但是該webUI隨着應用程序的完畢而關閉port,也就是說,Spark應用程序執行完後,將沒法查看應用程序的歷史記錄。Spark history server就是爲了應對這樣的狀況而產生的。經過配置,Spark應用程序在執行完應用程序以後,將應用程序的執行信息寫入指定文件夾。而Spark history server可以將這些執行信息裝載並以web的方式供用戶瀏覽。
要使用history server,對於提交應用程序的client需要配置下面參數(在conf/spark-defaults.conf中配置):
而對於history server的服務端,可以配置下面環境變量:
- SPARK_DAEMON_MEMORY 分配給history server的內存大小,默認512m。
- SPARK_DAEMON_JAVA_OPTS history server的JVM選擇。默以爲空。
- SPARK_PUBLIC_DNS history server的公網地址,假設不設置,可以用內網地址來訪問。
默以爲空。git
- SPARK_HISTORY_OPTS history server的屬性設置。屬性如如下所看到的。默以爲空。
屬性名稱 |
默認 |
含義 |
spark.history.updateInterval |
10 |
以秒爲單位。多長時間history server顯示的信息進行更新。 每次更新都會檢查持久層事件日誌的不論什麼變化。github |
spark.history.retainedApplications |
250 |
在history server上顯示的最大應用程序數量,假設超過這個值,舊的應用程序信息將被刪除。 |
spark.history.ui.port |
18080 |
history server的默認訪問port |
spark.history.kerberos.enabled |
false |
是否使用kerberos方式登陸訪問history server,對於持久層位於安全集羣的HDFS上是實用的。 假設設置爲true,就要配置如下的兩個屬性。web |
spark.history.kerberos.principal |
空 |
用於history server的kerberos主體名稱 |
spark.history.kerberos.keytab |
空 |
用於history server的kerberos keytab文件位置 |
spark.history.ui.acls.enable |
false |
受權用戶查看應用程序信息的時候是否檢查acl。假設啓用,無論應用程序的spark.ui.acls.enable怎麼設置。都要進行受權檢查,僅僅有應用程序所有者和spark.ui.view.acls指定的用戶可以查看應用程序信息;假設禁用,不作不論什麼檢查。 |
2:實驗環境
3:實驗
A:實驗計劃
B:集羣配置並啓動history server
虛擬機羣:
[root@hadoop1 ~]# su - hadoop
[hadoop@hadoop1 ~]$ cd /app/hadoop/hadoop220
[hadoop@hadoop1 hadoop220]$ sbin/start-dfs.sh
[hadoop@hadoop1 hadoop220]$ bin/hdfs dfs -mkdir /sparklogs
[hadoop@hadoop1 hadoop220]$ sbin/start-yarn.sh
[hadoop@hadoop1 hadoop220]$ cd ../spark100/conf
[hadoop@hadoop1 conf]$ cp spark-defaults.conf.template spark-defaults.conf
[hadoop@hadoop1 conf]$ vi spark-defaults.conf
[hadoop@hadoop1 conf]$ cat spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop1:8000/sparklogs
spark.yarn.historyServer.address hadoop1:18080
[hadoop@hadoop1 conf]$ cd ..
[hadoop@hadoop1 spark100]$ sbin/start-all.sh
[hadoop@hadoop1 spark100]$ sbin/start-history-server.sh hdfs://hadoop1:8000/sparklogs
C:client配置
mmicky@wyy:~$ su - hadoop
hadoop@wyy:~$ cd /app/hadoop/spark100
hadoop@wyy:/app/hadoop/spark100$ cd conf
hadoop@wyy:/app/hadoop/spark100/conf$ cp spark-defaults.conf.template spark-defaults.conf
hadoop@wyy:/app/hadoop/spark100/conf$ vi spark-defaults.conf
hadoop@wyy:/app/hadoop/spark100/conf$ cat spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop1:8000/sparklogs
spark.yarn.historyServer.address hadoop1:18080
hadoop@wyy:/app/hadoop/spark100/conf$ cd ..
D:client提交scala程序
hadoop@wyy:/app/hadoop/spark100$ ./bin/spark-submit --master local[*] --class week2.SparkPi --executor-memory 2g --driver-memory 1g week2.jar
hadoop@wyy:/app/hadoop/spark100$ ./bin/spark-submit --master spark://hadoop1:7077 --class week2.SparkPi --executor-memory 2g --driver-memory 1g week2.jar
hadoop@wyy:/app/hadoop/spark100$ ./bin/spark-submit --master yarn-client --class week2.SparkPi --executor-memory 2g --driver-memory 1g week2.jar
hadoop@wyy:/app/hadoop/spark100$ ./bin/spark-submit --master yarn-cluster --class week2.SparkPi --executor-memory 2g --driver-memory 1g week2.jar
E:虛擬機羣提交python程序
[hadoop@hadoop1 spark100]$ ./bin/spark-submit --master local[*] --executor-memory 2g --driver-memory 1g pi.py
[hadoop@hadoop1 spark100]$ ./bin/spark-submit --master spark://hadoop1:7077 --executor-memory 2g --driver-memory 1g pi.py
[hadoop@hadoop1 spark100]$ ./bin/spark-submit --master yarn-client --executor-memory 2g --driver-memory 1g pi.py
[hadoop@hadoop1 spark100]$ ./bin/spark-submit --master yarn-cluster--executor-memory 2g --driver-memory 1g pi.py
F:檢查history server工做狀況
用瀏覽器打開hadoop1:18080
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