日誌聚集相關配置參數
日誌聚集是YARN提供的日誌中央化管理功能,它能將運行完成的Container/任務日誌上傳到HDFS上,從而減輕NodeManager負載,且提供一箇中央化存儲和分析機制。默認情況下,Container/任務日誌存在在各個NodeManager上,如果啓用日誌聚集功能需要額外的配置。
日誌聚合/集
yarn資源管理器模式提供了日誌聚合功能,通過參數yarn.log-aggregation-enable來開啓,這個參數默認是false。
如果開啓了,你可以在yarn模式下在命令行中使用yarn logs -applicationId 來查看你的應用程序的運行日誌。但必須保證,
1.開啓了該功能
2.程序必須運行完 因爲yarn要進行聚合。另外,如果開啓了日誌聚合,本地的日誌文件就會刪除,從而騰出更多空間。(通過開啓日誌監控服務進程來解決在web頁面看不了日誌的問題)
(1) yarn.log-aggregation-enable
參數解釋:是否啓用日誌聚集功能。
默認值:false
(2) yarn.log-aggregation.retain-seconds
參數解釋:在HDFS上聚集的日誌最多保存多長時間。
默認值:-1
(3) yarn.log-aggregation.retain-check-interval-seconds
參數解釋:多長時間檢查一次日誌,並將滿足條件的刪除,如果是0或者負數,則爲上一個值的1/10。
默認值:-1
(4) yarn.nodemanager.remote-app-log-dir
參數解釋:當應用程序運行結束後,日誌被轉移到的HDFS目錄(啓用日誌聚集功能時有效)。
默認值:/tmp/logs
(5) yarn.log-aggregation.retain-seconds
參數解釋:遠程日誌目錄子目錄名稱(啓用日誌聚集功能時有效)。
默認值:日誌將被轉移到目錄
${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}下
yarn logs -applicationId 無法導出logs日誌 Log aggregation has not completed or is not enabled.
一:前面操作正確
二:執行
[hadoop@hadoop001 shell]$ yarn logs -applicationId application_1545664455577_0006
三:報錯
18/12/25 13:51:59 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
/tmp/logs/hadoop/logs/application_1545664455577_0006does not exist.
Log aggregation has not completed or is not enabled.
四:解決:yarn-site.xml在這個文件下面添加
<!--log-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds</name>
<value>3600</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
</property>
sbin/stop-all.sh
sbin/start-all.sh
還有一種可能:
[hadoop@hadoop001 hadoop]$ hdfs dfs -ls /tmp/logs
ls: `/tmp/logs': No such file or directory
[hadoop@hadoop001 hadoop]$ hdfs dfs -ls /tmp
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2018-12-25 17:47 /tmp/hadoop-yarn
[hadoop@hadoop001 hadoop]$ hdfs dfs -mkdir /tmp/logs
[hadoop@hadoop001 hadoop]$ hdfs dfs -ls /tmp
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2018-12-25 17:47 /tmp/hadoop-yarn
drwxr-xr-x - hadoop supergroup 0 2018-12-25 17:53 /tmp/logs
開啓Hadoop/Yarn的日誌監控功能,解決web端查看日誌時的Java.lang.Exception:Unknown container問題
問題描述
今天在yarn上跑一個hadoop任務時,通過yarn的web管理後臺(serveraddress:8088)想查看該任務的的任務時,發現提示如下錯誤:
Java.lang.Exception:Unknown container.Container either has not started or has already completed or doesn;t belong to this node at all.
解放方法
下來查詢官方文檔後,才瞭解到yarn的日誌監控功能默認是處於關閉狀態的,需要我們進行開啓,開啓步驟如下:
Ps:下面配置的文件的位置在hadoop根目錄 etc/haddop文件夾下,比較老版本的Hadoop是在hadoop根目錄下的conf文件夾中
一、在yarn-site.xml文件中添加日誌監控支持
該配置中添加下面的配置:
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日誌服務器的地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
</property>
二、在mapred-site.xml文件中添加日誌服務的配置
該配置文件中添加如下配置:
<property>
<!-- 表示提交到hadoop中的任務採用yarn來運行,要是已經有該配置則無需重複配置 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<!--日誌監控服務的地址,一般填寫爲nodenode機器地址 -->
<name>mapreduce.jobhistroy.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistroy.webapp.address</name>
<value>master:19888</value>
</property>
三、將修改後的配置文件拷貝到集羣中的其他機器(單機版hadoop可以跳過該步驟)
快捷一點可以使用 scp 命令將配置文件拷貝覆蓋到其他機器
scp yarn-site.xml skyler@slave1:/hadoopdir/etc/hadoop/
scp mapred-site.xml skyler@slave1:/hadoopdir/etc/hadoop/
…其他datanode機器同理
四、重新啓動集羣的Hdfs和Yarn服務
在namenode機器上分別對hdfs和yarn服務進行重啓
sbin/stop-dfs.sh
sbin/start-dfs.sh
sbin/stop-yarn.sh
sbin/start-yarn.sh
五、 開啓日誌監控服務進程
在nodenode機器上執行
sbin/mr-jobhistory-daemon.sh start historyserver
命令,執行完成後使用jps命令查看是否啓動成功,若啓動成功則會顯示出JobHistoryServer服務