VirtualBox環(huán)境下基于多臺ubuntu虛擬機的Hadoop分布式計算環(huán)境搭建
作者:李磊?beginner_Lee
完成時間:2011-5-23 12:15
版本:v2.0
摘要:本文介紹了在VirtualBox下安裝3臺ubuntu虛擬機,并搭建Hadoop環(huán)境的基本步驟贡这,最后運行了Hadoop自帶example中的wordcount例程架曹,可以作為初學(xué)者的入門教材艺演。
備注:原創(chuàng)作品诲侮,首發(fā)blog.csdn.net/beginner_Lee缓淹,如有轉(zhuǎn)載敬請注明捷绒。
環(huán)境:
主機:ubuntu11.04
VirtualBox版本:4.0.6 r71344
ubuntu虛擬機版本:ubuntu11.04
ubuntu虛擬機jdk版本:jdk-1.6.0_25
ubuntu虛擬機hadoop版本:hadoop-0.20.2
關(guān)鍵詞:Hadoop袄友,wordcount担败,ssh
總體概述要在單獨的一臺計算機上實現(xiàn)Hadoop多節(jié)點分布式計算昔穴,需要通過虛擬機建立多個主機,鑒于VirtualBox的大小只是VMware的十分之一提前,我選擇了前者吗货。依次完成新建虛擬機、安裝ssh狈网、配置密鑰實現(xiàn)無密碼訪問宙搬、安裝jdk、安裝hadoop并配置后孙援,就可以運行wordcount來見識一下了不起的東西了害淤!
詳細步驟
安裝虛擬機首先要在vbox中建立ubuntu系統(tǒng),無論主機的操作系統(tǒng)是windows還是linux都沒關(guān)系拓售,我們之后進行的所有操作都只在虛擬機的ubuntu中進行窥摄。由于是在虛擬機中安裝,就沒有硬盤安裝ubuntu那樣麻煩了础淤。上官網(wǎng)把ubuntu10.04LTS.iso下好崭放,放在本地文件夾中,啟動vbox鸽凶,新建一個子os币砂,選項都很簡單,網(wǎng)卡設(shè)置為host-only玻侥,從之前下載的iso鏡像啟動决摧。啟動后的安裝步驟在這里不再贅述,如有疑問請參照我之前的一篇文章。當?shù)谝粋€虛擬機建好后掌桩,不要使用同樣的方法建立第二個ubuntu系統(tǒng)边锁,vbox為我們提供了簡便的復(fù)制方法,在Terminal中輸入sudo vboxmanage clonevdi [source.vdi] [destination.vdi];就可以完全克隆一個os波岛,之后new一個os茅坛,在選擇硬盤那里找到剛clone的destination.vdi作為硬盤即可。我們用這種方法建立3臺虛擬機则拷,分別命名為UB01贡蓖,UB02和UB03,它們的用戶名必須一致煌茬,這里設(shè)置為vbox斥铺,為了簡單,密碼也統(tǒng)一設(shè)定為vbox坛善。進行到這里仅父,可以用ifconfig查看三臺虛擬機的ip地址,正常的話它們的ip各不相同浑吟,且相互之間可以ping通笙纤,到這里就完成了第一步。
安裝配置ssh僅僅能ping通還是不夠的组力,為了完成分布式計算系統(tǒng)省容,需要三臺機器相互之間可以無密碼訪問(或者是master可以無密碼訪問2個slave)。首先在三臺虛擬機上安裝ssh-openserver
sudo apt-get install ssh rsync完成后燎字,在個人目錄/home/vbox/下新建.ssh文件夾腥椒,在.ssh中執(zhí)行
ssh-keygen -t rsa系統(tǒng)會問你一些配置,由于是初次實驗候衍,不需要這些內(nèi)容笼蛛,點回車繼續(xù)下去即可。完成后會在.ssh/下生成id_rsa和id_isa.pub兩個文件蛉鹿,三臺機器做同樣處理滨砍。忘了一件事,需要配置三臺機器的別名妖异,這樣就不用通過ip互訪了惋戏,打開/etc/hosts,清空里面的內(nèi)容他膳,寫入
127.0.0.1localhostlocalhost.localdomainlocalhost
192.168.56.101UB01UB01.localdomainUB01
192.168.56.102UB02
192.168.56.103UB03對于UB01按如上書寫响逢,對于UB02如下,UB03則可一并推出(這里的每一個ip地址都應(yīng)該是ifconfig后看到的棕孙,因機而異)
127.0.0.1localhostlocalhost.localdomainlocalhost
192.168.56.101UB01
192.168.56.102UB02UB02.localdomainUB02
192.168.56.103UB03設(shè)置完別名舔亭,可以相互ping一下看看是否生效些膨,這里ping的對象就不是ip地址而是別名了。接下來把它們的密鑰相互交換钦铺,如在UB01中執(zhí)行
scp ~/.ssh/id_isa.pub?vbox@UB02:/home/vbox/.ssh/id_isa.pub.UB01
scp ~/.ssh/id_isa.pub?vbox@UB03:/home/vbox/.ssh/id_isa.pub.UB01這樣做的目的是把UB01的密鑰交給UB02和UB03傀蓉,對UB02和UB03做同樣處理,完成后每一個機器的/.ssh/中應(yīng)該有3個密鑰职抡,一個是自己的,另兩個是別人的误甚,把自己的密鑰連同別人的兩個密鑰加到授權(quán)密鑰中(對UB01)
cat id_isa.pub >> authorized_keys;
cat id_isa.pub.UB02 >> authorized_keys;
cat id_isa.pub.UB03 >> authorized_keys;對其它兩臺機器做同樣處理缚甩。接下來檢驗相互之間是否可以通過ssh實現(xiàn)無密碼訪問,在終端輸入(對UB01)
ssh UB02;
ssh UB03;訪問成功會現(xiàn)實歡迎信息窑邦,初次訪問需要yes擅威,之后就可以不直接訪問了。
安裝jdk在ubuntu系統(tǒng)中安裝jdk的方法我只簡述一下冈钦,有困難者請google之郊丛,網(wǎng)絡(luò)上資源多多。首先下載對應(yīng)版本的jdk瞧筛,下載完成后把.bin包移動到個人目錄/home/vbox/厉熟,執(zhí)行
chmod u+x jdk-a.b.c.bin;
sudo -s ./jdk-a.b.c.bin;等待安裝完成,會在當前路徑生成jdk目錄较幌,接下來設(shè)置環(huán)境變量揍瑟,在/etc/profile/中添加JAVA_HOME、JRE_HOME乍炉、CLASSPATH和PATH的值绢片,reboot后在Terminal輸入java -version會看到版本信息,證明安裝成功岛琼。為了備忘底循,環(huán)境變量的配置還是寫在下邊吧
JAVA_HOME=/home/vbox/jdk1.6.0_25
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
expoet PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
安裝hadoop將下載到的hadoop-0.20.2.tar.gz移動到個人目錄/home/vbox/,執(zhí)行安裝操作
tar -xzvf hadoop-0.20.2.tar.gz會在當前路徑生成hadoop文件夾槐瑞,接著修改文件夾所有者
chown vbox:vbox hadoop-0.20.2隨后把hadoop的環(huán)境變量加入到/etc/profile中熙涤,添加如下內(nèi)容
export HADOOP_HOME=/home/vbox/hadoop-0.20.2
export PATH=$HADOOP_HOME/bin:$PATH接下來需要修改hadoop/conf/目錄下的配置文件,共有6個文件需要修改困檩,分別是masters灭袁、slaves、core-site.xml窗看、mapred-site.xml茸歧、hdfs-site.xml、hadoop-env.sh显沈,修改如下文件masters
UB01文件slaves
UB02
UB03文件core-site.xml
hadoop.tmp.dir
/home/vbox/tmp
As you like
fs.default.name
hdfs://UB01:9000
文件mapred-site.xml
mapred.job.tracker
UB01:9001
文件hdfs-site.xml
dfs.replication
1
文件hadoop-env.sh在末尾添加
export JAVA_HOME=/home/vbox/jdk1.6.0_25說明幾個地方软瞎,以上幾個文件中具體的版本號逢唤、路徑與ip地址要根據(jù)各自虛擬機信息區(qū)別配置,不要把我的ip抄到你的文件里涤浇,沒用的鳖藕。注意hdfs-site.xml中設(shè)定為1的value是最小節(jié)點數(shù),之前為3只锭,會出現(xiàn)2個slave運行不能的情況著恩,以上配置信息對UB01、UB02和UB03完全一致蜻展。
執(zhí)行wordcount例程進入/home/vbox/hadoop/目錄喉誊,格式化文件系統(tǒng)并啟動所有服務(wù)
hadoop namenode -format;
start-all.sh編寫輸入文件,建立input輸入并將文件寫入input
echo “It is such a boring thing” > input_test_01;
echo “But I like it” > input_test_02;
hadoop fs -mkdir input;
hadoop fs?-copyFormatLocal input_test_0* input;執(zhí)行wordcount并察看計數(shù)結(jié)果
hadoop jar hadoop-0.20.2-examples.jar wordcount input output;
hadoop fs -cat output/part-r-00000;會在Terminal中看到如下wordcount信息
51
Damn!1
NAT1
...注意纵顾,在第一次執(zhí)行wordcount后伍茄,input和output文件依舊存在,若再次執(zhí)行wordcount會出現(xiàn)無法響應(yīng)的錯誤施逾,需要通過以下的命令刪除input與output敷矫,系統(tǒng)才會正常工作。使用xxxxxx命令關(guān)閉防火墻汉额。
hadoop dfs -rmr input output
觀察運行結(jié)果曹仗,有三種方式通過web方式?http://UB01:50070通過java方式Terminal輸入jps監(jiān)測HDFS方式?Terminal輸入hadoop dfsadmin -report
過程截圖略
常用hadoop命令
hadoop namenode -format格式化節(jié)點
start-all.sh開啟所有服務(wù)
hadoop dfsadmin -report察看報告
hadoop fs -mkdire input新建輸入目錄
hadoop fs -ls/列出文件系統(tǒng)
hadoopfs -put conf input將conf目錄put到input目錄
hadoop fs -rmr output刪除output目錄
hadoop jar hadoop-0.20.2-examples.jar wordcount input output運行wordcount
hadoop fs -get ouput /home/output拷貝到本地
home/cat otuput/*顯示
hadoop fs -copyToLocal input /home/vbox拷貝,同fs -get
Some tips
Q:datanode個數(shù)為0或者小于預(yù)設(shè)值
A:刪除各個/home/vbox/tmp文件夾
Q:將各個節(jié)點的id_rsa.pub相互追加后無法實現(xiàn)ssh無密碼互訪
A:先搞二個互訪蠕搜,再一個一個加上去
Q:3臺ubuntu11.04的虛擬機慢死了
A:換成10.04
2012-10-25 15:291樓
"有3個密鑰,一個是自己的讥脐,另兩個是別人的遭居,把自己的密鑰連同別人的兩個密鑰加到授權(quán)密鑰中(對UB01)
cat id_isa.pub >> authorized_keys;
cat id_isa.pub.UB02 >> authorized_keys;
cat id_isa.pub.UB03 >> authorized_keys;
對其它兩臺機器做同樣處理。接下來檢驗相互之間是否可以通過ssh實現(xiàn)無密碼訪問旬渠,在終端輸入(對UB01)
ssh UB02;
ssh UB03;
訪問成功會現(xiàn)實歡迎信息俱萍,初次訪問需要yes,之后就可以不直接訪問了告丢。"看上去枪蘑,上面"cat id_isa.pub.UB03 >> authorized_keys;"后面似乎有分號或冒號,但實際上應(yīng)該沒有吧岖免?另外岳颇,若說安裝不了openssh-server,那么,應(yīng)該試圖改一下軟件源颅湘,然后 sudo apt-get update