<property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log.server.url</name> <value>http://node2:19888/jobhistory/logs</value> </property> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
spark.yarn.historyServer.address=node2:18080 spark.history.ui.port=18080 spark.eventLog.enabled=true spark.eventLog.dir=hdfs:///tmp/spark/events spark.history.fs.logDirectory=hdfs:///tmp/spark/events
若是你是運行在yarn之上的話,就要告訴yarn,你spark的地址,當我在yarn上點擊一個任務,進去看history的時候,他會連接到18080裏面,若是你配的是node1:18080,那麼你就要在node1上啓動spark的history server(見後面注①)html
最下面兩個配置是運行spark程序的時候配置的,一旦你運行spark,就會將日誌等發送到那兩個目錄,有了這兩個目錄,spark的historyserver就能夠讀取spark的運行狀態信息日誌等讀取並展現node
18080是spark的history server,會顯示出你最近spark跑過的一些程序,點擊execution後,點擊最右邊的日誌(若是有的話),會重定向到19888(見後面注②),這個是mr的jobserver的地址(啓動命令:mr-jobhistory-daemon.sh start historyserver
)web
spark.yarn.historyServer.address和spark.history.ui.port若是缺乏其中一個,日誌就看不到shell
綜上,1和2兩個配置齊全,才能夠查看spark的stdout和stderr日誌app
實際上,在spark程序運行的時候,會起一個driver程序和多個executor程序,他們都是跑在nodemanager之上的,在啓動程序的時候,若是咱們在默認的配置項裏面,配置了參數spark.eventLog.enabled=true,spark.eventLog.dir=地址,那麼driver上就會把全部的事件所有給記錄下來,事件包括,executor的啓動,executor執行的task等發送給driveroop
每當寫日誌的時候,都有一個寫日誌的組件將日誌寫進那個目錄裏面,這個目錄下面每個應用程序都會存在一個文件,而後將會由spark的history server(也就是配置在spark-default.conf裏面),這個server會在18080啓動一個進程,去掃描日誌目錄,並解析每個文件,進行還原,就獲得了整個應用的狀態post
在hadoop-2.7.3/etc/hadoop/mapred-site.xml配置文件中ui
<property> <name>mapreduce.jobhistory.done-dir</name> <value>/user/history/done</value> </property> <property> <name>mapreduce.jobhistory.intermediate-done-dir</name> <value>/user/history/done_intermediate</value> </property>
stdlog和err是每個nodemanager上的每個executor都會產生的,若是當程序完成後,在這個節點上,跟這個應用相關的全部信息所有會被清除掉,包括這些日誌,這樣的話若是咱們不把這個日誌收集起來,那麼後面在歷史信息(18080 executord模塊的stderr和out)裏面就看不到這些日誌url
爲了可以看到這些日誌,咱們要作的事情是,讓nodemanager開啓一個日誌聚合的功能,這個功能的做用是,當應用程序終止的時候,須要將這個應用程序產生的全部日誌所有彙集到遠程hdfs上的一個目錄,彙集以後,還須要經過一個http的接口去查看這些日誌,查看日誌的這個角色就叫作mr的history server,經過她的web ui接口,當咱們點擊std日誌的時候,就會跳轉到mr job history server這個地址上19888上,而後去把這個日誌展現出來spa
總的來講,yarn-site.xml和conf/spark-defaults.conf這兩個配置文件中的地址比較關鍵
http://node2:19888/jobhistory/logs : 對應的是點擊strout的時候跳轉的地址
spark.yarn.historyServer.address=node2:18080 :對應的是在yarn裏點擊history,跳轉的地址
一、進入yarn的web ui頁面,點擊左側FINISHED,可查看運行完的做業,點擊一個app id
二、進入下圖頁面,點擊History
三、重定向到conf/spark-defaults.conf配置的地址
一、我先運行一個spark程序
bin/spark-shell --master local
二、登陸Spark History server的web ui
http://node1:18080/
三、以下圖,找到我剛纔運行的程序
四、點擊紅框位置App ID,進入以下圖頁面
五、點擊紅框位置Executor,進入下圖頁面
六、右下角的stderr和stdout就是咱們此行的目標了
<property> <name>yarn.log.server.url</name> <value>http://node2:19888/jobhistory/logs</value> </property>
當你點擊stderr或stdout,就會重定向到node2:19888,因此若是這裏你配錯了,那這兩個日誌你是看不了的
node2:19888是你的MapReduce job history server的啓動節點地址
進入頁面以下圖