这个问题比较蛋疼啊,yarn应用不是自己写的(借鉴他人滴),为了兼容mapreduce v1 所以使用了
org.apache.hadoop.mapreduce.Job 这个类来做客户端连接
如果不考虑兼容问题,可以直接使用 org.apache.hadoop.mapred.JobClient
来说说我碰到的这个问题:在多次执行yarn应用后,发现有成功有失败,而且几率不一定。
这种问题恼火啊,还好hadoop的日志做的还不错
http://192.168.146.13:8088/cluster 这个地址里面很容易找到想要的log,记得换成自己RM的ip。
先说明一下,我的环境里RM 地址为192.168.146.13,资源不能浪费,在RM上我同时启动了NM
查看app的日志,报的都是connectionException
当然就会有以下内容了
2012-12-26 18:14:21,218 INFO [main] org.apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8030. Already tried 0 time(s).
我进行多次测试,发现了里面的问题:
如果container是在RM所在机器的NM上创建,则没有问题;
如果不是则会出现以上这段...一堆Retrying...
检查yarn-site.xml,配置也没问题。
问题就出在
yarn.resourcemanager.scheduler.address
这个配置,不是yarn-site.xml有问题,有问题的其实是客户端程序。
[mw_shl_code=java,true]Configuration conf = new Configuration();
conf.set("fs.default.name",hdfsUri);
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
conf.set("mapreduce.framework.name", "yarn");
conf.set("fs.AbstractFileSystem.hdfs.impl", "org.apache.hadoop.fs.Hdfs");
conf.set("yarn.resourcemanager.address", yarnip+":"+8032); //设置RM 访问位置
//conf.set("yarn.resourcemanager.scheduler.address", yarnip+":"+8030);//设置调度地址
Job job = new Job(conf, "MR2SmokeTest");[/mw_shl_code]
问题就出在注释的那一句,我真想不明白啊,RM和NM之间难道连调度也要我去告诉Cluster吗???
还真是这样,如果没有注入调度地址,NM会默认为0.0.0.0:8030...
|
|