spark深刻:配置文件與日誌

1、第一部分

一、spark2.1與hadoop2.7.3集成,spark on yarn模式下,須要對hadoop的配置文件yarn-site.xml增長內容,以下:

複製代碼
<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的conf/spark-defaults.conf配置

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 historyserverweb

spark.yarn.historyServer.address和spark.history.ui.port若是缺乏其中一個,日誌就看不到shell

綜上,1和2兩個配置齊全,才能夠查看spark的stdout和stderr日誌app

 

2、第二部分

實際上,在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

3、總結

總的來講,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的啓動節點地址

進入頁面以下圖

 
分類:  spark core
相關文章
相關標籤/搜索