在經過幾天的環境搭建,終於搭建成功,其中對於hadoop的具體設置倒是沒有碰到很多問題,反而在hadoop各節點之間的通信遇到了問題,而且還反復了很多遍,光虛擬機就重新安裝了4、5次,但是當明白了問題之后才發現這都是無用功,有了問題應該找具體的解決方案,並不是完全的重裝,這樣不會明白問題是怎么解決的,除了費時費力沒有多大的用處,接下來就把搭建的過程詳細敘述一下。
環境配置: 計算機: CPU-I7 2630QM 6G內存 256G SSD 虛擬機: vmware workstation 11 系統: ubuntu 14.04 LTS 節點: 192.168.1.150 master 192.168.1.151 slave1 192.168.1.151 slave2
參考:
http://www.aboutyun.com/thread-7684-1-1.html
http://my.oschina.net/u/2285247/blog/354449
http://www.aboutyun.com/thread-5738-1-1.html
http://www.aboutyun.com/thread-6446-1-1.html
安裝步驟: 1、安裝虛擬機系統(安裝1個即可,其余的可以通過克隆),並進行准備工作
2、安裝JDK,並配置環境變量 3、克隆虛擬機系統,並修改hosts、hostname
4、配置虛擬機網絡,使虛擬機系統之間以及和host主機之間可以通過相互ping通。
5、配置ssh,實現節點間的無密碼登錄
6、master配置hadoop,並將hadoop文件傳輸到slave節點
7、配置環境變量,並啟動hadoop,檢查是否安裝成功
1、安裝虛擬機系統,並進行准備工作
安裝虛擬機系統不用贅述,安裝vmware——新建虛擬機——典型——選擇鏡像——設置賬戶密碼——安裝位置——配置——安裝。
當虛擬機安裝成功后,默認的是nat模式,不要立即將網絡模式切換到橋接模式下,這時nat模式下應該可以聯網,先安裝幾個軟件,以后需要用到,當然在橋接模式下也可以聯網,但是橋接模式是要設置成靜態IP的,局限性比較大,下載安裝完以后,接下來就不用聯網了。
#切換到root模式下 #剛開始root是默認不開啟的,可以利用如下命令對root密碼進行設置
sudo passwd root #現在在root模式先安裝vim,命令如下:
apt-get install vim #安裝ssh
apt-get install ssh #這個步驟是可選的,用於更新,以及將ssh相關都安裝
apt-get install openssh* apt-get update
2、安裝jdk,並配置環境變量
1)從oracle下載jdk安裝包,並將安裝包拖入到虛擬機當中
2)通過cd命令進入到安裝包的當前目錄,利用如下命令進行解壓縮。
tar -zxvf jdk.....(安裝包名稱)
3)利用如下命令將解壓后的文件夾移到/usr目錄下
#注意,這樣移動到/usr以后就沒有jdk1.8...這個目錄了,是將這個目錄下的所有文件全部移動到/usr/java下,
mv jdk1.8...(文件夾名稱) /usr/java
4)配置環境變量
#切換到root模式下
su - root #利用vim編輯/etc/profile(這個是對全體用戶都起作用的)
vim /etc/profile
#將一下兩句加入到其中,並保存退出
export PATH=$PATH:/usr/java/bin:/usr/java/jre/bin
export CLASSPATH=.:/usr/java/lib:/usr/java/jre/lib
#然后使profile生效
source /etc/profile
#試驗java、javac、java -version
3、克隆虛擬機並修改三個虛擬機的hosts、hostname
1)克隆虛擬機時要注意一定要選擇完整克隆
2)修改hosts(三個虛擬機都要改)
#root下用vim打開hosts
vim /etc/hosts #將以下內容添加到hosts中
192.168.1.150 master 192.168.1.151 slave1 192.168.1.152 slave2
如圖:
3)修改hostname(三個虛擬機都要改)
#root下打開hostname
vim /etc/hostname #分別將每個虛擬機改成對應的name(master、slave1、slave2)
4、配置虛擬機網絡
在安裝好虛擬機后,虛擬機有三種模式分別是nat模式、僅主機模式、橋接模式,此處對於此三種模式進行簡單介紹:
nat模式:這是通nat地址轉換共享主機Ip的模式,在安裝好虛擬機后會發現有vmnet8虛擬網卡,這個網卡默認是nat模式,這時nat模式下的虛擬機相當於又組成一個局域網,而vmnet8相當於這個局域網的網關,在這種模式下,虛擬機之間可以相互ping通,但是不能與主機通信,因為主機與虛擬機之間有有一個vmnet8網卡。當然通過配置vmnet8網卡可以實現通信。
僅主機模式:這種模式沒有地址轉換能力,各個虛擬機之間是相互獨立的,不能相互訪問,每個虛擬機只能與主機通信。
橋接模式:這種模式是將虛擬網卡直接綁定到物理網卡上,可以綁定多個地址,這里是將網卡設置成混雜模式,然后實現可以收發多個地址的消息。
本人搭建環境采用的是橋接模式,這種模式擬真性更強一些,雖然有些麻煩。
注意:要將三個虛擬機的ip與主機都處於同一個網段,然后實驗是否可以Ping通
5、配置ssh,實現節點間的無密碼登錄 (注意關閉防火牆 ufw disable)
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
2)導入authorized_keys
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
3)試驗看是否安裝成功
#查看是否有sshd進程
ps -e | grep ssh #嘗試登錄本地
ssh localhost
4)遠程無密碼登錄
#進入master的.ssh目錄
scp authorized_keys u0@slave1:~/.ssh/authorized_keys_master #u0是我的用戶名 #進入slave1、slave2的.ssh目錄
cat authorized_keys_master >> authorized_keys
注意:第四步要在slave上重復,要使三者都能夠無密碼相互登錄,重復完后可以利用如下命令試驗,第一次需要輸入密碼綁定
ssh salve1(slave2)
注意:我的主機是連接的路由無線網絡,我遇到了一個問題,就是在虛擬機網絡重連后master可以登錄slave2,但是過一會后就發現老是connection refused,就因為這個問題我還重新安裝了幾次,網絡上的方法都試了也不管用,后來發現,原來是我的虛擬機ip與路由局域網中的其他機器Ip沖突,千萬要保證局域網內的Ip不要和虛擬機的ip沖突
6、master配置hadoop,並將hadoop文件傳輸到slave節點
1)解包移動
#解壓hadoop包
tar -zxvf hadoop...
#將安裝包移到/usr目錄下
mv hadoop... /usr/hadoop
2)新建文件夾
#在/usr/hadoop目錄下新建如下目錄(root)
mkdir /dfs mkdir /dfs/name mkdir /dfs/data mkdir /tmp
3)配置文件:hadoop-env.sh(文件都在/usr/hadoop/etc/hadoop中)
修改JAVA_HOME值(export JAVA_HOME=/usr/java)
5)配置文件:slaves
將內容修改為:
slave1
slave2
6)配置文件:core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.u0.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.u0.groups</name>
<value>*</value>
</property>
</configuration>
7)配置文件:hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
8)配置文件: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> </configuration>
9)配置文件:yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
10)將hadoop傳輸到slave1和slave2根目錄
scp -r /usr/hadoop u0@slave1:~/
7、配置環境變量,並啟動hadoop,檢查是否安裝成功
1)配置環境變量
#root模式編輯/etc/profile
vim /etc/profile #以上已經添加過java的環境變量,在后邊添加就可以
export PATH=$PATH:/usr/java/bin:/usr/java/jre/bin:/usr/hadoop/bin:/usr/hadoop/sbin
2)啟動hadoop
#注意最后單詞帶‘-’
hadoop namenode -format start-all.sh
3)查看啟動進程