【正文】
Fedora11namenode(master):cloud1()datanode(slave):cloudx()(x=2~7) 機(jī)器互連(1)用root用戶登錄(2)修改/etc/hosts文件 cloud1 cloud2 cloud3 cloud4 cloud5 cloud6 cloud7 (3)ping測(cè)試: ping cloud5 PING cloud5 () 56(84) bytes of data. 64 bytes from cloud5 (): icmp_seq=1 ttl=64 time= ms 64 bytes from cloud5 (): icmp_seq=2 ttl=64 time= ms 其他datanode機(jī)器只要保證和namenode能ping通就可以了。新建系統(tǒng)hadoop用戶Hadoop要求所有機(jī)器上hadoopde部署目錄結(jié)構(gòu)要相同,并且都有一個(gè)相同de用戶名de帳戶,所以需要每臺(tái)機(jī)器見(jiàn)一個(gè)同名de用戶。此處,Hadoop用戶統(tǒng)一為:cloud,密碼:cloud,默認(rèn)路徑/home/cloud/。SSH設(shè)置Hadoop需要namenode到datanodede無(wú)密碼SSH,所以需要設(shè)置namenode到其他datanodede無(wú)密碼公鑰認(rèn)證方式deSSH。(1)首先用cloud用戶登錄每臺(tái)機(jī)器(包括namenode),在/home/cloud/,并將目錄權(quán)設(shè)為:drwxrxrx,設(shè)置命令:$chmod 755 .ssh在namenode執(zhí)行入如下命令(用新建decloud 用戶登錄):輸入sshkeygen t rsa后,終端顯示:Enter file in which to save the key (/home/cloud/.ssh/id_rsa):Enter passphrase (empty for no passphrase): Enter same passphrase again:(2)這三個(gè)項(xiàng)目都直接回車。(3)(也包括本機(jī))de/home/cloud/.ssh/authorized_keys文件中,如果機(jī)器上已經(jīng)有authorized_keys這個(gè)文件了,如果沒(méi)有authorized_keys這個(gè)文件,直接cp或者scp就好了,下面de操作假設(shè)各個(gè)機(jī)器上都沒(méi)有authorized_keys文件。具體命令:在namenode執(zhí)行(用新建decloud 用戶登錄):$cp /home/cloud/.ssh/ /home/cloud/.ssh/authorized_keys scp authorized_keys cloudx:/home/cloud/.ssh/(x=2~7)此處descp就是通過(guò)ssh進(jìn)行遠(yuǎn)程copy,此處需要輸入遠(yuǎn)程主機(jī)de密碼,即cloudx機(jī)器上 cloud 帳戶de密碼(cloud),當(dāng)然,也可以用其他方法將authorized_keys文件拷貝到其他機(jī)器上。另外幾臺(tái)datanode也一樣拷貝。(4)用cloud 用戶登錄每臺(tái)機(jī)器,修改/home/cloud/.ssh/authorized_keys文件de權(quán)限為:rwr–r–,設(shè)置命令:$cd /home/cloud/.ssh$chmod 644 authorized_keys設(shè)置完成后,測(cè)試一下namenode到各個(gè)節(jié)點(diǎn)dessh鏈接,包括到本機(jī),如果不需要輸入密碼就可以ssh登錄,說(shuō)明設(shè)置成功了。其他機(jī)器一樣測(cè)試。5 、安裝JDK在每臺(tái)機(jī)器deroot用戶下面安裝。(1)下載JDK 。(2)把它存放在root目錄下。(3) 加上執(zhí)行權(quán)限。這樣我們才能運(yùn)行這個(gè)二進(jìn)制文件。chmod a+x (4)執(zhí)行./ 進(jìn)行安裝。./ // (5)。mkdir /usr/java cp r /usr/java/ (6)這樣安裝就完成了,接著我們?cè)O(shè)置環(huán)境變量,修改etc/profile。vi /etc/profile 在最后添加如下代碼。export JAVA_HOME=/usr/java/ export PATH=$PATH :$JAVA_HOME/bin:$JAVA_HOME/jre/bin: export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 注意上面de都是:,而不是。,記得要保存。在命令行中鍵入:source /etc/profile //使環(huán)境變量設(shè)置生效 測(cè)試一下:which java /usr/java/恭喜,JDK配置完成,這樣就可以運(yùn)行你dejava程序了。 安裝Hadoop用 cloud 用戶登錄 namenode,并新建一個(gè)目錄,用于存放所有 hadoop 相關(guān)內(nèi)容。(1)在 /home/hadoop 目 錄 下 新 建 hadoopinstall 下 載 had。存放到namenodedecloud用戶de/home/hadoop/hadoopinstall并解壓縮:tar zxvf (2)考慮到今后升級(jí)以及其他操作de方便性,建議建一個(gè)名稱為 hadoop :ln s hadoop新建目錄:/home/hadoop/hadoopinstall/hadoopconf(3)將/home/hadoop/hadoopinstall/hadoop/,,masters文件拷貝到/home/cloud/hadoopinstall/hadoopconf目錄。(4)在/home/cloud/.bashrc文件中設(shè)置環(huán)境變量$HADOOP_CONF_DIR:export HADOOP_CONF_DIR=$HOME/hadoopinstall/hadoopconf/)Hadoop環(huán)境變量設(shè)置在/home/hadoop/hadoopinstall/hadoop/conf/:export JAVA_HOME=/usr/java/export HADOOP_HOME=/home/hadoop/hadoopinstall/hadoop添加namenode在/home/hadoop/HadoopInstall/hadoop/conf/masters文件中設(shè)置namenode:cloud1添加datanode在/home/hadoop/HadoopInstall/hadoop/conf/slaves文件中設(shè)置namenode:cloud2 cloud3 cloud4 cloud5 cloud6 cloud7 在/home/hadoop/HadoopInstall/hadoop/conf/目錄下。1在/home/hadoop/HadoopInstall/hadoop/conf/目錄下。configuration property name/name valuehdfs://cloud1//value /property /configuration 1在/home/hadoop/HadoopInstall/hadoop/conf/目錄下。configuration property name/name valuecloud1:9001/value /property configuration 1部署datanode節(jié)點(diǎn)將namenode上到文件發(fā)送到其他datanode中。Scp r /home/cloud/hadoopinstall cloudx:/home/cloud/(x=2~7)1格式化namenode進(jìn)入/home/hadoop/HadoopInstall/hadoop/bin目錄,格式化系統(tǒng)namenode:[cloud@cloud1 bin]$ ./hadoop namenode –format1 測(cè)試hadoop在/home/hadoop/HadoopInstall/:* 啟動(dòng)所有deHadoop守護(hù),包括namenode, datanode,jobtracker,tasktrack,secondarynamenode。* 停止所有deHadoop。* 啟動(dòng)Map/Reduce守護(hù),包括Jobtracker和Tasktrack。* 停止Map/Reduce守護(hù)。* 啟動(dòng)Hadoop DFS守護(hù),Namenode和Datanode。* 停止DFS守護(hù) bin/hadoop ???到 localhost: no datanode to stop, 說(shuō) 明 datanode 服 務(wù) 沒(méi) 有 啟 動(dòng)。:20080318 10:20:57,180 ERROR : : Inpatible namespaceIDs in /tmp/hadoopzxf/dfs/data: namenode namespaceID = 611295554。 datanode namespaceID = 1744145012 (:298) (:142) (:236)at .init(:162) (:2510)at (:2454)(:2475)at (:2671) property name/name value/home/zxf/hadoop/tmp//value /propertyde屬性,重新namenode format。重新啟動(dòng),發(fā)現(xiàn)系統(tǒng)又工作正常。再次datanode format,再啟動(dòng)系統(tǒng),又出現(xiàn)datanode啟動(dòng)失敗,大概明白了原因:每次namenod format會(huì)重新創(chuàng)建一個(gè)namenodeId,而tmp/dfs/data下包含了上次format下deid,namenode format清空了namenode下de數(shù)據(jù),但是沒(méi)有晴空datanode下de數(shù)據(jù),導(dǎo)致啟動(dòng)時(shí)失敗,所要做de就是每次fotmat前,清空tmp一下de所有目錄,即可啟動(dòng)正常。在按照quickstart做時(shí)需注意。后臺(tái)在網(wǎng)上查到了這個(gè)問(wèn)題,應(yīng)該是一個(gè)bug,到現(xiàn)在還沒(méi)有修復(fù),以下是顧忌deDatanodes should be reformatted whenever the namenode is. I see 2 approaches here:1) In order to reformat the cluster we call startdfs format or make a special script formatdfsThis would format the cluster ponents all together. The question is whether it should startthe cluster after formatting?2) Format the namenode only. When datanodes connect to the namenode it will tell them toformat their storage directories if it sees that the namespace is empty and its cTime=0.The drawback of this approach is that we can loose blocks of a datanode from another clusterif it connects by mistake to the empty namenode.至此a singlenode in a pseudodistributed mode運(yùn)行成功no tasktracker to stop ,no datanode to stop問(wèn)題de原因是hadoop在stopde時(shí)候依據(jù)de是datanode上 demapred和dfs進(jìn)程號(hào)。而默認(rèn)de進(jìn)程號(hào)保存在/tmp下,linux默認(rèn)會(huì)每隔一段時(shí)間(一般是一個(gè)月或者7天左右)去刪除這個(gè)目錄下de文件。因 兩個(gè)文件后,namenode 自然就找不到datanode上de這兩個(gè)進(jìn)程了。在配置文件中deexport HADOOP_PID_DIR可以解決這個(gè)問(wèn)題 (1)在重新格式化一個(gè)新de分布式文件時(shí), 持久存儲(chǔ)名字空間及事務(wù)日志de本地文件系統(tǒng)路徑刪除, DataNode 存放塊數(shù)據(jù)de本地文件系統(tǒng)路徑de目錄也刪除。如本此配置就是在NameNode上刪除/home/hadoop/NameData,在DataNode上刪除/home/hadoop/DataNode1和/home/hadoop/DataNode2。 這是因?yàn)镠adoop在格式化一個(gè)新de分布式文件系統(tǒng)時(shí),每個(gè)存儲(chǔ)de名字空間都對(duì)應(yīng)了建立時(shí)間de那個(gè)版本(可以查看/home/hadoop /NameData/current目錄下deVERSION文件,上面記錄了版本信息),在重新格式化新de分布式系統(tǒng)文件時(shí),最好先刪除NameData 目錄。這樣才可以使namedode和datanode記錄de信息版本對(duì)應(yīng)。 否則會(huì)出現(xiàn)能夠啟動(dòng)datanode,但無(wú)法訪問(wèn),也無(wú)法結(jié)束de錯(cuò)誤,如下: hadoop@HadoopHost:~/HadoopInstall/hadoop$ bin/stopping jobtracker.**2: stopping tasktracker.**3: stopping tasktrackersto