文件編寫目的
日誌聚合是YARN提供的日誌集中化管理功能,它能將執行完成的Container任務日誌上傳到HDFS上,從而減輕NodeManager負載,且提供一個集中式儲存和分析機制。預設情況下,Container任務日誌存在在各個NodeManager上,如果啟用日誌聚集功能需要額外的配置。本文需要介紹的yarn.nodemanager.remote-app-log-dir配置是當應用程式執行結束後,日誌被轉移到的HDFS目錄,預設是/tmp/logs。本文將模擬修改該目錄,然後又將其修改回預設。
測試環境1.CM和CDH版本均為5.16.2
2.叢集正常執行
3.採用管理員使用者登入CM
4.叢集未啟用Kerberos安全認證
問題重現2.1 預設配置下的MR日誌1.叢集當前執行正常
2.未修改配置前,YARN的yarn.nodemanager.remote-app-log-dir預設配置路徑為/tmp/logs
3.檢視/tmp/logs目錄屬性如下:屬主為mapred,屬組為hadoop,目錄許可權為777。
4.執行MR作業測試,可以正常執行
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 55.檢視作業日誌,日誌可以正常檢視
2.2 YARN配置修改後的日誌1.檢視當前HDFS上不存在/data0/tmp/logs目錄
2.修改YARN的yarn.nodemanager.remote-app-log-dir配置為/data0/tmp/logs。然後儲存更改,按照提示重啟YARN服務。
3.配置修改後叢集執行正常
4.執行MR作業測試
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 5
如上所示,MR作業可以正常執行
5.檢視作業日誌
如上所示,無法正常檢視日誌。提示:
Logs not available for job_1581405002681_0001.Aggregation may not be complete, Check back later or try the nodemanager athadoop03.focus.com:8041Or see application log athttp://hadoop03.focus.com:8041/node/application/application_1581405002681_0001
問題解決3.1 方式一:自動建立日誌目錄
1.通過CM進入YARN服務介面,然後選擇【建立NodeManager遠端應用程式日誌目錄】。
2.執行上述操作後會在HDFS上生成/data/tmp/logs目錄,並且屬主:屬組為mapred:hadoop,目錄許可權為1777
3.執行MR作業
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 54.檢視作業日誌
如上所示,日誌已被聚合到HDFS,可以正常檢視
3.2 方式二:手動建立日誌目錄1.在HDFS上建立/data/tmp/logs目錄
2.修改/data0/tmp/logs目錄的屬主和屬組為mapred:hadoop
3.修改/data0/tmp/logs目錄訪問許可權為1777
4.執行MR作業測試,作業正常執行
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 55.檢視作業日誌
如上所示,MR作業日誌可以正常檢視。
3.3 方式三:修改回預設目錄/tmp/logs1.修改yarn.nodemanager.remote-app-log-dir引數配置為預設目錄/tmp/logs。儲存後根據提示重啟相關服務
2.執行MR測試
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 5MR作業正常執行
3.檢視作業日誌
注意:無論是哪一種解決方式,對於無法檢視日誌的作業仍然無法檢視,只能通過命令列的形式在本地檢視。如下所示:
在hadoop03節點上檢視本地日誌
cd /data0/yarn/container-logs/llll application_1581405002681_0001/ll application_1581405002681_0001/container_1581405002681_0001_01_000003/如上所示,作業job_1581319903607_0001的本地日誌(每個NodeManager節點上都存在一部分)仍然在本地存在,未被聚合到HDFS,因此在HistoryServer Web UI上仍然無法檢視該作業日誌。
總結1.在HistoryServer Web UI上檢視YARN的歷史作業日誌需要開啟日誌聚合功能,即設定yarn.log-aggregation-enable引數為true。當任務執行結束後,YARN會把appmaster container任務的日誌都上傳到HDFS的地址中;每個使用者的作業在/tmp/logs下都有自己使用者名稱對應的日誌;比如,root使用者其作業在HDFS上日誌路徑為/tmp/logs/root/logs/。
2.YARN的yarn.nodemanager.remote-app-log-dir引數:應用程式執行結束後,日誌被轉移到的HDFS目錄(啟用日誌聚集功能時有效),預設為HDFS上的/tmp/logs
目錄。配置該引數時,如果其修改目錄不存在,則需要執行YARN服務介面的【建立NodeManager遠端應用程式日誌目錄】操作自動建立目錄或者手動建立屬主:屬組為mapred:hadoop,許可權設定為1777的HDFS目錄;如果HDFS上該目錄已存在,但是由於目錄許可權或屬主問題導致無法檢視日誌,此時只能手動修改該目錄許可權和屬主,不能通過YARN服務介面的【建立NodeManager遠端應用程式日誌目錄】操作來修改屬主和許可權。
3.由於啟了日誌聚合功能(yarn.log-aggregation-enable),對於所有的MR作業,在作業執行完畢後會將本地日誌聚合到HDFS上指定目錄,在日誌聚合完畢後會自動刪除本地日誌。此時引數yarn.nodemanager.log.retain-seconds所設定的本地日誌保留時間是不生效的。
4.對於未被聚合到HDFS上的YARN作業日誌,日誌儲存在yarn.nodemanager.log-dirs引數所配置的目錄(每個NodeManager節點上都存在),只能通過命令列的形式在本地檢視日誌資訊。並且本地日誌不會被刪除,只能手動定期清理。