一般在數據節點的log日志信息里能找到導致啟動不起來的原因。
1.Namenode和Datanode的NamenodeID不一致
描述:一般在集群多次重新格式化HDFS之后,或者剛安裝時會碰到。日志信息如下:
java.io.IOException: Incompatible namespaceIDs in /root/tmp/dfs/data:
NameNode namespaceID = 1307672299; DataNode namespaceID = 389959598
解決辦法:最直接有效的辦法就是修改Datanode上的namenodeID(位於/dfs/data/current/VERSION文件中)或修改NameNode的namespaceID(位於/dfs/name/current/VERSION文件中),使其一致。
2.Datanode突然不堪重負宕掉
只需重啟壞掉的Datanode或者JobTracker。當集群中的某單個節點出現問題,不必重新重啟整個系統,只需重啟這個節點,然后會自動連接到整個集群里。
在壞死的節點上輸入以下命令:
bin/Hadoop-daemon.sh start DataNode
bin/Hadoop-daemon.sh start jobtracker
以上方法也可以用於動態加入datanode,允許用戶動態將某個節點加入集群中。
在hadoop集群中,HDFS分布式文件系統和mapreduce計算框架是可以獨立部署安裝的,在hadoop2中體現很明顯,如果只需要使用部分節點進行計算,只需要單獨啟動resourcemanager和需要使用的結點上的nodemanager即可,查找命令可以參考/hadoop2/sbin/start-yarn.sh中是如何寫的就可以找到答案了! 在hadoop2/sbin/start-yarn.sh腳本中,寫了啟動resourcemanager和所有節點上的nodemanager,所以只需要參考該腳本文件,就能得到啟動單個節點上的nodemanager的方法:
hadoop2/sbin/hadoop-daemon.sh startdatanode
hadoop2/sbin/yarn-daemon.sh nodemanager
然后執行下集群HDFS的負載均衡即可完成動態添加節點了!
在hadoop1中
bin/Hadoop-daemon.sh --config ./conf start DataNode
bin/Hadoop-daemon.sh --config ./conf start tasktracker
