Spark入门 - History Server配置使用
問題描述
在Spark安裝成功后,無論是通過spark-submit工具還是通過Intellij IDEA提交任務,只要在Spark應用程序運行期間,都可以通過WebUI控制臺頁面來查看具體的運行細節,在瀏覽器中通過地址:http://<driver-node>:4040即可查看當前的運行狀態。但是一旦應用程序運行結束,該Web界面也就失效了,無法繼續查看監控集群信息。無法回顧剛剛運行的程序細節,進而定向做出優化,肯定極為不便。
這時候就需要為集群配置Spark History Server了。
注:<driver-node>可以是主機名,如master,也可以是主機名對應的IP。
Spark History Server
Spark History Server可以很好地解決上面的問題。
通過配置,我們可以在Spark應用程序運行完成后,將應用程序的運行信息寫入知道目錄,而Spark History Server可以將這些信息裝在并以Web形式供用戶瀏覽。
要使用Spark History Server,對于提交應用程序的客戶端需要配置以下參數。
Spark History Server配置
下面以Standalone模式為例說明配置信息。更多擴展細節可以根據自己的需求在此基礎上添加配置項。
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://master:9000/history spark.eventLog.compress true |
屬性說明
(1) spark.eventLog.enabled。
是否記錄Spark事件,用于應用程序在完成后的籌夠WebUI。
(2) spark.eventLog.dir。
設置spark.eventLog.enabled為true后,該屬性為記錄spark時間的根目錄。在此根目錄中,Spark為每個應用程序創建分目錄,并將應用程序的時間記錄到此目錄中。用戶可以將此屬性設置為HDFS目錄,以便History Server讀取。
(3) spark.eventLog.compress。
否壓縮記錄Spark事件,前提spark.eventLog.enabled為true,默認使用的是snappy。
2、在HDFS中建立存放目錄。
上文已經設置好了存放History的目錄HDFS文件目錄,現在我們在HDFS中建立相應的目錄專門存放文件。
| root@master:~# hadoop dfs -mkdir /history |
之后的歷史記錄都會被存放到這里。
3、配置spark-env.sh文件。
在之前的配置項后面
| export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://master:9000/history" |
屬性說明
(1) spark.history.ui.port
WebUI的端口號。默認為18080,也可以自行設置。
(2) spark.history.retainedApplications
設置緩存Cache中保存的應用程序歷史記錄的個數,默認50,如果超過這個值,舊的將被刪除。
注:緩存文件數不表示實際顯示的文件總數。只是表示不在緩存中的文件可能需要從硬盤讀取,速度稍有差別。
(3) spark.history.fs.logDirectory
存放歷史記錄文件的目錄。可以是Hadoop APIs支持的任意文件系統。
更多配置參考文章末尾的鏈接。
啟動
依次啟動Hadoop的start-dfs.sh和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 |
如果提示文件目錄無效,可以直接使用下面的命令指定目錄:
| root@master:/usr/local/spark/spark-1.6.2-bin-hadoop2.6/sbin# ./start-history-server.sh hdfs://master:9000/history |
啟動后的效果如下(此時尚未運行程序,沒有記錄顯示出來):
之后在每次應用程序運行結束后,就可以在這里觀察剛剛程序的細節了。
小結
應用程序運行時的4040和歷史記錄的18080WebUI配合使用,可以讓我們在運行Spark應用的時候隨時監測程序運行狀態,并作相應的優化和調節,效果顯著。
小問題
不過其中也有一部分小細節尚未解決:如某次程序允許的時候用戶選擇自行中斷,但歷史記錄中仍然存在該記錄,而且最主要的是目前無法刪除單項紀錄。這就顯得很繁瑣了,如果需要對多項歷史記錄進行對比分析,就不得不先在很多的記錄中篩選出哪些是有用記錄,哪些是無用記錄,費時費力。
雖然官方提供了如spark.history.fs.cleaner.interval和spark.history.fs.cleaner.maxAge配置項,但依然不能很好地解決這一問題。
期待后續有更好的解決方案出現。
總結
以上是生活随笔為你收集整理的Spark入门 - History Server配置使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA下用SBT搭建Spark Hel
- 下一篇: Spark Metrics配置详解