问题日志如下:
resourcemanager_log
2017-09-20 03:54:24,165 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceTrackerService:
NodeManager from ubuntu doesn't satisfy minimum allocations,
Sending SHUTDOWN signal to the NodeManager.
nodemanager_log
2017-09-20 03:54:24,228 ERROR org.apache.hadoop.yarn.server.nodemanager.NodeStatusUpdaterImpl:
Unexpected error starting NodeStatusUpdater
Recieved SHUTDOWN signal from Resourcemanager ,Registration of NodeManager failed,
Message from ResourceManager: NodeManager from ubuntu doesn't satisfy minimum allocations,
Sending SHUTDOWN signal to the NodeManager.
最后解决方案如下:
在[yarn-site.xml]中添加如下属性:
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>8</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
问题解决。
问题分析:
日志中的错误信息提示为“NodeManager from ubuntu doesn't satisfy minimum allocations”,及nodemanager不满足最低的分配。百度各种给出的各种解决方案,有提出改[yarn-env.sh]的,有提出改 yarn.nodemanager.resource.memory-mb 还有一些 yarn.resourcemanager 部分属性的,都没有解决这个问题。最终,一个偶然的发现,促使我找到了问题所在。
问题解决过程:
我之前用的集群是272版本,与274版本相比,采用完全相同的配置文件,结果272好使,274就不好使,我头疼了半天。后来,在一次查看问题日志时,发现一个有趣的东西。。。
274版本的resourcemanager错误日志中有一条记录:
maximumAllocation = <memory:8192, vCores:4> [= configuredMaxAllocation ]
而272版本中的记录为:
maximumAllocation = <memory:8192, vCores:32> [= configuredMaxAllocation ]
我以为我找到了问题所在,就在[yarn-site.xml]中设定了这个值,改为32,结果还是出现问题,又头疼了。
偶然查看hadoop的默认配置文件[yarn-default.xml]发现,两个版本中,默认配置文件对于maximumAllocation这个值的设定值是一样的,但是274版本为什么实际值为4呢。我做了测试,直接将默认配置文件内容替换了[yarn-site.xml]文件的内容,结果。。。
问题解决了。
所以我做了猜想:
我用二分查找法不断对默认配置进行检索,最终找到了这两个属性(幸亏则两个属性挨着的,不然真是难找了),这两个属性必须同时进行配置,采用[yarn-default.xml]中的值即可。274版本所采用的默认配置文件并不是[yarn-default.xml],而是其他的一个文件,而那个文件中,有关的配置与[yarn-default.xml]文件有差别,而且配置值是错的。
这个问题不知道是不是bug,不过274既然有这个问题,如果有其他的问题出现了,不妨直接用[xx.default.xml]文件改名后替换[xx.site.xml]文件,然后再对需要配置的值进行修改这个方法来试一试。
关于yarn到底用的是哪个默认配置文件,我还没有找到,如果找到了,会贴出来。
注意:
在[core-default.xml]中有两个废弃属性,注意删除或注释掉,否则会报错。
<property>
<name>fs.default.name</name>
<value>file:///</value>
<description>Deprecated. Use (fs.defaultFS) property
instead</description>
</property>
<property>
<name>hadoop.ssl.enabled</name>
<value>false</value>
<description>
Deprecated. Use dfs.http.policy and yarn.http.policy instead.
</description>
</property>
-------------------------------------------------------------------------------------------------------------------------------
找到yarn默认配置了,去翻NM和RM的源码,发现都导入了YarnConfiguration包。
import org.apache.hadoop.yarn.conf.YarnConfiguration;
关于yarn的各种默认配置信息直接做到了类里面,并且,我们所看到的maximumAllocation属性,在源码里面是这样的:
public static final String RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES =
YARN_PREFIX + "scheduler.maximum-allocation-vcores";
public static final int DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES = 4;
而在hadoop给出的[yarn-default.xml]文件中是属性是这样的:
<property>
<description>The maximum allocation for every container request at the RM,
in terms of virtual CPU cores. Requests higher than this will throw a
InvalidResourceRequestException.</description>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>32</value>
</property>
可以看出,官方给出的默认配置xml文件也不靠谱,而且274还存在一个问题,虚拟机开启RM,不能再windows远程查看web-ui,可是如果用[yarn-default.xml]属性替换[yarn-site.xml]文件的话,是可以的,看来,如果想要靠谱,还得自己把所有默认配置都改为[xx.default.xml]中的属性比较靠谱一点。