Spark History Server配置使用

Spark history Server產生背景html

以standalone運行模式爲例,在運行Spark Application的時候,Spark會提供一個WEBUI列出應用程序的運行時信息;但該WEBUI隨着Application的完成(成功/失敗)而關閉,也就是說,Spark Application運行完(成功/失敗)後,將沒法查看Application的歷史記錄;web

Spark history Server就是爲了應對這種狀況而產生的,經過配置能夠在Application執行的過程當中記錄下了日誌事件信息,那麼在Application執行結束後,WEBUI就能從新渲染生成UI界面展示出該Application在執行過程當中的運行時信息;sql

Spark運行在yarn或者mesos之上,經過spark的history server仍然能夠重構出一個已經完成的Application的運行時參數信息(假如Application運行的事件日誌信息已經記錄下來);apache

 

配置&使用Spark History Server安全

以默認配置的方式啓動spark history server:app

cd $SPARK_HOME/sbin
start-history-server.sh

報錯:ide

starting org.apache.spark.deploy.history.HistoryServer, logging to /home/spark/software/source/compile/deploy_spark/sbin/../logs/spark-spark-org.apache.spark.deploy.history.HistoryServer-1-hadoop000.out
failed to launch org.apache.spark.deploy.history.HistoryServer:
        at org.apache.spark.deploy.history.FsHistoryProvider.<init>(FsHistoryProvider.scala:44)
        ... 6 more

須要在啓動時指定目錄:oop

start-history-server.sh hdfs://hadoop000:8020/directory

hdfs://hadoop000:8020/directory能夠配置在配置文件中,那麼在啓動history-server時就不須要指定,後續介紹怎麼配置;測試

注:該目錄須要事先在hdfs上建立好,不然history-server啓動報錯。ui

啓動完成以後能夠經過WEBUI訪問,默認端口是18080:http://hadoop000:18080

默認界面列表信息是空的,下面截圖是我跑了幾回spark-sql測試後出現的。

 

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

 

我在測試過程當中的配置以下:

spark-defaults.conf

spark.eventLog.enabled  true
spark.eventLog.dir      hdfs://hadoop000:8020/directory
spark.eventLog.compress true

spark-env.sh

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=7777 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://had
oop000:8020/directory"

參數描述:

spark.history.ui.port=7777  調整WEBUI訪問的端口號爲7777

spark.history.fs.logDirectory=hdfs://hadoop000:8020/directory  配置了該屬性後,在start-history-server.sh時就無需再顯示的指定路徑

spark.history.retainedApplications=3   指定保存Application歷史記錄的個數,若是超過這個值,舊的應用程序信息將被刪除

 

調整參數後啓動start-history-server.sh

start-history-server.sh 

訪問WEBUI: http://hadoop000:7777

 

在使用spark history server的過程當中產生的幾個疑問:

疑問1:spark.history.fs.logDirectory和spark.eventLog.dir指定目錄有啥區別?

經測試後發現:

spark.eventLog.dir:Application在運行過程當中全部的信息均記錄在該屬性指定的路徑下;

spark.history.fs.logDirectory:Spark History Server頁面只展現該指定路徑下的信息;

好比:spark.eventLog.dir剛開始時指定的是hdfs://hadoop000:8020/directory,然後修改爲hdfs://hadoop000:8020/directory2

那麼spark.history.fs.logDirectory若是指定的是hdfs://hadoop000:8020/directory,就只能顯示出該目錄下的全部Application運行的日誌信息;反之亦然。

 

疑問2:spark.history.retainedApplications=3 貌似沒生效??????

The History Server will list all applications. It will just retain a max number of them in memory. That option does not control how many applications are show, it controls how much memory the HS will need.

注意:該參數並非也頁面中顯示的application的記錄數,而是存放在內存中的個數,內存中的信息在訪問頁面時直接讀取渲染既可;

好比說該參數配置了10個,那麼內存中就最多隻能存放10個applicaiton的日誌信息,當第11個加入時,第一個就會被踢除,當再次訪問第1個application的頁面信息時就須要從新讀取指定路徑上的日誌信息來渲染展現頁面。 

詳見官方文檔:http://spark.apache.org/docs/latest/monitoring.html

相關文章
相關標籤/搜索