寫在前面
在剛開始接觸hadoop的時候,在學習了好多久,有一些不仔細導致掉了好多坑,後面搭建成功寫下這篇文章希望能幫助到更多人少掉坑。我的慣例先介紹各個版本:
系統環境:Linux Mint 18.2(Ubuntu16.04)
hadoop版本:hadoop 2.7.1
其次我用到了兩臺電腦作爲集羣的節點,應用如下:
節點類型 | 節點機器名稱 | IP |
---|---|---|
master | mryang | 192.168.27.228 |
slave | workstation | 192.168.27.165 |
注意:此處坑來了
1.必須保證兩個機器的IP的路由段一樣,之前遇到兩個IP分別是:192.168.1.112和192.168.27.170,到後面無論如何有一個都拒絕ssh訪問通信。
2.必須保證在所有slave節點上創建的用戶名和master節點上創建的用戶名一樣,因爲hadoop是通過hadoop2.7.1@slave來訪問slave節點的,master節點上的用戶名(本文爲hadoop2.7.1),如果不一樣則訪問不了。
SSH無密碼登錄節點
選擇一臺機器作爲master
在這臺master機器首先按 ctrl+alt+t 打開終端窗口,輸入如下命令創建新用戶(一旦創建就會在主用戶的/home/目錄產生一個對應目錄如下,其中youjun是我的主用戶,其它兩個爲我新創建的用戶用來搭建hadoop集羣的,請勿刪除) :
sudo useradd -m hadoop2.7.1 -s /bin/bash
這條命令創建了可以登陸的hadoop2.7.1用戶,並使用/bin/bash作爲shell。
接着使用如下命令設置密碼,按提示輸入兩次密碼:sudo passwd hadoop2.7.1
可爲hadoop_master用戶增加管理員權限,並且給hadoop2.7.1用戶處理/home/hadoop2.7.1/目錄的權限,方便部署,避免一些對剛接觸的人來說比較棘手的權限問題:
sudo adduser hadoop2.7.1 sudo sudo chown -R hadoop2.7.1 /home/hadoop2.7.1/
執行效果如下圖:
最後註銷當前用戶(註銷,免得佔用進程),在登陸界面使用剛創建的hadoop2.7.1用戶進行登陸。
選定另一臺機器作爲slave
以下的創建用戶同理上述創建過程,只是在另外一個機器上創建一個新的同名用戶(前面已經說了,爲了不出錯誤,請設置和master機器上創建的hadoop2.7.1用戶名字相同的用戶,假設你還有機器可用於slave節點,你就做和這臺機器相同的操作就好)
在這臺slave機器上首先按 ctrl+alt+t 打開終端窗口,輸入如下命令創建新用戶 :sudo useradd -m hadoop2.7.1 -s /bin/bash
這條命令創建了可以登陸的hadoop2.7.1用戶,並使用/bin/bash作爲shell。
接着使用如下命令設置密碼,按提示輸入兩次密碼:sudo passwd hadoop2.7.1
可爲hadoop_slave用戶增加管理員權限,方便部署,避免一些對剛接觸的人來說比較棘手的權限問題:
sudo adduser hadoop2.7.1 sudo sudo chown -R hadoop2.7.1 /home/hadoop2.7.1/
創建過程如下圖:
另外講一個刪除用戶的命令(hadoop_master是我之前在這臺機器上創建的用戶,其中-r代表刪除根目錄,hadoop_master是我要刪除的用戶名,提示郵件池未找到不管,因爲之前沒有設置用戶信息):
sudo userdel -r hadoop_master
最後註銷當前用戶(註銷,免得佔用進程),在登陸界面使用剛創建的hadoop_slave用戶進行登陸。在master機器上的配置
如果沒有安裝vim的話先安裝:
sudo apt-get install vim
按 ctrl+alt+t 打開終端窗口,輸入如下命令():
sudo vim /etc/hosts
將IP和別名全部寫入(不會用vim的百度一下,按i鍵開始編輯,插入下面兩行後按esc鍵退出編輯,再輸入:wq回車就保存了):
192.168.27.165 mryang 192.168.27.228 slave
繼續執行如下命令(第一次執行會產生.ssh目錄,否則後面無法打開.ssh目錄):
ssh mryang
輸入yes回車繼續,輸入本用戶的密碼繼續,出現welcome to …代表連接成功。
接着進入.ssh目錄,生成公鑰:
cd ~/.ssh ssh-keygen -t rsa
連續回車(使用默認)產生公鑰:
如果你想實現後續ssh無密登錄mryang(本機的IP),執行如下第一條命令(不執行的話後面開啓hadoop的時候會要求你輸入密碼,所以也執行了吧),第二條命令將生成的公鑰傳輸給slave對應IP下的hadoop2.7.1用戶的/home/hadoop2.7.1/目錄下
注意:你的slave節點的hadoop2.7.1用戶必須包含/home/hadoop2.7.1/這個目錄,這個目錄你可以更改,但是必須保證在hadoop2.7.1用戶中有這個目錄。cat ./id_rsa.pub >> ./authorized_keys scp ~/.ssh/id_rsa.pub hadoop2.7.1@slave:/home/hadoop2.7.1/
輸入yes回車,再輸入hadoop_slave用戶的密碼回車,接下來就會看到id_rsa.pub文件傳輸成功:
你現在可以去slave節點的hadoop2.7.1用戶的/home/hadoop2.7.1/目錄看到這個文件了。
在slave節點上的配置
當你還有一個作爲slave節點的時候配置可類似做配置。
如果沒有安裝vim的話先安裝:sudo apt-get install vim
按 ctrl+alt+t 打開終端窗口,輸入如下命令():
sudo vim /etc/hosts
將IP和別名全部寫入(這個別名以後就可以代替其前面的IP了,不會用vim的百度一下,按i鍵開始編輯,插入下面兩行後按esc鍵退出編輯,再輸入:wq回車就保存了):
192.168.27.165 mryang 192.168.27.228 slave
繼續執行如下命令(第一次執行會產生.ssh目錄,否則後面無法打開.ssh目錄):
ssh slave
輸入yes回車繼續
cd ~/.ssh ssh-keygen -t rsa
連續回車產生公鑰,以上和master節點的hadoop2.7.1用戶的操作一樣我就不上圖了。
如果你想實現後續在slave節點上ssh無密登錄無密登錄slave(本機的IP別名,一般不用),則執行下述第一條命令,第二條命令將生成的公鑰傳輸給mryang對應IP下的hadoop2.7.1用戶的/home/hadoop2.7.1/目錄下cat ./id_rsa.pub >> ./authorized_keys scp ~/.ssh/id_rsa.pub hadoop2.7.1@mryang:/home/hadoop2.7.1/
一旦執行了第一條命令則再連接slave就不用輸密碼了,如下:
接下來將master節點的hadoop2.7.1用戶傳過來的公鑰加入authorized_keys就可以實現用master節點的hadoop2.7.1用戶ssh無密碼登錄slave節點(你可以理解爲master機器向slave機器提交一個申請,申請以後連接slave不需要密碼,這個申請書就是id_rsa.pub公鑰,而slave將這個公鑰接受(如下命令,在slave節點的hadoop2.7.1用戶上把公鑰加入authorized_keys)就行了):
cat /home/hadoop2.7.1/id_rsa.pub >> ~/.ssh/authorized_keys
同樣,如果想slave節點的hadoop2.7.1用戶也能無密碼登錄master節點(一般也不用,只需要master節點的hadoop2.7.1用戶能無密碼訪問所有的slave節點就ok),那麼在master節點的hadoop2.7.1用戶上也將slave節點的hadoop2.7.1用戶傳過去的公鑰加入到authorized_keys中就行,不過得先傳公鑰過去再切換到master節點的hadoop2.7.1用戶,執行:
cat /home/hadoop2.7.1/id_rsa.pub >> ~/.ssh/authorized_keys
至此,你就可以在master節點的hadoop2.7.1用戶上無密碼登錄slave節點了,切換到master節點的hadoop2.7.1用戶,執行以下命令(slave其實就是一個IP的別名,hadoop2.7.1是slave節點創建的一個用戶),結果如圖:
ssh hadoop2.7.1@slave
hadoop配置
- 下載hadoop 2.7.1
安裝hadoop2.7.1
切換到master機器的hadoop2.7.1用戶:
首先我將下載的hadoop-2.7.1.tar.gz文件解壓並放在/home/hadoop2.7.1/目錄下(不要放到其它目錄,不然會導致權限問題,因爲hadoop2.7.1用戶只對/home/hadoop2.7.1/目錄有操作權限),然後修改其名字爲hadoop,最後修改這個文件的權限,命令如下:sudo tar -zxf ~/下載/hadoop-2.7.1.tar.gz -C /home/hadoop2.7.1/ cd /home/hadoop2.7.1/ sudo mv ./hadoop-2.7.1/ ./hadoop sudo chown -R hadoop2.7.1 ./hadoop
集羣/分佈式模式需要修改 /home/hadoop2.7.1/hadoop/etc/hadoop 中的5個配置文件,更多設置項可點擊查看官方說明,這裏僅設置了正常啓動所必須的設置項: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
首先進入/home/hadoop2.7.1/hadoop/etc/hadoop,執行如下:cd /home/hadoop2.7.1/hadoop/etc/hadoop
然後修改以下幾個文件:
1.文件 slaves。
將作爲 DataNode 的主機名寫入該文件,每行一個。分佈式配置可以保留 localhost,也可以刪掉,讓 mryang 節點僅作爲 NameNode 使用。
本教程讓 mryang 節點僅作爲 NameNode 使用,因此將文件中原來的 localhost 刪除,只添加一行內容:slave。2.文件core-site.xml修改爲下面,同樣用“sudo vim core-site.xml”命令來修改,以下類似:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://mryang:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop2.7.1/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
3.文件 hdfs-site.xml,dfs.replication 一般設爲 3,但我們只有一個 slave 節點,所以 dfs.replication 的值還是設爲 1:
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>mryang:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop2.7.1/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop2.7.1/hadoop/tmp/dfs/data</value> </property> </configuration>
4.文件 mapred-site.xml (可能需要先重命名重命名的命令是“sudo mv mapred-site.xml.template mapred-site.xml ”,默認文件名爲 mapred-site.xml.template),然後配置修改如下:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>mryang:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>mryang:19888</value> </property> </configuration>
5.文件 yarn-site.xml:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>mryang</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
配置環境變量
首先切換到mater機器的hadoop2.7.1用戶執行下述操作。
如果安裝了Java jdk的話,使用以下命令查看jdk的安裝路徑:echo $JAVA_HOME
注意:即使安裝了jdk,由於這是新建的用戶,所以JAVA_HOME就在這個用戶中不存在,需要重新配置,由於我的jdk安裝在/usr/lib/jvm/java-8-oracle目錄(如果你沒安裝jdk則先去主用戶安裝)。
執行下述命令:sudo vim ~/.bashrc
PATH是hadoop的安裝路徑,先寫上去,後面再配置,不過怎麼寫就得怎麼安裝。
進入到/home/hadoop2.7.1/目錄然後打包之前修改好的hadoop配置文件,然後傳輸到slave節點上,執行如下:cd /home/hadoop2.7.1/ tar zcvf hadoop.tar.gz hadoop scp ./hadoop.tar.gz hadoop2.7.1@slave:/home/hadoop2.7.1/
壓縮成功截圖:
下圖爲傳輸成功圖:
然後切換到slave機器的hadoop2.7.1用戶執行下述操作。
進入到/home/hadoop2.7.1/目錄然後解壓master機器傳輸過來的壓縮文件,然後修改~/.bashrc文件的環境變量:
cd /home/hadoop2.7.1/ tar zxvf hadoop.tar.gz hadoop
啓動
先切換到master的hadoop2.7.1用戶。
cd /home/hadoop2.7.1/hadoop/
第一次啓動得格式化(緊接上面執行):
./bin/hdfs namenode -format
啓動dfs
./sbin/start-dfs.sh
啓動yarn
./sbin/start-yarn.sh
停止hadoop(注意目錄):
後面再開啓hadoop:
master機器的hadoop2.7.1用戶下jps查看:
slave機器的hadoop2.7.1用戶下jps查看(切換機器):
結語
以上就是hadoop集羣的搭建的大部分內容了,總的注意那幾個坑就是。