最近上了一門課,叫大數據基礎,這是我第一次沒有在別人的幫助下自己解決了如此多的問題,感謝百度,感謝CSDN,感謝各位大佬寫的博客。我都覺得踩坑大隊隊長非我莫屬了,怎麼會有我這麼笨的人,給我整懵了好了廢話不多說記錄一下我踩的坑。
實驗名稱
- Hadoop單機配置及僞分佈式安裝
實驗環境
- 系統環境:Ubuntu 16.04.6
- JAVA版本:java openjdk 1.8.0_222
- Hadoop版本:Hadoop 3.2.1
實驗過程
這個教程寫的很好 點擊這裏打開參考教程 除了我自己笨讓我踩了很多坑。
實驗所遇問題
溫馨提示:建議使用hadoop用戶進行實驗,否則可能會和我一樣踩很多坑。
- 問題1:在解壓Hadoop時出現如下問題,原因是有apt進程在運行
tar (child): /home/hadoop/Downloads/hadoop-x.x.x.tar.gz: Cannot open: No such file or derectory
tar (child):Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
錯誤截圖:
- 解決辦法:
運行如下命令查看正在進行的進程
ps -A | grep apt
使用如下命令關閉進程
sudo kill -9 number
例如:此處存在進程號爲1142、1160的進程在運行,使用如下命令將其關閉。
- 問題2:在執行grep例子時報錯JAVA_HOME找不到,但是之前java環境都是配好的,使用“java -version”命令也可以查看到java的版本。
ERROR: JAVA_HOME is not set and could not be found.
錯誤截圖:
- 解決辦法:
sudo vim hadoop/etc/hadoop/hadoop-env.sh
使用上述語句修改 修改“hdoop-env.sh”文件中的
# export JAVA_HOME=
這一行爲
# export JAVA_HOME=/usr/lib/jvm/default-java
並且添加
export JAVA_HOME=/usr/lib/jvm/default-java
(什麼?找不到jdk的路徑→echo &JAVA_HOME
)
實際修改如下:
- 問題3:啓動dfs時報錯
Starting namenodes on [localhost]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [slave1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
錯誤截圖:
- 解決辦法:
如果不是用Hadoop啓動的話,需將root改爲對應用戶
以下是Hadoop3.2.1版本解決辦法,如果你是Hadoop2.x.x版本請參考這裏點我點我
在/hadoop/sbin路徑下,將start-dfs.sh,stop-dfs.sh兩個文件頂部添加以下參數:
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
start-yarn.sh,stop-yarn.sh頂部也需添加以下參數:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
修改後重啓即可解決。
- 問題4:以爲上面那個問題解決了,重新啓動dfs就沒問題了,結果又報錯了
...
Starting namenodes on [localhost]
localhost: ERROR: Unable to write in /usr/local/hadoop/logs. Aborting.
Starting datanodes
localhost: ERROR: Unable to write in /usr/local/hadoop/logs. Aborting.
...
錯誤截圖:
- 解決辦法:
此處Warning是由於問題3中新舊版本hadoop參數不對應造成的,後續已解決,可無視。
出現Unable to write問題的原因是因爲寫入權限不夠,因此需將權限給對應的文件夾
執行如下代碼:
sudo chmod -R 777 /usr/local/hadoop/logs
實際運行如下:
- 問題5:我以爲上面那個問題解決了,就真的沒有問題了,結果給了權限以後又出現了Permission denied的問題。
...
Starting namenodes on [localhost]
localhost: Permission denied (publickey,password)
Starting datanodes
localhost: Permission denied (publickey,password)
...
錯誤截圖:
- 解決辦法:
重新格式化節點,報錯,重新配置ssh還是報錯,在Permission denied一下午了之後我思考了一下到底是什麼原因,此處總結爲用戶yubei沒有對hadoop的操作權限,所以我是開錯了賬號,爲了避免出現更多問題,我選擇了最笨的辦法→重新安裝了虛擬機重做。(其實上面問題3中有一步需要修改root爲實際調用用戶yubei,嘗試了一下沒有成功,所以選擇重來,如果是用hadoop用戶不會有此問題)
在重新安裝虛擬機使用Hadoop用戶進行實驗後,實驗變得順暢了很多,遇到相同的問題都通過上面的辦法解決了,接下來遇到一個新的問題。
- 問題6:http://localhost:50070 端口錯誤打不開
- 解決辦法:教程中的版本爲Hadoop 2.x.x,我的版本是Hadoop 3.x.x,端口不同所以對不上。將端口修改爲9870即可解決。即打開 http://localhost:9870
實驗結果
- 單機配置運行實例grep結果如下:
- 僞分佈式配置運行實例WordCount結果如下(部分截圖):
實驗心得
需要補一下Linux基礎操作語句,遇到問題先百度 不要着急,靜下心來你一定可以解決的。糾錯QQ2533285193