Ubuntu12.04搭建hadoop1.2集羣
轉載請註明出處
(一) 環境準備
首先準備5臺電腦。我這裏使用的是OpenStack虛擬出來的五臺電腦。每個實例安裝的系統是Ubuntu 12.04.2 LTS,虛擬配置如下:
(二) 修改機器名
打開/etc/hostname文件;
sudo vi/etc/hostname
分別改爲hadoop1、hadoop2和hadoop3等等
(三) 域名和ip配置
設置的IP分別是:
192.168.10.1 hadoop1
192.168.10.2 hadoop2
192.168.10.3 hadoop3
192.168.10.4 hadoop4
192.168.10.5 hadoop5
然後使用vi/etc/hosts修改各個主機的/etc/hosts中的內容,將上邊的內容編緝進去。注意:
(1)所有節點都需要配置成上述內容。如果不配置,此後的工作將使用IP操作,比較繁瑣。擴展性比較差。
(2)需要使用root權限。如果沒有root權限,可以使用:sudovi /etc/hosts命令進入編輯。
(四) 創建用戶,分配權限
(1)先創建hadoop用戶組:sudo addgrouphadoop
(2)然後創建用戶hadoop:sudo adduser-ingroup hadoop hadoop
注:
(i)當你沒有root權限的時候,所有的命令可以加上sudo前綴。
(ii)在centos 和 redhat下直接創建用戶就行,會自動生成相關的用戶組和相關文件,而ubuntu下直接創建用戶,創建的用戶沒有根目錄。
(3)給hadoop用戶添加權限,打開/etc/sudoers文件;
sudo vi /etc/sudoers
按回車鍵後就會打開/etc/sudoers文件了,給hadoop用戶賦予root用戶同樣的權限。
在root ALL=(ALL:ALL) ALL下添加下面的內容:
hadoop ALL=(ALL:ALL) ALL
注意:
(i)千萬不要寫錯了。這個文件一旦修改錯誤,後果嚴重。這裏創建的用戶名也可以不是hadoop,比如ubuntu等都可以。ubuntu系統會在/home目錄下生成一個以用戶名命名的文件夾。
(ii)所有虛擬機上,都必須使用相同的用戶名。
(iii)如果沒有權限修改/etc/sudoers。可以輸入sudovisudo 即可,此命令直接修改該文件,按照提示修改保存和推出。
(五) 本機(hadoop1)和子節點(son..)安裝ssh服務
主要爲ubuntu安裝,centos和redhat系統自帶。ubuntu下:
sudo apt-get installssh openssh-server
(六) 建立ssh無密碼登錄環境
做這一步之前首先建議所有的機子全部轉換爲hadoop用戶,以防出現權限問題的干擾。
所有機器執行一下操作:
(1)ssh生成密鑰有rsa和dsa兩種生成方式,默認情況下采用rsa方式。
創建ssh-key,這裏我們採用rsa方式;
ssh-keygen -t rsa -P ""
(注:回車後會在~/.ssh/下生成兩個文件:id_rsa和id_rsa.pub這兩個文件是成對出現的)
(2)切換到~/.ssh/目錄下,然後將id_rsa.pub追加到authorized_keys授權文件中,開始是沒有authorized_keys文件的;
cd ~/.ssh
cat id_rsa.pub>> authorized_keys
(3)用root用戶登錄服務器修改SSH配置文件"/etc/ssh/sshd_config"的下列內容。
RSAAuthenticationyes
PubkeyAuthenticationyes
AuthorizedKeysFile %h/.ssh/authorized_keys
設置完之後記得重啓SSH服務,才能使剛纔設置有效。(centos裏的命令:service sshd restart)但這裏是ubuntu裏。輸入命令:
/etc/init.d/sshrestart
退出root登錄,使用hadoop普通用戶驗證是否成功。
ssh localhost。
如果無錯誤提示,本地無密碼登錄就配置成功!
(七) 配置集羣無密碼登錄
首先配置Slave節點登錄MASTER比較方便,即hadoop2~hadoop5實現無密碼訪問Master節點。
以hadoop2爲例子:
(1) 遠程複製文件"id_rsa.pub",目標位置是主機hadoop1的用戶爲"hadoop"的"/home/hadoop/":
scp~/.ssh/id_rsa.pub hadoop@hadoop1:~/
因爲並沒有建立起無密碼連接,所以在連接時,仍然要提示輸入輸入Hadoop1服務器用戶hadoop的密碼。爲了確保確實已經把文件傳過去了,登錄Hadoop1查看"/home/hadoop/"下是否存在這個文件。
(2) 把剛複製來的Hadoop2的公鑰追加到Hadoop1 的授權文件"authorized_keys"中去。
cat~/id_rsa.pub >> ~/.ssh/authorized_keys
必要的話,使用下面命令進行追加並修改"authorized_keys"文件權限:
chmod 600~/.ssh/authorized_keys
記得把"/home/hadoop/"目錄下的"id_rsa.pub"文件刪除掉。
rm –r~/id_rsa.pub
(3) 重複上面的步驟把剩餘的Slave服務器(hadoop3~hadoop5)進行配置。這樣,我們就完成了"配置Slave無密碼登錄Master".
(4) 用hadoop用戶登錄到MASTER節點,就是主機hadoop1。輸入命令:
scpauthorized_keys hadoop@hadoop2:~/.ssh/
分別修改命令中的hadoop2爲hadoop3到hadoop5並執行。此命令是複製主節點authorized_keys到其餘各個節點的.ssh目錄。
在hadoop1主機,登錄其餘各個節點。輸入命令:
ssh hadoop2
如果登錄失敗。可能嘗試一下幾個方法:
a) 刪除各個節點的known_hosts,輸入命令:rm~/.ssh/known_hosts。再連接看看。
b) 如果出現一下錯誤提示,注意紅色提示。那我們可以按照提示,輸入命令,比如:
ssh-keygen -f"/home/ubuntu/.ssh/known_hosts" -R hadoop2
此命令的hadoop2,就是連接目標,如果提示給的是 ip地址,就要輸入ip地址。
c) 其實,只要各個節點曾經連接成功就可以。在hadoop運行過程中,可以使用hadoop-daemon.sh start datanode 等命令動態的將當前節點加入到集羣中。
(八) 軟件準備
下載java安裝包。有以下幾種方式:
(1)本機可以聯網的話:sudo apt-get installsun-java6-jdk #安裝JAVA6環境#
(2)如果不能聯網,可以先用ftp上傳到ubuntu。爲了簡化操作,我把jdk安裝包的名字簡化爲jdk6.bin。你下載的可能是“jdk-6u45-linux-i586.bin”之類的名字。
(i)使用xshell 4.0的操作是:
(ii)輸入命令,上傳下載好的jdk1.6 64位FORlinux軟件包。
(iii)重複上述步驟,爲hadoop2到hadoop5上傳jdk安裝包。也可以使用遠程複製命令,將數據發送給其他Slave節點:
scp ~/jdk6.bin hadoop@hadoop2:~/
(九) 安裝JDK,以hadoop1爲例,其他雷同。
(1) 首先用root權限或者sudo命令,在"/usr"下創建"java"文件夾,
sudo mkdir /usr/java
(2) 再把"/home/hadoop/"下的"jdk6.bin"複製到"/usr/java"文件夾中。
cp /home/hadoop/jdk6.bin /usr/java
(3) 切換到java目錄,修改jdk6.bin的權限,在這裏修改徹底一下,
sudo chmod 777 jdk6.bin
注意:讀、寫、運行三項權限可以用數字表示,就是r=4,w=2,x=1。777就是-rwxrwxrwx,-rw-r--r--就是644。
(4) 執行安裝,sudo ./jdk6.bin後查看"/usr/java"下面會發現多了一個名爲"jdk1.6.x_xx"文件夾,說明JDK安裝結束。
(5) 爲了路徑設置方便,給此文件夾改名:sudo mv jdk1.6.x_xx jdk6
(6) 刪除"jdk-6.bin"文件,sudo rm -r jdk-6.bin
(7) "配置環境變量":
sudo vi /etc/profile
在文件最後添加:
# set javaenvironment
exportJAVA_HOME=/usr/java/jdk6
exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/
(8) 保存並退出,執行下面命令使其配置立即生效。
source/etc/profile
(9) 配置完畢並生效後,用下面命令判斷是否成功。
java –version
(10) 重複上述步驟,爲hadoop2到hadoop5安裝jdk。
(十) 準備hadoop1.2安裝包
(1) 上傳hadoop1.2.0安裝包。注意文件名必須正確。
在本文實驗環節中,下圖/home/ubuntu 應該爲home/hadoop, ubuntu是我的hadoop用戶名。
(十一) 爲hadoop1安裝hadoop
(1) 複製hadoop1.2.0安裝包,到usr目錄
sudo cp ~/hadoop-1.2.0.tar.gz /usr
(2) 切換目錄
cd /usr
(3) 解壓縮安裝包:
sudo tar -zxvf hadoop-1.2.0.tar.gz
(4) 修改文件名:
sudo mv hadoop-1.2.0 hadoop
(5) 修改hadoop目錄權限:
sudo chown -R hadoop:hadoop hadoop
(6) 刪除安裝包:
sudo rm -rf hadoop-1.2.0.tar.gz
(7) 然後切換到到hadoop目錄下的conf目錄
cd /usr/hadoop
(8) 編輯hadoop-env.sh
sudo vi hadoop-env.sh
配置JAVA_HOME爲你上面配置的JAVA_HOME。
export JAVA_HOME=/usr/java/jdk6
(9) 編輯core-site.xml:
sudo vi core-site.xml
在<configuration>標籤內,添加配置信息如下:
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp/ </value>
<description>A base for othertemporarydirectories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop1:9000</value>
</property>
(10)修改hdfs-site.xml:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
(11)在mapred-site.xml中添加內容:
<property>
<name>mapred.job.tracker</name>
<value>hadoop1:9001</value>
</property>
(12)修改Masters:
hadoop1
(13)修改slaves:
hadoop2
hadoop3
hadoop4
hadoop5
重複上述步驟,爲其他節點做相同的配置。如果有root權限,也可以使用scp遠程複製hadoop到其他節點。
(十二) 啓動hadoop
(1) 在hadoop1主機上的hadoop安裝目錄下的bin目錄下,執行格式化。
hadoop namenode-format
(2) 啓動服務:
start-all.sh
(3) 會按先後順序啓動,啓動完成後,分別到各個節點上使用jps查看進程啓動情況。
(十三) 運行示例
(1) 第一步:創建一個目錄,作爲數據輸入源目錄。命令行輸入:
mkdir input
(2) 第二步:在input裏創建兩個文件,分別爲test1 、test2命令行輸入:
cd input
echo"hello world" >test1.txt
echo "iam hadoop, hello">test2.txt
(3) 第三步:退回上級目錄,把本地input目錄複製到HDFS的根目錄下,重命名爲 in。
cd ../
hadoop dfs-put input in
(4) 第四步:執行wordcount實例。注意,我的hadoop的版本是1.2.0,裏邊的文件名也和以前的版本不一樣 hadoop-examples-1.2.0.jar另外,如果之前執行過這個命令,需要先刪除hdfs系統目錄裏的out目錄。
hadoop dfs-rmr out
hadoopjar hadoop-examples-1.1.2.jarwordcount in out
(5) 第五步:執行完畢後,可以查看HDFS上的處理結果。
hadoop dfs-cat out/*
(6) 另外,也可以把輸出文件out從HDFS複製到本地文件系統,
hadoop dfs-get out output
cat output/*