这几天一直在尝试一个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集群,再次执行
发现果然成功了
再看看管理页面上,也不一样了
至此,已经把这个问题解决了。纳闷了好几天,终于可以松口气了。