在上一篇《Hadoop-2.7.3集群(HDFS)搭建》之后,继续记录整理YARN的搭建。
1、修改mapred-site.xml
<configuration>
<!--
<property>
<name>mapred.job.tracker</name>
<value>chan.takchi:9001</value>
</property>
-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
2、修改yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>chan-takchi</value>
<description>The hostname of the RM.</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>100</value>
</property>
</configuration>
3、测试,运行wordcount,mr运行失败。
在页面上可以看到,任务会一直处在状态,"ACCEPTED: waiting for AM container to be allocated,launched and register with RM.",最终任务失败。
4、查看日志并分析
2017-01-18 01:58:03,700 INFO org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher: Error launching appattempt_1484732222847_0002_000001. Got exception: java.net.ConnectException: Call From ubuntu/127.0.1.1 to ubuntu:49135 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
原因在于,RM和NM机器的hosts文件是一致的,而且yarn-site.xml里的yarn.nodemanager.hostname在没有指定的情况下采用的是主机的hostname,所以NM的地址为ubuntu:49135,而RM访问ubuntu时用的是本地hosts配置的ip,访问了自身49135端口,由于该端口并未打开,所以会访问失败。
5、解决方案
为每个NM配置一个不一样的域名并在yarn.nodemanager.hostname里指定。如果NM默认的hostname一样而yarn.nodemanager.hostname恰巧又没有指定其他域名的话,将会出现以下的情况(Node HTTP Address),无法区分哪一个NM在哪一个机器上。
最后给出能正确运行mr任务的yarn-site.xml配置,这样的一个缺点就是每个NM都要维护一份yarn-site.xml,除非默认的hostname不一样。
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>chan-takchi</value>
<description>The hostname of the RM.</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>100</value>
</property>
<property>
<name>yarn.nodemanager.hostname</name>
<value>chan-takchi-01</value>
</property>
</configuration>
NOTE:yarn.nodemanager.hostname对应的域名不要配置成“*.*.*”的样子,如“chan.takchi.01”,否则会在启动过程中报以下错误(上一篇文章中的hosts文件相应的域名都要改过来)。
Does not contain a valid host:port authority: chan.takchi.01:8040 (configuration property 'yarn.nodemanager.localizer.address')