基於virtual box虛擬機器的Hadoop叢集安裝配置教程
本文記錄參考 http://dblab.xmu.edu.cn/blog/2775-2/ 搭建hadoop分散式叢集的過程
前置
- 已在一臺虛擬機器配置好了偽分散式hadoop系統
- 一臺虛擬機器作為master作為namenode,三臺虛擬機器data1、2、3(均安裝了ubuntu系統)作為datanode
網路配置
-
網絡卡1配置為NAT網路,這樣虛擬機器可以正常訪問外部網路
-
網絡卡2配置為host-only,這樣data虛擬機器可以和master虛擬機器通訊
如果介面名稱顯示未指定,可以在virtualBox左上角選單欄點選管理,主機網路管理器,點選建立,便可以指定介面名稱
-
配置主機名稱和網路
sudo vim /etc/hostname
ping data1 -c 3 測試網路是否連通
SSH無密碼登入節點
-
必須要讓Master節點可以SSH無密碼登入到各個Slave節點上。首先,生成Master節點的公匙,如果之前已經生成過公鑰,必須要刪除原來生成的公鑰,重新生成一次,因為前面我們對主機名進行了修改。具體命令如下
cd ~/.ssh # 如果沒有該目錄,先執行一次ssh localhost rm ./id_rsa* # 刪除之前生成的公匙(如果已經存在) ssh-keygen -t rsa # 執行該命令後,遇到提示資訊,一直按回車就可以
-
為了讓Master節點能夠無密碼SSH登入本機,需要在Master節點上執行如下命令:
cat ./id_rsa.pub >> ./authorized_keys -
接下來,在Master節點將上公匙傳輸到Slave1節點(具體資料夾視具體情況而定)
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ -
在data1節點上,將SSH公匙加入授權:
mkdir ~/.ssh # 如果不存在該資料夾需先建立,若已存在,則忽略本命令 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/id_rsa.pub # 用完以後就可以刪掉
-
如果有其他節點,一樣配置
配置PATH變數
- 在前面的偽分散式安裝內容中,已經介紹過PATH變數的配置方法。可以按照同樣的方法進行配置,這樣就可以在任意目錄中直接使用hadoop、hdfs等命令了。如果還沒有配置PATH變數,那麼需要在Master節點上進行配置。 首先執行命令“vim /.bashrc”,也就是使用vim編輯器開啟“
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
儲存後執行命令“source ~/.bashrc”,使配置生效。
配置叢集/分散式環境
-
在配置叢集/分散式模式時,需要修改“/usr/local/hadoop/etc/hadoop”目錄下的配置檔案,這裡僅設定正常啟動所必須的設定項,包括workers 、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml共5個檔案,更多設定項可檢視官方說明。檔案在/usr/local/hadoop/etc/hadoop中
-
workers
-
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
-
hdfs-site.xml
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
-
mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>Master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>Master:19888</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> </configuration>
-
yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>Master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
-
5個檔案全部配置完成以後,需要把Master節點上的“/usr/local/hadoop”資料夾複製到各個節點上
在master節點上:cd /usr/local sudo rm -r ./hadoop/tmp # 刪除 Hadoop 臨時檔案 sudo rm -r ./hadoop/logs/* # 刪除日誌檔案 tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先壓縮再複製 cd ~ scp ./hadoop.master.tar.gz Slave1:/home/hadoop
在data1節點上
sudo rm -r /usr/local/hadoop # 刪掉舊的(如果存在) sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local sudo chown -R hadoop /usr/local/hadoop
啟動
-
首次執行,在master節點上格式化節點:
hdfs namenode -format
-
啟動
start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver
-
在master上jps檢視
-
data1上檢視
關閉
- 在master虛擬機器上
stop-yarn.sh stop-dfs.sh mr-jobhistory-daemon.sh stop historyserver