在Ubuntu11.10下构建hadoop实验环境笔记
1,安裝虛擬機(jī)virtual box,添加虛擬機(jī)hdp1.vdi(網(wǎng)絡(luò)1:nat或bridge, 網(wǎng)絡(luò)2:internal),安裝ubuntu 11.10,添加用戶hadoop作為運(yùn)行hadoop之用戶,并在安裝好后設(shè)置root用戶密碼。
2,在虛擬機(jī)中安裝“增強(qiáng)功能”,重啟后右上角系統(tǒng)菜單“System Settings..."->"Language Support"? 中 "Install / Remove Language..."安裝簡體中文支持, "Keyboard input method system"選ibus. (注:系統(tǒng)panel上的輸入法圖標(biāo)經(jīng)常會消失,可以通過命令: killall ibus-daemon; ibus-daemon -d 重啟ibus顯示)
3,更改apt源:
$ sudo cp /etc/sources.list /etc/sources.list.bak
$ sudo gedit /etc/sources.list
內(nèi)容如下:
deb http://ubuntu.cn99.com/ubuntu/ oneiric main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ oneiric-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ oneiric-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ oneiric-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ oneiric main restricted universe multiversedeb
deb http://mirrors.163.com/ubuntu/ oneiric main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ oneiric main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ oneiric-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ oneiric-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ oneiric-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ oneiric-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ oneiric-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ oneiric-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ oneiric-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ oneiric-updates universe main multiverse restricted
#deb http://tw.archive.ubuntu.com/ubuntu/ oneiric main universe restricted multiverse
#deb-src http://tw.archive.ubuntu.com/ubuntu/ oneiric main universe restricted multiverse
#deb http://tw.archive.ubuntu.com/ubuntu/ oneiric-security universe main multiverse restricted
#deb-src http://tw.archive.ubuntu.com/ubuntu/ oneiric-security universe main multiverse restricted
#deb http://tw.archive.ubuntu.com/ubuntu/ oneiric-updates universe main multiverse restricted
#deb-src http://tw.archive.ubuntu.com/ubuntu/ oneiric-updates universe main multiverse restricted
4,$ sudo apt-get update
5,$ sudo apt-get install vim-gtk, axel, mutliget?? (注:下載工具)
6,$ sudo apt-get install chkconfig sysv-rc-conf? (注:管理系統(tǒng)服務(wù)用)
7,$ sudo apt-get install openjdk-7-jdk rsync openssh-server openssh-client (注:hadoop需用的工具)
這一步可順便配置好java的環(huán)境變量:
$ sudo vi /etc/profile.d/bash_completion.sh, 在文件末尾添加內(nèi)容如下:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib
8,下載hadoop: $ axel http://apache.etoak.com/hadoop/common/hadoop-1.0.1/hadoop_1.0.1-1_i386.deb
9, 安裝hadoop:$ sudo dpkg -i hadoop_1.0.1-1_i386.deb
10,查看hadoop安裝了哪些文件:$ sudo dpkg -L hadoop
11,更改系統(tǒng)網(wǎng)卡2的網(wǎng)絡(luò)配置為;靜態(tài)ip, 地址-> 192.168.0.1 (注:以后其它系統(tǒng)相應(yīng)改為192.168.0.2, 192.168.0.3 ......)
12,更改系統(tǒng)配置:
$ sudo vi /etc/hostname 內(nèi)容為:hdp1 (注:以后其它系統(tǒng)相應(yīng)改為hdp2, hdp3 ......)
$ sudo vi /etc/hosts 增加內(nèi)容:
192.168.0.1???? hdp1
192.168.0.2???? hdp2
192.168.0.3???? hdp3
192.168.0.4???? hdp4
注意:應(yīng)確保hostname和hosts文件設(shè)置的主機(jī)名一致,否則reduce過程無法完成。
13,產(chǎn)生SSH密鑰,實現(xiàn)無密碼安全聯(lián)機(jī):
$ ssh-keygen -t rsa -P ""
$ cd ~/.ssh
$ cp id_ras.pub authorized_keys
$ ssh hdp1 ( 注:本步測試上面各步驟是否正確,正確方能成功)
$ exit
注:以下步驟配置hadoop
14,選定hdp1為Master并作為NameNode和JobTracker
$ sudo vi /etc/hadoop/masters 內(nèi)容為:hdp1
15,將所有服務(wù)器(包括主服務(wù)器hdp1)全部添加為slaves次服務(wù)器,當(dāng)作DataNode和TaskTracker
$ sudo vi /etc/hadoop/slaves 內(nèi)容為:
hdp1
hdp2
hdp3
16,hadoop運(yùn)行環(huán)境變量設(shè)置
$ cd /etc/hadoop
$ sudo vi hadoop-env.sh
將export JAVA_HOME=/usr/lib/jvm/java-6-sun注釋掉(前面加#),其后添加一行
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/
17, 在/etc/hadoop目錄下添加hadoop云計算系統(tǒng)設(shè)置文檔-> core-site.xml
$ sudo vi core-site.xml
內(nèi)容如下:
<?xml version="1.0"?>
<!-- core-site.xml -->
<configuration>
??? <property>
??????? <name>fs.default.name</name>
??????? <value>hdfs://hdp1:9000</value>
??? </property>
</configuration>
18, 在/etc/hadoop目錄下添加HDFS分布式文檔系統(tǒng)設(shè)置文檔-> hdfs-site.xml
賦予hadoop訪問/var/run目錄的權(quán)限
$ sudo usermod -a -G root hadoop (注: hadoop加入root組, 也可用gpasswd -a hadoop root命令,均需注銷再登錄后生效)
$ sudo chmod g+w /run /var/run (注: 不要加-R選項, /run/sshd目錄的屬性更改后會導(dǎo)致ssh無法連接, 另本命令需在每次機(jī)器重啟后執(zhí)行一次, 可通過在/etc/init.d/rc.local文件中添加該命令自動進(jìn)行 )
創(chuàng)建目錄
$ mkdir -p ~/hadoop/dfs/data (注:無須創(chuàng)建~/hadoop/dfs/name,在格式化HDFS文檔系統(tǒng)時會自動創(chuàng)建,否則格式化會失敗)
再創(chuàng)建文檔
$ sudo vi hdfs-site.xml
內(nèi)容如下:
<?xml version="1.0"?>
<!-- hdfs-site.xml -->
<configuration>
??? <property>
??????? <name>dfs.name.dir</name>
??????? <value>/home/hadoop/dfs/name</value>
??? </property>
??? <property>
??????? <name>dfs.data.dir</name>
??????? <value>/home/hadoop/dfs/data</value>
??? </property>
??? <property>
??????? <name>dfs.replication</name>
??????? <value>1</value>
??? </property>
</configuration>
19, 在/etc/hadoop目錄下添加Map/Reduce程序設(shè)置文檔-> mapred-site.xml
$ sudo vi mapred-site.xml
內(nèi)容如下:
<?xml version="1.0"?>
<!-- mapred-site.xml -->
<configuration>
??? <property>
??????? <name>mapred.job.tracker</name>
??????? <value>hdp1:9001</value>
??? </property>
</configuration>
注:以下各步創(chuàng)建及創(chuàng)建其他主機(jī)
20,復(fù)制VDI文件創(chuàng)建其他主機(jī)
1)關(guān)閉hdp1
2)復(fù)制hdp1.vdi為hdp2.vdi, hdp3.vdi
3)更改虛擬硬盤之UUID:
> cd "\Program Files\Oracle\VirtualBox"
> VBoxManage internalcommands sethduuid g:\vbox\hdp2.vdi
> VBoxManage internalcommands sethduuid g:\vbox\hdp3.vdi
4)啟動virtualbox創(chuàng)建虛擬主機(jī),分別選擇已存在的硬盤hdp2.vdi和hdp3.vdi,網(wǎng)絡(luò)配置應(yīng)和hdp1一樣。
21,啟動所有虛擬主機(jī),配置hdp2和hdp3的第二塊網(wǎng)卡的靜態(tài)IP,配置hostname
注:以下啟動云計算系統(tǒng)
22,格式化hadoop云計算系統(tǒng)
$ hadoop namenode -format (若已存在~/hadoop/dfs/name目錄,該步可能出錯)
$ sudo chown -R hadoop:hadoop /home/hadoop/dfs/name/current/
23,啟動云計算系統(tǒng)
$ start-all.sh
24,使用瀏覽器查看hadoop運(yùn)行狀況
http://hdp1:50070/?? (NameNode運(yùn)行狀況,點擊其中的“Live Nodes”可查看各DataNode的運(yùn)行狀況)
http://hdp1:50030/? (查看JobTracker的運(yùn)行狀況)
25,關(guān)閉云計算系統(tǒng)
$ stop-all.sh
26,使用hadoop官方程序組件(wordcount)測試云計算系統(tǒng)
1)創(chuàng)建目錄并準(zhǔn)備文件
$ makedir -p ~/wordcount
$ cd ~/wordcount
$ echo "Hello World Bye World" >> inputfile1
$ echo "Hello Hadoop Bye Hadoop" >> inputfile1
2)指定HDFS分布式文檔格式篩選這兩件文件,做為Map/Reduce工作的輸入文檔 (即把整個目錄中的文件上傳到HDFS的input中)
$ hadoop dfs -put ~/wordcount input
$ hadoop fs -ls input (查看input中的文件)
結(jié)果:
Found 2 items
-rw-r--r--?? 1 hadoop supergroup???????? 22 2012-04-05 10:07 /user/hadoop/input/inputfile1
-rw-r--r--?? 1 hadoop supergroup???????? 27 2012-04-05 10:07 /user/hadoop/input/inputfile2
3)使用hadoop-examples-1.0.1.jar內(nèi)附的wordcount程序計算各輸入文檔中單詞出現(xiàn)的總次數(shù)
$ hadoop jar /usr/share/hadoop/hadoop-examples-1.0.1.jar wordcount input output
4)通過命令輸出或http://hdp0:50030可查看當(dāng)前進(jìn)度
5)計算完成后,看結(jié)果:
$ hadoop dfs -get output output
或
$ hadoop fs -cat output/part-r-00000
27,排錯:注意看/var/log/hadoop/hadoop/目錄下的各日志文件
1)org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory output already exists
?
這是因為mapreduce的輸出都應(yīng)該是單獨的輸出文件,不能有重名的情況
需要刪除已有的同名文件
$ hadoop fs -rmr output
2)map進(jìn)行到100%后,reduce過程進(jìn)行到某個數(shù)值(如16%)后就不再繼續(xù),直到被hadoop強(qiáng)制關(guān)閉。
可能原因:
a) 因為 /etc/hosts 中配置的IP 別名和hostname不一致造成的!
經(jīng)過對job history進(jìn)行分析,并跟蹤到task失敗的任務(wù)的節(jié)點,查看syslog,發(fā)現(xiàn)原因如下:
<1>.對于運(yùn)行在A節(jié)點上的map任務(wù),運(yùn)行完畢后,將運(yùn)行結(jié)果提交給jobtracker,并將運(yùn)行結(jié)果保存在節(jié)點A上.
<2>.對于運(yùn)行在B節(jié)點上的reduce任務(wù),從jobtracker取得任務(wù)信息(假設(shè)任務(wù)包括對節(jié)點A的map的數(shù)據(jù)).并直接從節(jié)點A提取該map的結(jié)果.
原因在第二步.當(dāng)節(jié)點B的reduce從jobtracker獲得的任務(wù)中,包括map的服務(wù)器地址,而這個地址是改服務(wù)器的名字,而不是IP地址.因此,當(dāng)在本地解析該服務(wù)器名的時候,無法解析出他的ip地址,導(dǎo)致無法從A節(jié)點,提取數(shù)據(jù).
slave2? reduce時候需要得到slave1 map的結(jié)果, datanode間需要數(shù)據(jù)copy, slave2找salve1使用的是hostname,而不是/etc/hosts 中配置的slave1,
故:/etc/hostname, /etc/hosts, $HADOOP_HOME/conf/masters, $HADOOP_HOME/conf/slaves, $HADOOP_HOME/conf/core-site.xml, $HADOOP_HOME/conf/mapred-site.xml中的IP別名要和hostname一致。
b) 因為secondary name node所在的機(jī)器沒有配置dfs.http.address這個參數(shù),該參數(shù)在hadoop-default.xml里的缺省值是0.0.0.0:50070,應(yīng)改為name node所在機(jī)器的ip地址。
3)hadoop 文件夾無法刪除,Name node is in safe mode.
關(guān)閉安全模式:$ hadoop dfsadmin -safemode leave?
28, 其他hadoop命令
1) 在hdfs 中建立一個input 目錄
$ hadoop fs –mkdir input
2) 查看目錄中文件列表
$ hadoop fs -ls input
3)將file01 和file02 拷貝到hdfs 中:
$ hadoop fs –copyFromLocal /home/hexianghui/soft/file0* input
4)查看文件內(nèi)容:
$ hadoop fs -cat output/part-r-00000
5)刪除目錄
$ hadoop fs -rmr output
6)關(guān)閉安全模式
$ hadoop dfsadmin -safemode leave?
?
總結(jié)
以上是生活随笔為你收集整理的在Ubuntu11.10下构建hadoop实验环境笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu 11.10 添加分辨率
- 下一篇: ssh 错误: ssh_exchange