本篇介紹如何使用虛擬機搭建Hadoop集羣,此例搭建1個master和2個slave,如要更多的slave,方法如此類推。java
如今已經有安裝了一臺虛擬機,node
一、查看虛擬機的虛擬網絡,設置爲NAT模式:linux
編輯——>虛擬網絡編輯器web
進入到虛擬網絡編輯器界面後,單擊VMnet8,apache
這裏能夠查看網關IP,默認是192.168.112.2,這個很重要,由於等下配置ifcfg-ens33文件時會用到。vim
二、自動獲取IP功能初始化瀏覽器
VMWare須要用到自動獲取IP的服務,因此須要對其進行初始化。而初始化是使用橋接模式:bash
在VMWare右下角位置,右擊圖標——>設置:網絡
肯定以後,待機器執行完成,重複一樣的操做,不過要選擇NAT模式,這樣子,自動獲取IP服務的功能已經初始化。app
三、配置ifcfg-ens33文件
虛擬機上網的相關配置都在這個文件裏面配置:
輸入指令:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改ifcfg-ens33文件須要root權限,能夠在Linux輸入命令su,而後輸入密碼,再次進入ifcfg-ens33文件,上網的IP地址隨便設置,通常咱們都會將網關IP的最後一位修改一下;網關IP就是第一步查看的那個網關IP;DNS1則是提供上網的服務地址,這個地址須要查看本機究竟是連了那個網絡服務地址,步驟:本機打開cmd窗口,輸入ipconfig命令,下圖框框所示就是提供網絡服務的地址,
HWADDR則是網卡地址(不必定須要填寫編輯),查看網卡地址則須要退出ifcfg-ens33文件進行查看,退出操做:按esc結束編輯,按shift + :,輸入命令wq(wq表示保存修改並退出,q!表示不保存修改,直接退出),按enter,在Linux終端輸入命令ifconfig:
配置好以後,能夠進行網絡測試
四、網絡測試
重啓網絡,輸入命令:
/etc/init.d/network restart
上圖所示,表示重啓網絡成功,但仍是要測試一下是否能夠上網:
輸入命令:
curl www.baidu.com
能夠正常上網。那麼這裏,就將192.168.112.10做爲本次集羣的master節點。
五、建立slave節點
建立slave節點比較簡單,首先關閉master節點(這個很重要),找到該節點的鏡像所在的文件夾位置,對其整個鏡像進行復制,粘貼。
複製、粘貼,修改文件夾名字:
新建兩個虛擬機,分別爲slave1和slave2,首先分別輸入ifconfig查看是否顯示正常,
有時候並無像上圖那樣顯示,有可能少了ens33或者某些信息,輸入命令「/etc/init.d/network restart」時,出現「Failed to start LSB:Bring up/down networking」的報錯,這時要肯定是否關閉NetWorkManager服務,由於剛建立的slave和master容易出現NetWorkManager服務衝突,這時master和slave都要關閉NetWorkManager服務,並禁止開機啓動該服務,輸入命令:
service NetworkManager stop
chkconfig NetworkManager off
執行命令後,重啓虛擬機,以後就能夠正常使用。
六、關閉防火牆
不管系統防火牆(指Linux),仍是內核防火牆都要關閉。並且Master和slave都要操做。
(1)關閉系統防火牆
#查看防火牆狀態,輸入命令:
firewall-cmd --state
若是出現「not running」字樣,說明防火牆已經關閉,若是不是這樣的字樣,則如下操做:
#中止防火牆,臨時關閉,輸入命令:
systemctl stop firewalld.service
#禁止防火牆開機啓動,永久關閉,輸入命令:
systemctl disable firewall.service
(2)關閉內核防火牆
#清空系統防火牆,輸入命令:
iptable -F
若是沒有iptable命令,能夠執行下面命令下載,若是有,就忽略:
yum -y install iptable -services
#保存防火牆配置
service iptables save
#臨時關閉內核防火牆,輸入命令:
setenforce 0
#永久關閉內核防火牆:
vim /etc/selinux/config
添加語句:SELINUX=disabled
七、配置slave1和slave2的ifcfg-ens33文件
參考步驟3,slave1和slave2都須要配置,須要修改的地方有IPADDR,HWADDR(按實際狀況修改),根據實際狀況而修改,配置好,一樣的重啓一下網絡。
將slave1的IPADDR修改成:192.168.112.11
將slave2的IPADDR修改成:192.168.112.12
八、安裝JDK
默認狀況下,CentOS7會自動安裝了openjdk1.7和jdk1.8,但它們並非咱們想要的,因此要卸載它們。
#查看安裝的JDK版本,輸入命令:
rpm -q|grep jdk
#卸載原裝的Open JDK,輸入命令:
yum -y remove java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
yum -y remove java-1.8.0-openjdk-headless-1.7.0.65-3.b17.el7.x86_64
#安裝JDK
去到Oracle官網下載Linux版本的JDK,
將壓縮包導入到虛擬機裏面,導入外部文件有好多種方法,這裏介紹兩種:(1)沒有可視化界面的虛擬機,能夠經過命令:rz,而後選擇相應的壓縮包文件,以下圖:
(2)有可視化界面的虛擬機,直接將壓縮包文件複製粘貼到虛擬機的桌面:以下圖
這裏使用了第二種方法。
導入壓縮文件後,進入到桌面路徑下,將導入的壓縮包經過命令的方式,複製到指定的路徑下(目的是方便管理),
進入虛擬機桌面路徑,輸入命令:
cd ~
cd ./Desktop
#複製壓縮包到指定路徑
複製壓縮包到/usr/local/src文件夾下,在當前Desktop目錄下輸入命令:
cp jdk-8u201-linux-x64.tar.gz /usr/local/src/
#解壓壓縮包
進入/usr/local/src目錄下,輸入命令:cd /usr/local/src,解壓jdk壓縮包,輸入命令:
tar -zxvf jdk-8u201-linux-x64.tar.gz
#配置環境變量
解壓成功後,輸入命令:
vim ~/.bashrc
新增如下參數,並用「wq」進行保存退出:
export JAVA_HOME= /usr/local/src/jdk1.8.0_201 export JRE_HOME=$JAVA_HOME/jre
export CALSSPATH=.$CLASSPATH:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
#生效配置文件
配置完,使文件生效,輸入命令:
source ~/.bashrc
#驗證
都配置好了就驗證一下,看一下jdk版本,輸入命令:
java -version
能夠用一樣的操做方法,將slave1和slave2的JDK也安裝好。
九、配置SSH
#修改映射關係,輸入命令:
vim /etc/hosts/
新增如下內容(slave1和slave2也要加):
192.168.112.10 master
192.168.112.11 slave1
192.168.112.12 slave2
#修改主機名字,輸入命令:
vim /etc/sysconfig/network
新增如下內容:
NETWORKING=yes
HOSTNAME=master
#設置臨時主機名稱,輸入命令:
hostname master
輸入驗證命令:
hostname
在slave1和slave2也要設置,各自將「master」改成各自機器名
#永久設置hostname名稱爲xxx(每一個機器都要設置):
在master節點
vim /etc/hostname
添加內容
master
在slave1和slave2也要設置,各自將「master」改成各自機器名
#生成ssh密鑰
輸入命令(每一個節點都要生成一次):
ssh-keygen -t rsa
在slave1和slave2分別查看id_rsa.pub文件,並將文件內容複製到mastaer中的authorized_keys裏,輸入命令:
cd ~
cd .ssh
vim ./authorized_keys
複製完就是下面截圖這樣:
而後經過遠程的方式,將authorized_keys文件覆蓋到slave1和slave2中(或者用一樣的方式在slave1和slave2中操做),輸入命令:
scp authorized_keys root@slave1:~/.ssh/
scp authorized_keys root@slave2:~/.ssh/
#驗證
最後在每臺機器上分別驗證,各自輸入命令:
ssh slave1
ssh slave2
ssh master
拿master作例子:
首先,輸入:ssh slave1,
此時機器已經轉到slave1節點上,使用hostname命令驗證,證實master能夠訪問slave1,而後再輸入命令:ssh master,使得機器再次回到master節點,
執行成功,說明slave1節點能夠訪問master;用一樣的方法測試master->slave2:
退出命令:exit
十、配置Hadoop2.6.1
#解壓
同步驟8同樣,複製hadoop壓縮包到/usr/local/src/目錄中,並解壓。
#配置相關文件(這裏給出master節點的,slave1和slave2的經過將master的相關文件遠程複製過去)
進入hadoop路徑,全部操做都在該文件夾路徑下操做:
cd /usr/local/src/hadoop-2.6.1/etc/hadoop
(1)爲hadoop配置jdk環境
vim hadoop-env.sh
添加內容:export JAVA_HOME=/usr/local/src/jdk1.8.0_201
(2)爲分佈式資源管理系統配置jdk環境
vim yarn-env.sh
添加內容:export JAVA_HOME=/usr/local/src/jdk1.8.0_201
(3)配置hadoop其餘節點名稱
vim slaves
添加內容:
slave1
slave2
(4)配置Hadoop Core
vim core-site.xml
添加內容:
<configuration>
<!--指定namenode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!--用來指定使用hadoop時產生文件的存放目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop-2.6.1/tmp</value>
</property>
</configuration>
(5)配置Hadoop hdfs
vim hdfs-site.xml
添加內容:
<configuration>
<!--配置namenode.secondary地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<!--指定hdfs中namenode的存儲位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/src/hadoop-2.6.1/dfs/name</value>
</property>
<!--指定hdfs中datanode的存儲位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/src/hadoop-2.6.1/dfs/data</value>
</property>
<!--指定hdfs保存數據的副本數量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
(6)配置Hadoop mapper
注意:hadoop2.x沒有mapred-site.xml,因此先拷貝並建立這個文件,輸入命令:
cp mapred-site.xml.template mapred-site.xml
進入mapreduce配置文件:
vim mapred-site.xml
編輯文件:
<configuration>
<!--告訴hadoop之後MR(Map/Reduce)運行在YARN上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(7)配置Hadoop yarn
vim yarn-site.xml
添加內容:
<configuration>
<!--nomenodeManager獲取數據的方式是shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--配置shuffle,由於map和reduce之間有個shuffle過程,-->
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!--爲每一個rm-id設置主機:端口用來提交做業。-->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<!--調度器接口的地址。-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<!--對每一個rm-id設置NodeManager鏈接的host-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<!--對每一個rm-id指定管理命令的host-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<!--對每一個rm-id,指定RM webapp對應的host-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<!-- 關閉虛擬內存檢查-->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
#建立臨時目錄和文件目錄
mkdir /usr/local/src/hadoop-2.6.1/tmp
mkdir -p /usr/local/src/hadoop-2.6.1/dfs/name
mkdir -p /usr/local/src/hadoop-2.6.1/dfs/data
#配置Hadoop的環境變量(master、slave1和slave2都要配置)
vim ~/.bashrc
添加內容:
HADOOP_HOME=/usr/local/src/hadoop-2.6.1
export PATH=$PATH:$HADOOP_HOME/bin
#從新啓動資源文件
source ~/.bashrc
這個時候能夠將上面再master節點下的hadoop文件下的配置文件copy到slave1和slave2裏,輸入命令:
scp -f /usr/local/src/hadoop-2.6.1/ root@slave1:usr/local/src/
scp -f /usr/local/src/hadoop-2.6.1/ root@slave2:usr/local/src/
十一、啓動集羣
#初始化Namenode,只在master節點操做,
hadoop namenode -format
注意:該命令重複執行的話,有可能會出現異常。這時須要,刪除相關文件(這個後面再講),從新初始化hadoop
#啓動集羣
在master節點操做
/usr/local/src/hadoop-2.6.1/sbin/start-all.sh
啓動後,分別在master、slave1和slave2節點上輸入命令:jps,查看節點:
(1)master節點
(2)slave1節點
(3)slave2節點
上面說起到:重複初始化hadoop會帶來了異常,致使某些node沒法正常啓動,解決方法:
一、關閉集羣,./sbin/stop-all.sh
二、刪除/usr/local/src/hadoop-2.6.1/dfs/name下面的文件[每一個節點都操做]
三、刪除/usr/local/src/hadoop-2.6.1/dfs/data下面的文件[每一個節點都操做]
四、刪除/usr/local/src/hadoop-2.6.1/tmp下面的文件[每一個節點都操做]
五、刪除/usr/local/src/hadoop-2.6.1/logs下面的文件[每一個節點都操做]
六、從新格式化hadoop,輸入命令:hadoop namenode -format [只在master節點操做]
七、啓動集羣,./sbin/start-all.sh
#監控網頁
在瀏覽器輸入地址:192.168.112.10:8088(這個是master:8088)
#關閉集羣
/usr/local/src/hadoop-2.6.1/sbin/stop-all.sh