我們開發程序的時候,好多人都喜歡用sysout輸出內容來查看運行情況。但是在MR程序裡寫了之後,卻不知道去哪裡查找,可以參考這篇文章。
第一種方法,我們可以在MapReduce任務查看頁面找到這些日志
1.在MapReduce任務查看頁面找到任務,點擊進入
2.在任務詳情頁最下面由執行了該任務的節點
3.在節點的web地址後面加上logs/userlogs就能看到application列表,選擇自己要找的
4.依次查看container
5.從container進去之後就是最終要找的日志了
- stderr:輸出System.err輸出的信息;
- stdout:輸出System.out輸出的信息
- syslog:輸出日志工具(比如Slf4j,log4j)輸出的信息
可以看出通過管理頁面查找sysout日志是十分麻煩的,而且mapper和reducer的日志不在一起,如果有多個reducer的話查看起來更是不方便
我們的代碼(mapper,reducer)是放到了Yarn上面去執行,Yarn的日志存放地址是在yarn-env.sh中配置的,如下
我們可以去節點上面查找;為了方便快捷 直接用腳本搞定
scanMRLog.sh
if [ $# -le 0 ] then echo 缺少參數 exit 1 fi # 從Hadoop的配置文件獲取所有datanode for n in `cat ${HADOOP_HOME}/etc/hadoop/slaves` do echo ===========查看節點 $n============ # 下面的 ~/logs/yarn 是在yarn-site.xml中設定的日志目錄 ssh $n "cat ~/logs/yarn/userlogs/${1}/container_*/*out" done
查看的時候只需要一行命令搞定,mapper,reducer裡面的輸出就都能看到了
# 命令中的appId從MRWeb管理端就能看到 sh test.sh application_1479689852668_0197