(之前學習時的記錄)
整理一下在搭建hadoop完全分布模式時的相關步驟,及搭建過程中遇到的一些問題。
相關環境:
環境:基於win7的VM中CentOS64位系統
台數:3台;分別為master、slave1、slave2
hadoop版本:CDH3-U6
所用到的工具:Xshell(遠程鏈接管理工具)、filezilla(可以遠程移動文件)
第一部分:在VM中安裝CentOS
1、下載
VM自己從網上下載,盡量不要裝最新版本的;CentOS選擇后綴為iso版本下載
2、安裝
VM自己安裝;
安裝好VM后,開始安裝CentOS;相關安裝可以參考鏈接如下:
http://www.91linux.com/html/2014/CentOS_0415/9725.html
剛開始安裝可以照着教程來裝,參考教程上安裝的是Desktop(桌面版)的,比較熟練的話盡量安裝成Basic Serve版,相關步驟一樣,只是后者沒有操作界面,完全是代碼行。
3、每個CentOS信息
對於初步搭建hadoop完全分布來說,安裝三台Linux系統已足以。對於此,我分別安裝了命名為master、slave1、slave2三台虛擬機,為Basic Serve版,相關配置后續再說。
第二部分、在CentOS中搭建hadoop集群
1、修改主機名和用戶名(root用戶執行,所有節點都需執行)
1)對上一步已搭建完的三個虛擬機,分別增加hadoop用戶(root用戶執行,所有節點都執行):
[root@localhost ~]#useradd hadoop
#添加以hadoop為用戶名的用戶
[root@localhost ~]#passwd hadoop
#修改該用戶密碼,密碼統一設置為hadoop
2)修改主機名(root用戶,所有節點都需要執行)
[root@localhost ~]#vi /etc/sysconfig/network
#使用VI對network文件進行修改,文件打開后會出現:
NETWORK=yes
HOSTNAME=localhost.localhost
按鍵盤的I鍵進行編輯,對於完全分布式來說,分別修改其“localhost.localhost”為“master”“slave1”“slave2”,修改完之后按Esc+Shift:+wq進行保存退出。
3)節點之間互訪配置(這一步可以在配置完IP地址后在執行,所有節點均執行)
[root@localhost ~]#vi /etc/hosts
#打開host文件,在文件末尾追加:
192.168.1.10 master
#masterIP地址與主機名
192.168.1.11 slave1
# slave1IP地址與主機名
192.168.1.12 slave2
# slave2IP地址與主機名
2、配置靜態IP(root用戶執行,所有節點都需執行)
1)相關注意:在安裝上CentOS后,會存在一個如何與宿主機進行正常通信的問題,在這一步中,首先在VM的網絡虛擬配置中找到網絡鏈接方式,選擇為“橋接”模式,並選擇具體網卡,
接着在系統設置中,設置虛擬機的連接方式為“橋接”;打開宿主機(Win7)中的cmd,輸入ipconfig查看宿主機網段並記下,我的這台網段是10.129.49.xxx,所以在虛擬機橋接模式下,
所有虛擬機IP都應設為10.129.49.xxx(所有節點后邊的數都不能相同)。
2)修改ifcfg-eth0文件(eth0代表網卡,可能有的虛擬機的網卡會不同,具體為哪個視虛擬機而定,root用戶執行,所有節點都需執行)
在root用戶下,輸入
[root@localhost ~]#cd /etc/sysconfig/network-scripts
#進入network-scripts目錄
[root@localhost ~]#ll
#查看目錄下所有文件,看你的網卡是否是eth0,如果不是,視具體虛擬機而定
[root@localhost ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0
#進ifcfg-eth0文件,並進行編輯修改:(紅色為修改部分)
DEVICE=eth0
BOOTPROTO=static
NM_CONTROLLED=yes
ONBOOT=yes
IPADDR=192.168.1.10
#靜態IP地址
NETMASK=255.255.255.0
#掩碼地址
GATWAY=192.168.1.1
#網關地址
3)修改UUID
[root@localhost ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0
#刪除MAC地址行
[root@localhost ~]#rm -rf /etc/udev/rules.d/70-persistent-net.rules
#刪除網卡和MAC地址綁定文件
4)重啟並查看IP
[root@localhost ~]#reboot
[root@localhost ~]#ifconfig
打開宿主機的cmd,輸入ping 192.168.1.10查看是否能進行通信,如果能則表示配置成功;分別配置slave1、slave2。
3、使用Xshell進行遠程登錄
使用Xshell登錄是因為CentOS自帶界面不可更改,也無法調整字體大小
對配置好IP的虛擬機用Xshell進行遠程登錄(即IP地址、用戶名、用戶密碼),登陸后設置界面,調整字體大小。
4、配置SSH無密碼鏈接
1)永久關閉防火牆(root用戶)
[root@localhost ~]#chkconfig iptables off
2)啟動SSH服務命令(root用戶)
[root@localhost ~]#service ssh restart
#重啟SSH
[root@localhost ~]#rpm -qa | grep openssh
#檢查SSH是否安裝成功
如果出現下面的信息:
openssh-askpass-5.3p1-81.e16.x86_64
openssh-5.3p1-81.e16.x86_64
openssh-clients-5.3p1-81.e16.x86_64
openssh-server-5.3p1-81.e16.x86_64
再執行命令:
[root@localhost ~]#rpm -qa | grep rsync
如果出現以下信息:
rsync-3.0.6-9.e16.x86_64
說明SSH安裝成功。
3)生成SSH公匙(hadoop用戶)
在主節點即master上執行
[hadoop@master ~]$ssh-keygen -t rsa
#遇到提示回車即可,最后顯示圖形為公匙的指紋加密
[hadoop@master ~]$ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@master
[hadoop@master ~]$ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@slave1
[hadoop@master ~]$ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@slave2
#將公匙發至從節點的slave1、slave2用戶
注意:對於完全分布來說,只在主節點配置SSH無密碼鏈接即可,之后把公匙發至從節點
4)驗證安裝(hadoop用戶)
[hadoop@master ~]$ssh master
[hadoop@master ~]$ssh slave1
[hadoop@master ~]$ssh slave2
#如果沒有出現輸入密碼提示則表示安裝成功,執行這條命令后會遠程登錄從節點,返回主節點需執行exit
若按照上面步驟執行任然不成功,有可能是/home/hadoop/.ssh文件夾的權限問題。以hadoop用戶執行
[hadoop@master ~]$chmod 700 /home/hadoop/.ssh
[hadoop@master ~]$chmod 700 /home/hadoop/.ssh/authorized_keys
5、安裝JDK(root用戶,所有節點都需執行)
CentOS預裝的是Open JDK,但還是要推薦用Oracle JDK,下載地址為:
http://www.oracle.com/technetwork/Java/Javase/downloads/index.html
1)修改/opt文件夾權限
[root@localhost ~]#chown -R hadoop /opt
2)卸載Open JDK
[root@localhost ~]#java -version
#查看Java版本
[root@localhost ~]#rpm -qa | grep java
#查看Java詳細信息
顯示如下信息:
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
卸載:
[root@localhost ~]#rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
[root@localhost ~]#rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
或者執行指令卸載:
[root@localhost ~]#yum -y remove java java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
[root@localhost ~]#yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
3)安裝Oracle JDK(hadoop用戶也可)
在第1)步給/opt文件夾加權限后,就可以使filezilla工具直接把在Windows中的JDK安裝包直接拖至/opt文件夾下,然后進行解壓:
[root@localhost ~]#tar -xzvf jdk-6u43-linux-x64.tar.gz
#解壓JDK至/opt文件夾下
解壓完后,刪除JDK安裝包
[root@localhost ~]#rm -rf jdk-6u43-linux-x64.tar.gz
#移除JDK安裝包
4)配置環境變量
[root@localhost ~]#vi /etc/profile
#對profile文件進行編輯
對文件追加:
export JAVA_HOME=/opt/jdk1.6.0
export PATH=$PATH:$JAVA_HOME/bin
使環境變量立即生效,執行命令:
[root@localhost ~]#source /etc/profile
5)驗證安裝
[root@localhost ~]#java -version
出現如下信息,則安裝成功:
#查看Java版本
Java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01,mixed mode)
6、配置hadoop(hadoop用戶,只在主節點執行)
前面已經對/opt權限進行過修改,這一步就直接在/opt文件中安裝配置即可;
利用filezilla工具把安裝包發送至/opt文件夾下(只在hadoop主節點即master節點執行),執行解壓縮。
1)解壓文件
[hadoop@master ~]$tar -zxvf hadoop-0.20.2-cdh3u6.tar.gz
#解壓縮hadoop安裝包
2)修改配置文件(hadoop用戶在主節點執行)
Hadoop的配置文件都在/opt/ hadoop-0.20.2-cdh3u6/conf下,對其中主要文件進行配置:
修改hadoop-env.sh
在文件hadoop-env.sh末尾追加環境變量
export JAVA_HOME=/opt/jdk1.6.0
export HADOOP_HOME=/opt/hadoop-0.20.2-cdh3u6
修改core-site.xml
修改core-site.xml為:
<configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> </configuration>
修改hdfs-site.xml
修改hdfs-site.xml為:
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration> <name>dfs.name.dir</name> <value>/opt/hdfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/opt/hdfs/data</value> </property> </configuration>
修改mapred-site.xml
修改mapred-site.xml為:
<configuration> <property> <name>mapred.job.tracker</name> <value>master:9001</value> </property> </configuration>
3)修改masters文件
修改masters文件為:
master
4)修改slaves文件
修改slaves文件為:
slave1
slave2
5)將安裝文件發送至從節點
利用scp命令將安裝文件夾分發到從節點的相同路徑下:
[hadoop@master ~]$scp -r /opt/hadoop-0.20.2-cdh3u6 hadoop@slave1:/opt
[hadoop@master ~]$scp -r /opt/hadoop-0.20.2-cdh3u6 hadoop@slave2:/opt
至此,Hadoop安裝配置工作全部完成,為了能在任何路徑下使用Hadoop命令,還需要配置環境變量(root用戶執行,所有節點都需要執行)。對文件/etc/profile追加如下信息:
export HADOOP_HOME=/home/hadoop/hadoop-0.20.2-cdh3u6
export PATH=$PATH:$HADOOP_HOME/bin
修改完后,執行命令行(root用戶執行,所有節點都需要執行):
[root@localhost ~]#source /etc/profile
7、格式化HDFS
在第一次啟動Hadoop之前,必須先將HDFS格式化。執行命令:
[hadoop@master ~]$hadoop namenode -format
#如果別的路徑執行不了,則進入/opt/hadoop-0.20.2-cdh3u6/bin文件下執行
按照提示輸入Y,格式化成功后會出現格式化成功的信息:
16/1/20 10:50:51 INFO common.Storage: Storage directory /opt/hdfs/name has been successfully formatted.
8、啟動Hadoop並驗證安裝
1)啟動Hadoop
首先賦予腳本可執行權限(hadoop用戶所有節點都需要執行),執行命令:
[hadoop@master ~]$chmod +x -R /opt/hadoop-0.20.2-cdh3u6/bin
然后執行啟動腳本(hadoop用戶,主節點執行),執行命令:
[hadoop@master ~]$./opt/ hadoop-0.20.2-cdh3u6/bin/start-all.sh
執行完成后,執行jps命令查看進程是否啟動成功,若成功;
[hadoop@master ~]$jps
主節點會出現:
NameNode
JobTracker
SecondaryNameNode
slave1節點出現:
DateNode
TaskTracker
slave2節點出現:
DateNode
TaskTracker
9、驗證是否安裝成功
在新安裝的集群上運行一個MapReduce程序,判斷集群是否安裝成功,Hadoop例庫中自帶多中已經寫好的可以運行的MR程序,此處,此處以最簡單的單詞計數程序WordCount進行集群平台驗證:
1)在集群的任何一台電腦上創建一個文本文件命名為words,這里以master為例。對文本文件添加內容:如“data mining on data warehouse”,如果程序正常運行,最終結果為:
data 2
mining 1
on 1
warehouse 1
2)在HDFS中新建目錄並上傳本地文件,執行命令如下:
#HDFS中新建目錄
[hadoop@master ~]$hadoop dfs –mkdir /user/hadoop/input
#將本地文件上傳
[hadoop@master ~]$hadoop dfs –put /opt/words /user/hadoop/input
3)運行程序並查看結果
#運行單詞統計程序
[hadoop@master ~]$hadoop jar /opt/hadoop-0.20.2/hadoop-examples-0.20.2- cdh3u6.jar wordcount /user/hadoop/input /user/hadoop/output
#查看程序輸出
[hadoop@master ~]$hadoop dfs –cat /user/hadoop/output/part-r-00000
屏幕打印為:
data 2
mining 1
on 1
warehouse 1
表示集群可以正常運行,到此Hadoop安裝結束。