問題描述
在Spark安裝成功后,無論是通過spark-submit工具還是通過Intellij IDEA提交任務,只要在Spark應用程序運行期間,都可以通過WebUI控制臺頁面來查看具體的運行細節(jié)凯肋,在瀏覽器中通過地址:http://<driver-node>:4040
即可查看當前的運行狀態(tài)。但是一旦應用程序運行結束汽馋,該Web界面也就失效了侮东,無法繼續(xù)查看監(jiān)控集群信息。無法回顧剛剛運行的程序細節(jié)豹芯,進而定向做出優(yōu)化悄雅,肯定極為不便。
這時候就需要為集群配置Spark History Server了铁蹈。
注:<driver-node>
可以是主機名宽闲,如master,也可以是主機名對應的IP握牧。
Spark History Server
Spark History Server可以很好地解決上面的問題容诬。
通過配置,我們可以在Spark應用程序運行完成后沿腰,將應用程序的運行信息寫入知道目錄览徒,而Spark History Server可以將這些信息裝在并以Web形式供用戶瀏覽。
要使用Spark History Server颂龙,對于提交應用程序的客戶端需要配置以下參數(shù)习蓬。
Spark History Server配置(只需要在master主機進行配置)
下面以Standalone模式為例說明配置信息。更多擴展細節(jié)可以根據自己的需求在此基礎上添加配置項厘托。
1友雳、首先配置$SPARK_HOME$/conf
目錄下的spark-defaults.conf
文件。
默認spark-defaults.conf
是不存在的铅匹,我們可以根據Spark提供的template文件新建之押赊。
root@master:/usr/local/spark/spark-1.6.2-bin-hadoop2.6/conf# mv spark-defaults.conf.template spark-defaults.conf
root@master:/usr/local/spark/spark-1.6.2-bin-hadoop2.6/conf# vim spark-defaults.conf
并修改文件內容為:
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop01:8020/spark_event_data
spark.eventLog.compress true
屬性說明
(1) spark.eventLog.enabled。
是否記錄Spark事件包斑,用于應用程序在完成后查看WebUI流礁。
(2) spark.eventLog.dir。
設置spark.eventLog.enabled為true后罗丰,該屬性為記錄spark時間的根目錄神帅。在此根目錄中,Spark為每個應用程序創(chuàng)建分目錄萌抵,并將應用程序的時間記錄到此目錄中找御。用戶可以將此屬性設置為HDFS目錄元镀,以便History Server讀取。
(3) spark.eventLog.compress霎桅。
否壓縮記錄Spark事件栖疑,前提spark.eventLog.enabled為true,默認使用的是snappy滔驶。
2遇革、在hdfs中建立存放目錄。
root@master:~# hadoop fs -mkdir /spark_event_data
之后的歷史記錄都會被存放到這里揭糕。
3萝快、配置spark-env.sh
文件。
在之前的配置項后面
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://hadoop01:8020/spark_event_data"
屬性說明
(1) spark.history.ui.port
WebUI的端口號著角。默認為18080揪漩,也可以自行設置。
(2) spark.history.retainedApplications
設置緩存Cache中保存的應用程序歷史記錄的個數(shù)雇寇,默認50氢拥,如果超過這個值,舊的將被刪除锨侯。
注:緩存文件數(shù)不表示實際顯示的文件總數(shù)嫩海。只是表示不在緩存中的文件可能需要從硬盤讀取,速度稍有差別囚痴。
(3) spark.history.fs.logDirectory
存放歷史記錄文件的目錄叁怪。可以是Hadoop APIs支持的任意文件系統(tǒng)深滚。
啟動
啟動Spark的start-all.sh
后奕谭,再運行start-history-server.sh
文件即可啟動歷史服務。
root@master:/usr/local/spark/spark-1.6.2-bin-hadoop2.6/sbin# ./start-history-server.sh
啟動后的效果如下(此時尚未運行程序痴荐,沒有記錄顯示出來):
之后在每次應用程序運行結束后血柳,就可以在這里觀察剛剛程序的細節(jié)了。
小結
應用程序運行時的4040和歷史記錄的18080WebUI配合使用生兆,可以讓我們在運行Spark應用的時候隨時監(jiān)測程序運行狀態(tài)难捌,并作相應的優(yōu)化和調節(jié),效果顯著鸦难。