Hadoop2.0 编写Yarn应用 8030端口 调度

这个问题比较蛋疼啊,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有问题,有问题的其实是客户端程序。

贴段代码

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");

问题就出在注释的那一句,我真想不明白啊,RM和NM之间难道连调度也要我去告诉Cluster吗???

还真是这样,如果没有注入调度地址,NM会默认为0.0.0.0:8030...

猜你喜欢

转载自79140142-qq-com.iteye.com/blog/1754646