Bug
start-all.sh 啟動hadoop集群后發現沒有名稱節點 NameNode
分析
這種情況通常都是檢查hadoop運行的日志,在那之前需要先排除最容易忽視的點。
1. 檢查 workers配置文件
使用jps 命令先查看其他的節點進程的情況,我這里發現其他節點只有Jps一個進程
重新配置 hadoop目錄下的workers vim ./etc/hadoop/workers,將所有的工作節點主機名放入,比如:
hadoop101
hadoop102
hadoop103
先在其中一個節點,比如 hadoop101 節點修改 ,之后在通過scp命令傳送到其他節點
scp /usr/local/hadoop/etc/hadoop/workers root@hadoop102:/usr/local/hadoop/etc/hadoop/
scp /usr/local/hadoop/etc/hadoop/workers root@hadoop103:/usr/local/hadoop/etc/hadoop/

接着在主節點hadoop101 重新 初始化名稱節點 $HADOOP_HOME/bin/hdfs namenode -format
重新開啟集群 $HADOOP_HOME/sbin/start-all.sh
依舊報錯

jps后依然沒有NameNode節點

若暫時沒有解決NameNode節點問題,記得先關閉集群.
2. 解決啟動集群時提示mkdir權限不夠
此時應當是hadoop101對其他節點的hadoop目錄權限不足,這時需要在其他的節點修改hadoop的權限
sudo chown -R uni:uni ./hadoop
啟動集群后

成功解決 權限不夠的問題 但是依然沒有 NameNode
3. 查詢hadoop啟動NameNode運行日志 解決 Directory /usr/local/hadoop/tmp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible
cd ./logs
進入日志目錄,先 ls 查看一下有關namenode的日志文件
比如筆者這里是 cat hadoop-uni-namenode-hadoop101.log
查到的異常如下
Directory /usr/local/hadoop/tmp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
導致原因:很有可能是多次初始化名稱節點,導致名稱節點的映射發生變化
解決措施: 刪除 hadoop目錄下的 tmp文件夾后重新啟動集群
如果還是沒有用,建議檢查與hdfs相關的配置文件core-site.xml 和 hdfs-site.xml,最后我發現是自己的 hdfs-site配置文件沒配置... 有點難受
ps : 修改完一個節點的配置文件后,記得使用scp命令傳到其他節點喲
