這幾天一直在嘗試一個mapreduce的例子,但是一直都是卡在mapreduce.Job: Running job: job_1553100392548_0001,查看日志也不報錯,查看每個配置文件沒有問題,很納悶。今晚決定把整個流程梳理一下,試圖找出問題原因,果然功夫不負有心人。
首先來說一下現象
運行的時候一直卡在這個界面
也沒有報錯。很奇怪。
然后訪問Applications查看情況(http://192.168.23.130:8088)
看到這個頁面,有點奇怪,這個任務是未定義的,而且進度條也不動。然后再繼續點進去看
發現yarn並沒有分配處理節點。那么這是為什么呢?
哦,突然想起來自己是只起了一個datanode和一個nodemanager【因為自己電腦內存不夠,搭建集群的時候弄了4個虛擬機,后來每次只起兩個機器來用,一個作為NameNode/ResourceManager,另外一台作為DataNode/NodeManager;由此節省一些內存。】而恰好問題就出現在了這里。
因為你只有一個datanode節點,而副本的數量為2,這時候就很難辦了。所以當你向hdfs上傳文件的時候,只有一個地方存放,而后來在統計的時候,yarn分配資源又無法找到這些文件在哪里,不知道應該用哪個NodeManager來處理。這樣就沒有辦法處理,所以導致程序一直卡住,但是也不會報錯。
解決辦法:
把當前NameNode節點也作為一個DataNode節點和NodeManager即可。也就是修改slaves配置文件即可
原來只有一台mini2
現在把mini1也加入進去作為一個從節點
然后重啟hdfs集群和yarn集群,再次執行
發現果然成功了
再看看管理頁面上,也不一樣了
至此,已經把這個問題解決了。納悶了好幾天,終於可以松口氣了。