1)安裝Ubuntu或其他Linux系統:
a)為減少錯誤,集群中的主機最好安裝同一版本的Linux系統,我的是Ubuntu12.04。
b)每個主機的登陸用戶名也最好都一樣,比如都是hadoop,不然到最后啟動hadoop時會出現不管你密碼是否輸入正確,都會提示權限不夠的錯誤,如果你之前裝系統時沒注意到這個問題,可以之后在每個主機上都新建一個用戶hadoop來實現,命令如下:
增加hadoop用戶:sudo adduser hadoop
把新加的hadoop用戶,添加到admin組中,讓其有sudo權限:sudo usermod -aG adm,sudo hadoop
切換到hadoop用戶,以hadoop用戶重新登陸linux系統即可。
c)修改每個主機的主機名hostname:充當主節點的主機名為master,充當從節點的主機名為slave1,slave2,slave3,4.....N
這里我的實驗是2台主機,一個主機充當主節點master,一個主機充當從節點slave2
可以通過命令:sudo vi /etc/hostname 來打開並修改hostname,修改完之后重新打開一個終端就可以看到結果,例如我這里的主節點主主機中修改完登陸用戶名和主機名后如下所示:
登陸用戶名為:hadoop 主機名為:master
另外一個從節點用戶名也為hadoop,主機名為:slave2
2)配置網絡
a)配置每個節點的IP使其在同一個局域網內:
例如:
master IP:192.168.130.15 slave2 IP:192.168.130.41
可以通過命令ifconfig來修改IP,例如 :sudo ifconfig eth0 192.168.130.15(新IP地址)。
b)在每個master和slave的hosts文件中加入如下幾行:
打開並修改hosts :sudo vi /etc/hosts
新添加內容:
192.168.130.15 master
192.168.130.41 slave2
c)各個節點相互ping測試
例如:這里用主節點master ping下從節點slave2
如果你的實驗中slave節點多於1個,每個節點之間都ping下,確保可以ping通。
3)安裝JDK
Hadoop是用JAVA編寫的程序,Hadoop的編譯及MapReduce的運行都需要使用JDK,因此在安裝Hadoop前,必須安裝JDK。
這里我安裝的JDK版本是 jdk-6u38-linux-i586.bin,可用其他版本,但需要修改環境變量以及后面的配置路徑。
需對實驗中所有主機執行以下步驟:
1、把 jdk 安裝文件拷貝到/usr/lib 目錄下,然后安裝
sudo cp jdk-6u38-linux-i586.bin /usr/lib
cd /usr/lib
修改jdk權限: sudo chmod +x jdk-6u38-linux-i586.bin
修改完權限后就可以安裝: sudo ./jdk-6u38-linux-i586.bin
2、jdk安裝成功后修改環境變量並且把 java 安裝到系統
a)配置環境變量,編寫一個 java.sh並放到目錄 /etc/profile.d 下面,java.sh內容如下:
1 #set jdk environment 2 export JAVA_HOME=/usr/lib/jdk1.6.0_38 3 export JRE_HOME=/usr/lib/jdk1.6.0_38/jre 4 export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 5 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
b)提升 java.sh 的權限:
sudo chmod 775 /etc/profile.d/java.sh
c)刷新 profile
source /etc/profile
d)把 Java 安裝到系統:
ln –s /usr/lib/jdk1.6.0_38/bin/java /usr/bin/java
e)查看 Java 版本確定已經安裝到系統:
java –version
如果看到版本信息,說明安裝成功。
4)SSH 無密碼驗證配置
Hadoop需要通過SSH來啟動slave列表中的各台主機的守護進程,因此SSH必須安裝。
SSH 是安全殼協議,使用公鑰私鑰機制,安全的在主機間傳輸文件,現在需要對集群進行無密碼驗證訪問傳輸的配置。需對集群所有機器進行配置,建議以下操作集群按步驟同步,即所有機器都完成了一個步驟再進行下一步。
a)、安裝 SSH
sudo apt-get install ssh
b)、在 hadoop 用戶下,使用命令:
ssh-keygen –t rsa。
一路歡快的回車,有時需要在中間 y/n 時選擇 y。
將在~/.ssh 目錄下產生一個 id_rsa 的私鑰 和 id_rsa.pub 的公鑰。
ssh-keygen 表示生成密鑰,-t 表示指定生成的密鑰類型,這里是rsa
c)、進入~/.ssh 目錄下,將 id_rsa.pub 復制為 authorized_keys,即把公鑰加入到授權的key中。
cd ~/.ssh
cp id_rsa.pub authorized_keys
d)將本機公鑰發給所有其他機器
這里以slave2為例:
scp id_rsa.pub hadoop@master:~/.ssh/slave2_key
中途可能會提示讓你輸入對方主機的密碼,輸入之后就會提示成功發送。
所有機器完成此步驟后,在每台機器~/.ssh 目錄下都會有其他所有機器發送來的公鑰。
例如在執行完上面的命令后,此在master主機的~/.ssh/目錄下會多出個slave2_key:
e)將收集到的所有公鑰添加到 authorized_keys中
例如:上面master收到了slave2發來的slave2_key后,把其添加到authorized_keys中
cat slave2_key >> authorized_keys
f) ssh登錄
對於兩台主機第一次 ssh 連接,需要確認 yes,很重要,必須確保集群所有機器相互 ssh連接過,否則后面 hadoop 安裝會出問題。
以 master 為例
此時你已經登錄到別人的機器了,hadoop@master 變為 hadoop@slave2,可以對slave2機器進行操作了。
exit
注意必須要退出,否則你后面做的所有操作都是在其他人的機器上。
5)安裝Hadoop
我這里安裝的版本為:hadoop-1.2.0.tar.gz 也可以到官網下載其他版本。
安裝步驟如下:
a):在/opt 目錄下建立 hadoop 目錄,把 hadoop-1.2.0.tar.gz 拷貝到/opt/hadoop 目錄下,然后解壓
sudo mkdir /opt/hadoop
sudo cp hadoop-1.2.0.tar.gz /opt/hadoop
cd /opt/hadoop
sudo tar –zxvf hadoop-1.2.0.tar.gz
cd hadoop-1.2.0
b) : 配置Hadoop
(1)指定JDK的安裝位置:
編輯 conf/hadoop-env.sh 文件,把 JAVA_HOME 設置成 Java 安裝根路徑,如下:
export JAVA_HOME=/usr/lib/jdk1.6.0_38 ,記住把 export 前面的#去掉
(2)配置conf/目錄下的core-site.xml文件,這里配置的是HDFS的地址和端口號:
配置之前請先在/opt/hadoop 目錄下建立 tmp 文件夾:sudo mkdir /opt/hadoop/tmp
#core-site.xml
1 <configuration> 2 <property> 3 <name>hadoop.tmp.dir</name> 4 <value>/opt/hadoop/tmp</value> 5 <description>A base for other temporary directories.</description> 6 </property> 7 <!-- file system properties --> 8 <property> 9 <name>fs.default.name</name> 10 <value>hdfs://master:9000</value> 11 </property> 12 </configuration>
(3)配置conf/目錄下的 hdfs-site.xml文件:
配置之前新建目錄 /opt/hadoop/hdfs :sudo mkdir /opt/hadoop/hdfs
#hdfs-site.xml
1 <configuration> 2 <property> 3 <name>dfs.replication</name> 4 <value>1</value> #這里1是數據副本數量,默認是3,我這里寫成1,因為我只用了1個datacode,slave2 5 </property> 6 <property> 7 <name>dfs.name.dir</name> 8 <value>/opt/hadoop/hdfs/name</value> 9 </property> 10 <property> 11 <name>dfs.data.dir</name> 12 <value>/opt/hadoop/hdfs/data</value> 13 </property> 14 </configuration>
(4)配置 conf/mapred-site.xml
這里是配置MapReduce的配置文件,配置JobTracker的地址和端口
# conf/mapred-site.xml
1 <configuration> 2 <property> 3 <name>mapred.job.tracker</name> 4 <value>master:9001</value> 5 </property> 6 </configuration>
(5)配置 conf/masters 和 conf/slaves 來設置主從節點,注意最好使用主機名,並且保證各節點之間可以通過主機名可以互相訪問,每個主機名一行:
我這里的 conf/masters內容為:
master
conf/slaves內容為:
slave2
(6)提升 hadoop 權限,這里因為安裝 hadoop 需要足夠高的權限,所以一個簡便方法是將整個 hadoop 文件提升至 777 權限:
sudo chmod 777 -R /opt/hadoop
對每台機器都進行上述操作。
6)啟動hadoop
下面操作在master主機上進行 a)首先格式化hadoop:
./bin/hadoop namenode -format
b)啟動hadoop
./bin/start-all.sh 啟動提示如下:
從上圖中可以看出是先啟動了namenode,然后是啟動datanode,再啟動secondarynamenode,最后啟動taskracker.
c)驗證方式
1)用命令查看集群狀態:./bin/hadoop dfsadmin –report
(2)也可以用java自帶jps查看進程:
在master主機上查看結果如下:
也可以在slave主機上用jps查看下TaskTracker和DataNode是否被啟動
(3)登錄http://master:50070和http://master:50030查看集群狀態
http://master:50070狀態如下:
http://master:50030狀態如下:
可以看出啟動了一個datanode,因為我這里就只有一個slave2,如果多台主機組成集群,狀態更明顯。
d)關閉hadoop
./bin/stop-all.sh
先關閉了jobtracker,其次關閉slave2上的tasktracker,然后關閉namenode,關閉datanode,最后關閉secondarynamenode