hadoop-2.7.4-nodemanager無法啟動問題解決方案
問題日誌如下:
最後解決方案如下: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]中的屬性比較靠譜一點。