1. 程式人生 > >hadoop-2.7.4-nodemanager無法啟動問題解決方案

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]中的屬性比較靠譜一點。