先給大家來一個親測可用的hadoop3.2.0下載地址,直接shell:
wget http://mirrors.hust.edu.cn/apache/hadoop/core/stable/hadoop-3.2.0.tar.gz
寫一些我在安裝hadoop時碰到的一些問題。
1.啓動hadoop報找不到jdk error。但是我也忘了jdk安裝在哪裏,查找資料後用whereis java
命令得到超鏈接,cd超鏈接後得到最終地址,vi hadoop.env.sh
後export JAVA_HOME="jdk路徑"
解決問題。
2.啓動namenode和datanode時報沒有權限 error。發現問題出現在沒有加密鑰上,找官網代碼重新搞一遍:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
解決這個問題了。
3.啓動namenode和datanode時報一個奇怪(沒有及時記下來,好像是提示root用戶啥的)的error,啓動失敗。查詢資料知還需要配置四個文件 start-yarn.sh、stop-yarn.sh、start-dfs.sh、stop-dfs.sh 。
start-yarn.sh、stop-yarn.sh:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
start-dfs.sh、stop-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
重新啓動start-all.sh解決問題。jps一下:
PS:之前有出現過一個問題,就是DataNode無法正常啓動,但是運行界面又沒有報錯,很奇怪,然後查詢了運行日誌,發現這段有問題:
2019-10-07 15:19:10,280 WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/home/leesf/program/hadoop/tmp/dfs/data
java.io.IOException: Incompatible clusterIDs in /home/leesf/program/hadoop/tmp/dfs/data: namenode clusterID = CID-56c18e53-1056-45eb-ae1f-773c146463cb; datanode clusterID = CID-34706444-8335-4222-8e5e-3dcca001970d
查了一下資料,發現是多次格式化後ID不匹配,解決方法就是去/home/leesf/program/hadoop/tmp/dfs/data/current/VERSION(具體路徑看log顯示)
文件裏把相應的ID改成一致的就可以了,重啓服務可以正常運行。
至此,所有進程算是運行成功了。
4.在舍友安裝hadoop過程中還出現了starting namenode時沒有報錯但是進程啓動失敗的問題。剛開始查閱資料得到是因爲端口被佔用應該是xml配置出現問題,但查了半天的配置文件,發現沒出現問題,最後發現問題出在hdfs沒有格式化,bin/hdfs namenode -format
後解決這個問題。
5.小插曲:在執行start-all.sh
時,如果在/hadoop/hadoop-3.2.0/sbin# 目錄下執行start-all.sh提示找不到命令,而在/hadoop/hadoop-3.2.0#目錄下執行sbin/start-all.sh
可以正常運行。
.6.我用的是阿里雲服務器,在配置過程中出現無法查看Web UI的問題。剛開始一直沒辦法解決,訪問http://localhost:50070提示找不到網頁,後來查詢到hadoop3.2.0版本改到9870端口,訪問還是找不到網頁。這個問題擱置了很久,在完成全部其他配置後我纔開始着手解決這個問題。在查閱資料的過程中我突然意識到,我用的是阿里雲服務器,所以我去搜了一下,用http://阿里雲公網IP:9870可以訪問,但嘗試後發現還是不行。通過查閱資料得知,要在阿里雲服務器那邊添加安全組的入口規則允許9870端口訪問,保存並重啓。然後我發現之前在配置hdfs-site.xml時沒有配置dfs.namenode.http-address這一項,於是要添加下面的這幾行代碼(在原有的基礎上添加)::
<property>
<name>dfs.namenode.http-address</name>
<value>0.0.0.0:9870</value>
</property>
然後重新格式化hdfs:bin/hdfs namenode -format
重啓所有服務:sbin/start-all.sh
查閱資料時得知,端口可能被佔用,所以查找命令後執行
這下應該可以正常訪問了吧,我想。但是我在繼續訪問9870端口時又出現一個問題:
不過不是什麼大問題,換成Microsoft Edge瀏覽器訪問輕鬆解決了這個問題,下圖爲正常訪問: