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>

2、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(見后面注①

最下面兩個配置是運行spark程序的時候配置的,一旦你運行spark,就會將日志等發送到那兩個目錄,有了這兩個目錄,spark的historyserver就可以讀取spark的運行狀態信息日志等讀取並展示

18080是spark的history server,會顯示出你最近spark跑過的一些程序,點擊execution后,點擊最右邊的日志(如果有的話),會重定向到19888(見后面注②),這個是mr的jobserver的地址(啟動命令:mr-jobhistory-daemon.sh start historyserver

spark.yarn.historyServer.address和spark.history.ui.port如果缺少其中一個,日志就看不到

綜上,1和2兩個配置齊全,才可以查看spark的stdout和stderr日志

 

二、第二部分

實際上,在spark程序運行的時候,會起一個driver程序和多個executor程序,他們都是跑在nodemanager之上的,在啟動程序的時候,如果我們在默認的配置項里面,配置了參數spark.eventLog.enabled=true,spark.eventLog.dir=地址,那么driver上就會把所有的事件全部給記錄下來,事件包括,executor的啟動,executor執行的task等發送給driver

每當寫日志的時候,都有一個寫日志的組件將日志寫進那個目錄里面,這個目錄下面每一個應用程序都會存在一個文件,然后將會由spark的history server(也就是配置在spark-default.conf里面),這個server會在18080啟動一個進程,去掃描日志目錄,並解析每一個文件,進行還原,就得到了整個應用的狀態

在hadoop-2.7.3/etc/hadoop/mapred-site.xml配置文件中

<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)里面就看不到這些日志

為了能夠看到這些日志,我們要做的事情是,讓nodemanager開啟一個日志聚合的功能,這個功能的作用是,當應用程序終止的時候,需要將這個應用程序產生的所有日志全部聚集到遠程hdfs上的一個目錄,聚集之后,還需要通過一個http的接口去查看這些日志,查看日志的這個角色就叫做mr的history server,通過她的web ui接口,當我們點擊std日志的時候,就會跳轉到mr job history server這個地址上19888上,然后去把這個日志展示出來

三、總結

總的來說,yarn-site.xml和conf/spark-defaults.conf這兩個配置文件中的地址比較關鍵

http://node2:19888/jobhistory/logs : 對應的是點擊strout的時候跳轉的地址

spark.yarn.historyServer.address=node2:18080 :對應的是在yarn里點擊history,跳轉的地址

注①:

1、進入yarn的web ui頁面,點擊左側FINISHED,可查看運行完的作業,點擊一個app id

2、進入下圖頁面,點擊History

3、重定向到conf/spark-defaults.conf配置的地址

注②:

具體步驟如下:

1、我先運行一個spark程序

bin/spark-shell --master local

2、登錄Spark History server的web ui

http://node1:18080/

3、如下圖,找到我剛才運行的程序

4、點擊紅框位置App ID,進入如下圖頁面

5、點擊紅框位置Executor,進入下圖頁面

6、右下角的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的啟動節點地址

進入頁面如下圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM