一、安裝Linux操作系統
安裝過程略,安裝完後對系統做一下更新:$sudo apt-get update
二、修改機器名,並與IP地址綁定
每當Ubuntu安裝成功時,我們的機器名都默認爲:ubuntu ,但爲了以後集羣中能夠容易分辨各臺服務器,需要給每臺機器取個不同的名字。機器名由 /etc/hostname文件決定。步驟如下:
1、$ sudo gedit /etc/hostname,將/etc/hostname文件中的ubuntu改爲master。再$ sudo gedit /etc/hosts,將裏面的名字也改爲master,重啓系統後纔會生效,或者$sudo source /etc/hostname更新一下文件。其他節點一樣修改;
2、測試兩臺機器之間是否連通:$ ifconfig 查看機器IP地址,$ping 192.168.160.132,並在所有的機器上的"/etc/hosts"文件中都要添加如下內容:
192.168.160.128 master
192.168.160.132 slave
3、$Ping slave 看看是否綁定成功;
三、在Ubuntu下安裝JDK
1、將jdk-6u25-linux-i586.bin拷貝到/home/jay目錄下:執行命令jay@master:~$ chmod u+x jdk-6u25-linux-i586.bin,將bin文件修改爲可執行文件;
2、運行:$./jdk-6u25-linux-i586.bin,安裝文件;
3、打開文件:$sudo gedit /etc/profile 添加如下信息:
export JAVA_HOME=/home/jay/jdk1.6.0_25
export JRE_HOME=/home/jay/jdk1.6.0_25/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
4、然後$source /etc/profile,使文件內容生效;
5、重啓,執行命令:$java -version,查看是否安裝成功。若顯示:
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) Client VM (build 20.0-b11, mixed mode, sharing),則安裝成功。
四、安裝ssh服務
ssh可以實現遠程登錄和管理,是主節點master和各個從幾點slave1、slave2之間可以互相通信,傳輸數據。
1、驗證SSH安裝,在所有節點上都執行$sudo apt-get install ssh,更新安裝;$which ssh、$which sshd、$which ssh-keygen,查看這三個文件是否存在;
2、生成SSH密鑰對:使用主節點上的ssh-keygen來生成一個RSA密鑰對,jay@master:~$ssh-keygen -t rsa;
3、生成授權文件jay@master:~$cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys , $more /home/test/.ssh/id_rsa.pub ,該命令用來查看密鑰(可不執行);
4、將主節點上的公鑰分佈到各從節點:逐一將公鑰複製到每個從節點上,$scp ~/.ssh/id_rsa.pub jay@slave:~/.ssh/192.168.160.128 ;
5、手動登錄到從節點,並設置密鑰爲授權密鑰,如下執行[jay@slave2]$ mkdir ~/.ssh、$chmod 700 ~/.ssh、$mv ~/.ssh/192.168.160.128 ~/.ssh/authorized_keys、$chmod 600 ~/.ssh/authorized_keys;生成該密鑰後,可以嘗試從主節點登錄到目標節點來驗證它的準確性:[jay@master]$ ssh 192.168.160.132.或者[jay@master]$ ssh slave。
SSH通信原理:以namenode到datanode爲例子:Namenode作爲客戶端,要實現無密碼公鑰認證,連接到服務端datanode上時,需要在namenode上生成一個密鑰對,包括一個公鑰和一個私鑰,而後將公鑰發佈到datanode上。當namenode通過ssh連接datanode時,datanode就會生成一個隨機數並用namenode的公鑰對隨機數進行加密,併發送給namenode。namenode收到加密數之後再用私鑰進行解密,並將解密數回傳給datanode,datanode確認解密數無誤之後就允許namenode進行連接了。這就是一個公鑰認證過程,其間不需要用戶手工輸入密碼。重要過程是將客戶端namenode公鑰複製到datanode上。
五、安裝Hadoop
第一步:將hadoop-0.20.1.tar.gz文件拷貝到/home/jay目錄下。
第二步:jay@master:$ tar -xzvf hadoop-0.20.1.tar.gz //將文件解壓。
第三步:jay@master:$ chown jay:jay hadoop-0.20.1//將文件所有者改成jay。
第四步:jay@master:$ sudo gedit /etc/profile進入文件將如下信息加到文件裏:
export HADOOP_HOME=/home/jay/hadoop-0.20.1
export PATH=$HADOOP_HOME/bin:$PATH
第五步:更改conf目錄下的conf/core-site.xml, conf/hdfs-site.xml,conf/mapred-site.xml,conf/hadoop-env.sh,conf/masters,conf/slaves 文件。
a、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit hadoop-env.sh
進入文件加入如下信息:
export JAVA_HOME=/home/jay/jdk1.6.0_25
b、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit masters
進入文件加入如下信息:
192.168.160.128
c、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit slaves
進入文件加入如下信息:
192.168.160.132
d、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit core-site.xml
進入文件加入如下信息:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/jay/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.160.128:9000</value>
</property>
</configuration>
e、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit hdfs-site.xml
進入文件加入如下信息:(replication默認是3,如果不修改,datanode少於三臺就會報錯)。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
f、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit mapred-site.xml
進入文件加入如下信息:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.160.128:9001</value>
</property>
</configuration>
第六步:執行jay@master:~/$ scp hadoop-0.20.1 jay@slave:/home/jay/hadoop-0.20.1 //將文件hadoop-0.20.1拷貝到其它兩個虛擬機上就可以了。
六、在單機上運行hadoop自帶的wordcount程序
第一步:jay@master:~/hadoop-0.20.1/bin/$ hadoop namenode –format //格式化文件系統,新建一個文件系統;
第二步:jay@master:~/hadoop-0.20.1/$ start-all.sh //啓動hadoop的所有守護進程;
第三步:jay@master:~/hadoop-0.20.1/$ jps //查看進程,master虛擬機上的結果。要讓6個守護進程(namenode、datanode、jobtracker、tasktracker、jps、 scendarynamenode)全部啓動纔可以;在slave2 虛擬機上 jay@slave2:~/hadoop-0.20.1/$ jps,slave節點上啓動3個守護進程;
第四步:先在本地磁盤建立兩個輸入文件file01 和file02:執行命令jsj@master:~$ echo “Hello World Bye World” > file01、jsj@master:~$ echo “Hello Hadoop Goodbye Hadoop” > file02
第五步: 先建立個文件夾jay@master:~/hadoop-0.20.1$ hadoop fs -mkdir input;
jay@master:~/hadoop-0.20.1$ bin/hadoop fs -put /home/jay/file1 inputTest//把文件file01和file02放到hdfs文件系統中;
jay@master:~/hadoop-0.20.1$ bin/hadoop jar hadoop-0.20.1-examples.jar wordcount inputTest outputTest //執行wordcount程序。
第六步:jsj@master:~/hadoop-0.20.1$ hadoop fs -cat outputTest/* //查看結果:
Bye 1
Goodbye 1
Hadoop 2
Hello 2
World 2
至此hadoop運行環境已經全部搭建完成。如果要按照此方法搭建請注意每次運行命令的用戶和路徑。
七、其他說明
1、在eclipse中,我們寫完Hadoop的Java程序後,將項目打成一個jar包,放到hadoop的安裝目錄下,便可在Hadoop平臺下運行了。
2、在Eclipse中編寫程序之前,先將Hadoop包加入到Java工程中,步驟如下:
新建一個工程,右鍵--build path--libraries--add library--user library-next--new--ok。點擊剛建立的library--add external jars,加入Hadoop中的jar包即可。
3、Eclipse安裝Hadoop插件方法:
a、在Hadoop-0.20.2包中--contrib--eclipse-plugin--hadoop-0.20.2-eclipse-plugin.jar包放入到Eclipse--plugins中,重啓Eclipse。
b、新建一個工程,file--new--project--Java project--project name--finish。New--class--name--finish。
c、加入Hadoop自帶的jar包:工程上右鍵--build path--configure build path--libraries--add library--user library--next--user library--new--name--ok--add external JARS--Hadoop-0.20.2中的jar包--ok--finish--ok。
d、Eclipse中使用Hadoop:window--open perspective--other--map/reduce。在下方有個大象圖標--右鍵--edit Hadoop location--主機名、用戶名、端口號(和conf配置中一致即可)、IP地址--ok。
e、運行:在項目中run configurations--arguments設置參數--運行,去Java的workplace查看結果。