Spark Monitoring and Instrumentation
- Spark monitoring
- 每個SparkContext啟動,皆會啟動Web UI,預設在4040端口上,若4040端口被佔用則往上累加
- 該Web UI包含了許多資訊,當中包含執行過程和調優的訊息
- 當SparkContext的Job結束後,包含非正常結束,上述的Web UI也會消失
- 為了不讓重要的資訊消失,可以在Spark job開始時,指定以下參數,那麼資訊將會被永久的保存:
- spark.eventLog.enabled true
- spark.eventLog.dir [Spark history server log directory]
- 將上述資訊保存後,可以透過Spark history server來進行查看
- Spark history server開啟後預設在18080端口執行,並列出Incomplete與Completed的Applications和Attempts
- 使用下列參數指定已保存資訊的所在資料夾,讓Spark history server讀取,而在指定資料夾內的子資料夾放置每個Application的資訊
- spark.history.fs.logDirectory
History Server Environment Variables and Configuration Options
- Environment variables
- SPARK_DAEMON_MEMORY: 在Application是長服務時,例如Spark thrift server,Log會非常多,此時預設的1G是無法正常把Log載入的,故需要調大
- Configuration options
- spark.history.fs.cleaner.enabled: 指定History server是否定時清理Log
- spark.history.fs.cleaner.interval: 清理時間的間隔區段
- spark.history.fs.cleaner.maxAge: 指定被清理的檔案年紀
- spark.history.retainedApplications: 指定History server在cache中要保留幾個Application的UI Data,如果User在Web中要觀看不存在cache的UI Data,則Histroy server則會從Disk中讀取
History Server Demo
- 設定spark-defaults.conf
|
|
- 啟動History server
|
|
- 查看History server的Log,可以看到啟動時發生錯誤,以及錯誤原因
|
|
- 由上述錯誤訊息file:/tmp/spark-events does not exist,使用官網反查file:/tmp/spark-events的參數得知,此值是spark.history.fs.logDirectory的預設值,用來指定讀取Application log的位置
- 透過配置spark-env.sh指定Application log的放置位置
|
|
- 再次啟動History server,並查看Log
|
|
- 啟動後可以使用Url來訪問History server
- Url在Log的最後一行有顯示
- 因為當前沒有任何的Application log,所以在Incomplete或Cmplete皆沒有可以顯示的資料
- 使用spark-shell產生Application log
|
|
- 在Incompleted可以看到對應的Application,以及點擊進去可以看到細項資訊,這些資訊與8080端口上的資訊是一模一樣的
- 在sc.stop後,Application會從Incomplete移動到Complete
- 換句話說,若沒有執行sc.stop,則Application則不會被移動到Complete
|
|
- Complete Application對應的Web
REST API
- Spark monitoring REST API
- 透過History server提供的REST API,構建自定義的可視化或監控工具
- 可以處理的對象包含Running application和History server
- REST API的Endpoint詳細說明在官網中
- REST API的內部實現以及History server web UI資料顯示,皆是到spark.history.fs.logDirectory讀取每個Application的Log,然後進行資料抽取