1. 程式人生 > >Spark應用程式執行的日誌存在哪裡

Spark應用程式執行的日誌存在哪裡

  在很多情況下,我們需要檢視driver和executors在執行Spark應用程式時候產生的日誌,這些日誌對於我們除錯和查詢問題是很重要的。

  Spark日誌確切的存放路徑和部署模式相關:
(1)如果是Spark Standalone模式,我們可以直接在Master UI介面檢視應用程式的日誌,在預設情況下這些日誌是儲存在worker節點的work目錄下,這個目錄可以通過SPARK_WORKER_DIR引數進行配置。

(2)如果是Mesos模式,我們同樣可以通過Mesos的Master UI介面上看到相關應用程式的日誌,這些日誌是儲存在Mesos slave的work目錄下。

(3)如果是YARN模式,最簡單地收集日誌的方式是使用YARN的日誌收集工具(yarn logs -applicationId),這個工具可以收集你應用程式相關的執行日誌,但是這個工具是有限制的:應用程式必須執行完,因為YARN必須首先聚合這些日誌;而且你必須開啟日誌聚合功能(yarn.log-aggregation-enable,在預設情況下,這個引數是false)。

【注意】如果開啟了日誌聚合,日誌會存放至hdfs,本地的日誌會刪除。

  如果你執行在YARN模式,你可以在ResourceManager節點的WEB UI頁面選擇相關的應用程式,在頁面點選表格中Tracking UI列的ApplicationMaster,這時候你可以進入到Spark作業監控的WEB UI介面,這個頁面就是你Spark應用程式的proxy介面,當然你也可以通過訪問Driver所在節點開啟的4040埠,同樣可以看到這個介面。

  到這個介面之後,可以點選Executors選單,這時候你可以進入到Spark程式的Executors介面,裡面列出所有Executor資訊,以表格的形式展示,在表格中有Logs這列,裡面就是你Spark應用程式執行的日誌。如果你在程式中使用了println(….)輸出語句,這些資訊會在stdout檔案裡面顯示;其餘的Spark執行日誌會在stderr檔案裡面顯示。

  在預設情況下,Spark應用程式的日誌級別是INFO的,我們可以自定義Spark應用程式的日誌輸出級別,可以到$SPARK_HOME/conf/log4j.properties檔案裡面進行修改,比如:
  這裡寫圖片描述
  
  這樣Spark應用程式在執行的時候會打出WARN級別的日誌,然後在提交Spark應用程式的時候使用–files引數指定上面的log4j.properties檔案路徑即可使用這個配置列印應用程式的日誌。