hadoop-2.7.4-nodemanager无法启动问题解决方案

近期新配了hadoop-274版本的集群,发现有一个小问题,DataNode无法顺利启动。
问题日志如下:
	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]文件的内容,结果。。。


问题解决了。


所以我做了猜想:

274版本所采用的默认配置文件并不是[yarn-default.xml],而是其他的一个文件,而那个文件中,有关的配置与[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]中的属性比较靠谱一点。



猜你喜欢

转载自blog.csdn.net/anyuzun/article/details/78045601