我們開發程序的時候,好多人都喜歡用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 [applicationid] [logtype 可選]
if [ $# -le 0 ] then echo 缺少參數 exit 1 fi logtype=out if [ $# -ge 1 ] then logtype=${2} fi for n in `cat ${HADOOP_HOME}/etc/hadoop/slaves` do echo ===========查看節點 $n============ ssh $n "cat ~/logs/yarn/userlogs/${1}/container_*/*${logtype}" done
查看的時候只需要一行命令搞定,mapper,reducer里面的輸出就都能看到了。默認查詢out,其他可輸入類型還有 err,log
# 命令中的appId從MRWeb管理端就能看到 sh test.sh application_1479689852668_0197