基於Ubuntu12.04+hadoop1.2.0 的hadoop集羣搭建

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/*

發佈了13 篇原創文章 · 獲贊 9 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章