1.namenode無法啟動問題
報錯1.
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined.
原因:不能用 root 用戶直接啟動 Hadoop 的 HDFS 組件(NameNode / DataNode / SecondaryNameNode)
解決方式:
假如你已經創建了一個叫 hadoop 的用戶并配置好了環境,執行:
切換用戶從新啟動
su - hadoop
start-dfs.sh
報錯2
sudo: no tty present and no askpass program specified
報錯原因:
這個錯誤說明腳本中調用了 sudo 命令,但當前用戶沒有交互終端(tty)輸入密碼,也沒有配置免密
解決方法:
給 hadoop 用戶配置 sudo 免密
以 root 用戶運行:
visudo
##在文件最后添加,然后保存退出
hadoop ALL=(ALL) NOPASSWD: ALL
##再次啟動
start-dfs.sh
報錯3
namenode is running as process 25061. Stop it first and ensure /tmp/hadoop-hadoop-namenode.pid file is empty before retry.
報錯原因:
NameNode 已經在運行,提示不要重復啟動
解決方式
##關閉現有進程
stop-dfs.sh
##或者直接殺掉
kill -9 25061
rm -f /tmp/hadoop-hadoop-namenode.pid
##然后再啟動
start-dfs.sh
解決其他DataNode 啟動失敗報錯
# 查看 DataNode 日志是否報錯
tail -n 100 $HADOOP_HOME/logs/hadoop-hadoop-datanode-*.log
# 查看 NameNode 日志
tail -n 100 $HADOOP_HOME/logs/hadoop-hadoop-namenode-*.log
##分析日志
tail -n 50 $HADOOP_HOME/logs/hadoop-hadoop-datanode-*.log
列如
java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop/hdfs/datanode:
namenode clusterID = CID-8014bf5c-da4d-443f-8b77-5d0767b7607a;
datanode clusterID = CID-7cbd3b2b-90cc-4187-974d-cea39ec470db
這是 Hadoop 中最常見的錯誤之一,當 NameNode 格式化(hdfs namenode -format)之后,clusterID 發生變化,而本地的 DataNode 存儲目錄還保留著舊的 clusterID,就會導致不一致而拒絕啟動。
解決方式
清空舊的 DataNode 數據目錄
?? 此操作會刪除舊的 DataNode 數據(不影響 HDFS 上真正的數據,只是本地緩存塊),用于單機或測試環境是安全的。
查看 dfs.datanode.data.dir 配置值
##-A 2 表示多顯示后面 2 行,通常能顯示出 <value>。
grep -A 2 dfs.datanode.data.dir $HADOOP_HOME/etc/hadoop/hdfs-site.xml
你會看到類似
<property><name>dfs.datanode.data.dir</name><value>/usr/local/hadoop/hdfs/datanode</value>
</property>
如果路徑是 /usr/local/hadoop/hdfs/datanode,就執行:
rm -rf /usr/local/hadoop/hdfs/datanode/*
##然后再執行
start-dfs.sh
jps
?? 注意
如果你看到的是別的路徑,比如 /tmp/hadoop-hadoop/dfs/data,你就清空那個路徑下的內容。
不要刪錯了 dfs.namenode.name.dir 的路徑,那是 NameNode 的元數據。
如圖最后問題解決,啟動成功