Hadoop2.2.0多節(jié)點(diǎn)分布式安裝及測(cè)試
眾所周知,hadoop在10月底release了最新版2.2。很多國(guó)內(nèi)的技術(shù)同仁都馬上在網(wǎng)絡(luò)上推出了自己對(duì)新版hadoop的配置心得。這其中主要分為兩類(lèi):
1.單節(jié)點(diǎn)配置
這個(gè)太簡(jiǎn)單了,簡(jiǎn)單到只要懂點(diǎn)英語(yǔ),照著網(wǎng)上說(shuō)的做就ok了。我這里不談這個(gè),有興趣的童鞋可以自己去問(wèn)度娘和谷哥~
2.多節(jié)點(diǎn)配置
這個(gè)就是我要重點(diǎn)說(shuō)明的,老實(shí)說(shuō)網(wǎng)絡(luò)上說(shuō)的的確是多節(jié)點(diǎn),但不是真正的分布式部署~ 我們?yōu)槭裁匆胔adoop?因?yàn)閔adoop是一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu),我們可以在不了解分布式底層細(xì)節(jié)的情況下,開(kāi)發(fā)分布式程序。充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。 如果只是多節(jié)點(diǎn),但是程序還在一個(gè)節(jié)點(diǎn)運(yùn)行,其它節(jié)點(diǎn)沒(méi)有參與程序運(yùn)行活動(dòng)。 那和你在網(wǎng)吧里,自己一個(gè)人看片子和其他人無(wú)交集有什么區(qū)別? 所以網(wǎng)上提供的都是多節(jié)點(diǎn)偽分布式的配置~
接下來(lái)我會(huì)貢獻(xiàn)出自己這幾天弄的一些心得,或許有人看了開(kāi)頭覺(jué)得我寫(xiě)的和網(wǎng)上那些差不多,但是真正的區(qū)別我會(huì)在之后列出來(lái),就看誰(shuí)有耐心看完我寫(xiě)的東西啦~霍霍~
準(zhǔn)備
我用的linux系統(tǒng)是ubuntu 12.04 LTS server版(就是沒(méi)有桌面顯示的版本)。 虛擬機(jī)用的是VMWare Workstation10,ssh客戶端是開(kāi)源的putty,還有ftp客戶端軟件是cuteFTP(雖然可以在linux系統(tǒng)里用vim對(duì)文件進(jìn)行編輯修改,但我覺(jué)得有客戶端直接在windows系統(tǒng)里修改文件比較方便和高效)。 tomcat版本是6.0.29,jdk版本是1.7.45。虛擬機(jī)里ubuntu的網(wǎng)絡(luò)設(shè)置我用的是UAT模式,也就是說(shuō)和外部window系統(tǒng)的網(wǎng)絡(luò)配置是共享的,除了IP地址不一樣,其他都雷同。
安裝tomcat和jdk什么我就不用說(shuō)了。還有初始的分辨率是600x800,需要重調(diào)我也不說(shuō)了。至于安裝vsftpd和openssh,我更加不說(shuō)了。度娘和谷哥都知道。
這里就列我弄的兩個(gè)ubuntu系統(tǒng)。hadoop里把主節(jié)點(diǎn)系統(tǒng)叫為master,從節(jié)點(diǎn)系統(tǒng)叫為slave。master只能有一 個(gè),slave可以有許多個(gè)。就如一個(gè)老板可以有很多員工為他打工一樣。(當(dāng)然在很多情況下,還會(huì)有個(gè)做備份的master,防止master出問(wèn)題時(shí) 候,有個(gè)替補(bǔ)直接頂上)
為了行文方便,后面我就直接用master和slave稱(chēng)呼這兩個(gè)。(網(wǎng)上都喜歡用三節(jié)點(diǎn)做例子,一個(gè)master兩個(gè)slave,我簡(jiǎn)化了一下,就一個(gè)master和一個(gè)slave,反正都是以此類(lèi)推的東西,搞簡(jiǎn)單點(diǎn))
我的系統(tǒng)原始信息:
| hostname | IP address | |
| master | hadoop | 192.168.72.130 |
| slave | hadoop1 | 192.168.72.128 |
hostname是自己改的,IP地址是你安裝完你的ubuntu后,電腦在UAT模式下自動(dòng)生成的IP地址。請(qǐng)根據(jù)你自己情況記錄這些信息。還有hostname如何永久地改成hadoop和hadoop1,請(qǐng)問(wèn)度娘和谷哥。
每個(gè)ubuntu里分別加入專(zhuān)為hadoop使用的帳號(hào)
命令:
addgroup hadoop adduser –ingroup hadoop wujunshen
這個(gè)wujunshen是我在用VMWare安裝ubuntu時(shí)候,讓我自己設(shè)定的帳號(hào)名字,大家可以自行設(shè)定。但是hadoop這個(gè)用戶組名最好不要改。
有人會(huì)問(wèn) ubuntu里非root賬戶登錄后,輸入命令開(kāi)頭不都要打sudo么?這個(gè)其實(shí)也可以設(shè)置,再次提醒請(qǐng)問(wèn)度娘和谷哥。這里哥給個(gè)當(dāng)年自己記錄的博文鏈接: http://darkranger.iteye.com/admin/blogs/768608
注意:兩個(gè)ubuntu的hadoop帳號(hào)名要一樣,不一樣就算你配置好了,測(cè)試時(shí)候也不成功的。我看了一下hadoop的代碼,它好像是在hadoop代碼里寫(xiě)死了讀取帳號(hào)名的值。(shell不太會(huì),只看了個(gè)大概) 有人說(shuō)要在系統(tǒng)里設(shè)置%HADOOP_HOME%為你安裝hadoop的路徑,就可以帳號(hào)名不一樣了。 我沒(méi)試驗(yàn)過(guò),因?yàn)槲矣X(jué)得測(cè)試這個(gè)有點(diǎn)無(wú)聊了,或許《生活大爆炸》里Sheldon會(huì)這么做。:)
建立兩個(gè)系統(tǒng)ssh通信互相信任關(guān)系
要在兩個(gè)系統(tǒng)上每一個(gè)進(jìn)行以下操作。(如果slave有很多個(gè),這樣做是很浪費(fèi)時(shí)間的,一般都要用個(gè)shell自動(dòng)化腳本來(lái)建立信任關(guān)系。這里只是示例,麻煩各位手打或copy了。)
進(jìn)入wujunshen帳號(hào),輸入命令
ssh-keygen -t rsa -P "" cat .ssh/id_rsa.pub >>.ssh/authorized_keys (出現(xiàn)兩個(gè)問(wèn)題,第一個(gè)問(wèn)題回車(chē)就行,第二個(gè)輸入y回車(chē),千萬(wàn)不要直接回車(chē),否則不會(huì)生成key)
注意:如果出現(xiàn)錯(cuò)誤:-bash: .ssh/authorized_keys: No such file or directory 這是由于新建好的用戶帳號(hào),比如我這里是wujunshen這個(gè)帳號(hào),默認(rèn)沒(méi)有.ssh目錄,需要自己建立。
mkdir -p ~/.ssh
接下來(lái)還有一步,我用cuteFTP做的,覺(jué)得自己牛逼的可以用linux的拷貝粘貼命令搞。
在每個(gè)ubuntu下找到剛才生成的authorized_keys文件,我這里路徑是: /home/wujunshen/.ssh/authorized_keys
修改該文件,讓此文件包含生成的rsa字符串(有關(guān)RSA加密算法的由來(lái),你還是可以去問(wèn)度娘和谷哥,那是個(gè)傳奇的故事)和兩個(gè)ubuntu的hostname,比如我這里是:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEBNUjKbZQOQsc6iNawm5VxXk+Kx5MXS1A6ZX/xtAfAI3jurVTgNHz6T2exf/dHP3aoaK49vl6EeMg4hZ7qwxldeERMXNBu5m0y/JyRupX9RfHRjJyqSXRdJ1WjE2ySPtXdLNPjKDvzjf61dSP/iMXeemlZfZV2VNqJiLTlpG3OvjraICUXCXMMB4h72Qm59iIHZ4iRI2v5VMmp+CeGEqHba0O8UUkpSpqC8vZCFJKL+IfCFups9OGrKIT854/Xc+vPSd89jA3RLubJThE/F/8QczqSBHXYrLeUMir3lFEPqLe7U4jk5n83/3fAsagaUyXBCWGm7LanLgXsqMfKBxD wujunshen@hadoop1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+umV0w7qcQyHJzfqRc+mHE+eCWw8Ns/uU05CF4fEJnGkys+0Itwsh+edwt8K4oHZ8rK0THO1ip2oNXHzVJ8aJ7rpeI19N0BubCahhGbVNqzgyGgvbnz3+xD/La47YNBzjHF4AxTu+Dj51vOp1yRaiTwhu93o9PP18x2Ai7aNQEap7pGpBwogbfSWDBvZNq9PJYinjzhnVqJ7bctJe+1ufme7bX+vyu1hrdtfpwXgW5GiXQ6uvYH6ExiTSWlLFMyDgD63APm1P2Hs1hlR1gNE3SC4q34mfExhoxY3JJgfbP0x2rt8PfdWk5Lzxtaylj85bmZi/9xDvXdoqjtSv4Mxb wujunshen@hadoop
保證每個(gè)ubuntu系統(tǒng)的authorized_keys文件都包含wujunshen@hadoop1和wujunshen@hadoop以及它們的rsa字符串.
然后在其中一個(gè)ubuntu上進(jìn)行測(cè)試,比如我這里在master里輸入
ssh hadoop1
去訪問(wèn)slave,這樣就不需要輸入密碼就能訪問(wèn)hadoop1,然后我輸入
ssh hadoop
回到master。
結(jié)果如下:
wujunshen@hadoop:~$ ssh hadoop1 Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.8.0-29-generic i686) * Documentation: https://help.ubuntu.com/ Last login: Wed Nov 27 19:29:55 2013 from hadoop wujunshen@hadoop1:~$ ssh hadoop Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.8.0-29-generic i686) * Documentation: https://help.ubuntu.com/ Last login: Wed Nov 27 19:30:03 2013 from hadoop1 wujunshen@hadoop:~$
截圖:
注意:如果ssh hadoop或ssh hadoop1 出現(xiàn)錯(cuò)誤: Host key verification failed
解決方法:到 /home/wujunshen/.ssh目錄下找到known_hosts文件,刪除known_hosts文件。命令
rm known_hosts
#p#
安裝
去官網(wǎng)下載hadoop-2.2.0.tar.gz
然后在兩個(gè)ubuntu里進(jìn)行以下操作。
解壓壓縮包在/home/wujunshen目錄下
命令:
tar zxf hadoop-2.2.0.tar.gz
解開(kāi)之后是個(gè)hadoop-2.2.0文件夾,改名為hadoop
命令:
mv hadoop-2.2.0 hadoop
安裝結(jié)束。(安裝很簡(jiǎn)單,但你要想用起來(lái),接下來(lái)是重頭戲)
配置
以下操作,master和slave都是一樣的。
在/home/wujunshen/hadoop/etc/hadoop下找 hadoop-env.sh,修改此文件 找到export JAVA_HOME這一列,后面改成自己的jdk安裝目錄,比如我這里是/usr/lib/jdk1.7.0_45
改成
export JAVA_HOME=/usr/lib/jdk1.7.0_45
在同一路徑下找 core-site.xml,修改它在 < configuration >中添加:
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/home/wujunshen/hadoop/tmp/hadoop-${user.name}</value>
- <description>A base for other temporarydirectories.</description>
- </property>
- <property>
- <name>fs.default.name</name>
- <value>hdfs://192.168.72.130:8010</value>
- <description>The name of the default file system. A URI whose
- scheme and authority determine the FileSystem implementation. The
- uri's scheme determines the config property (fs.SCHEME.impl) naming
- the FileSystem implementation class. The uri's authority is used to
- determine the host, port, etc. for a filesystem.</description>
- </property>
注意:
- /home/wujunshen/hadoop下缺省是沒(méi)有tmp文件夾的,要用命令: mkdir /home/wujunshen/hadoop/tmp創(chuàng)建
- hdfs://192.168.72.130:8010 里的IP地址就是master 的IP地址
同一路徑下修改 mapred-site.xml
因?yàn)槿笔∈菦](méi)有這個(gè)文件的,要用模板文件造一個(gè),命令為:
- mv /home/wujunshen/hadoop/etc/hadoop/mapred-site.xml.template /home/hduser/hadoop/etc/hadoop/mapred-site.xml
在 < configuration >中添加:
- <property>
- <name>mapred.job.tracker</name>
- <value>192.168.72.130:54311</value>
- <description>The host and port that the MapReduce job tracker runs
- at. If "local", thenjobs are run in-process as a single map
- and reduce task.
- </description>
- </property>
- <property>
- <name>mapred.map.tasks</name>
- <value>10</value>
- <description>As a rule of thumb, use 10x the number of slaves(i.e., number of tasktrackers).
- </description>
- </property>
- <property>
- <name>mapred.reduce.tasks</name>
- <value>2</value>
- <description>As a rule of thumb, use 2x the number of slaveprocessors (i.e., number of tasktrackers).
- </description>
- </property>
注意:< value >192.168.72.130:54311< /value >里的IP地址就是master 的IP地址
同一路徑下修改 hdfs-site.xml, 在 < configuration >中添加:
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- <description>Default block replication.
- Theactual number of replications can be specified when the file is created.
- Thedefault is used if replication is not specified in create time.
- </description>
- </property>
注意:< value >1< /value >里的數(shù)字1表明的是dfs文件備份個(gè)數(shù), 如果你只有3個(gè)slave,但是你卻指定值為4,那么這是不會(huì)生效的,因?yàn)槊總€(gè)salve上只能存放一個(gè)備份文件。 如果你設(shè)置了100個(gè)slave,那么這個(gè)就寫(xiě)100。 我這里slave就1個(gè),就寫(xiě)了1。 網(wǎng)上那些因?yàn)槎际侨?jié)點(diǎn),一個(gè)master,兩個(gè)slave,所以都寫(xiě)2,但網(wǎng)上很少有人會(huì)說(shuō)要根據(jù)實(shí)際slave的個(gè)數(shù)修改。
同一路徑下修改slaves文件 增加所有slaves的hostname。比如我這里slave就一個(gè),hostname是hadoop1,所以只有一個(gè)hadoop1,該文件內(nèi)容只為
- hadoop1
運(yùn)行
所有操作只需要在master運(yùn)行即可。系統(tǒng)會(huì)自動(dòng)登錄到slave上。
初次運(yùn)行Hadoop的時(shí)候需要初始化Hadoop文件系統(tǒng) ,在master上輸入命令
- cd /home/wujunshen/hadoop/bin
- ./hdfs namenode -format
執(zhí)行成功,你會(huì)在日志中(倒數(shù)幾行)找到如下成功的提示信息:
- common.Storage: Storage directory /home/wujunshen/hadoop/tmp/hadoop-wujunshen/dfs/name has been successfully formatted.
再去啟動(dòng)hadoop,命令:
- cd home/wujunshen/hadoop/sbin/
- ./start-dfs.sh
- ./start-yarn.sh
#p#
注意:你也可以直接運(yùn)行./start-all.sh,不用分開(kāi)啟動(dòng)dfs和yarn.第一次運(yùn)行start-all會(huì)出現(xiàn)一個(gè)問(wèn)題,輸入yes就行了。
查看運(yùn)行結(jié)果 執(zhí)行你的jdk運(yùn)行目錄下的jps,比如我這里是 /usr/lib/jdk1.7.0_45/bin/
輸入命令:
- /usr/lib/jdk1.7.0_45/bin/jps
在hadoop上結(jié)果為:
- 6419 ResourceManager
- 6659 Jps
- 6106 NameNode
- 6277 SecondaryNameNode
在hadoop1結(jié)果為:
- 3930 SecondaryNameNode
- 4222 Jps
- 3817 DataNode
- 3378 NodeManager
或執(zhí)行命令
- cd /home/wujunshen/hadoop/bin
- ./hdfs dfsadmin -report
結(jié)果:
- Configured Capacity: 51653570560 (48.11 GB)
- Present Capacity: 46055575552 (42.89 GB)
- DFS Remaining: 46055550976 (42.89 GB)
- DFS Used: 24576 (24 KB)
- DFS Used%: 0.00%
- Under replicated blocks: 0
- Blocks with corrupt replicas: 0
- Missing blocks: 0
- -------------------------------------------------
- Datanodes available: 1 (1 total, 0 dead)
- Live datanodes:
- Name: 192.168.72.128:50010 (hadoop1)
- Hostname: hadoop1
- Decommission Status : Normal
- Configured Capacity: 51653570560 (48.11 GB)
- DFS Used: 24576 (24 KB)
- Non DFS Used: 5597995008 (5.21 GB)
- DFS Remaining: 46055550976 (42.89 GB)
- DFS Used%: 0.00%
- DFS Remaining%: 89.16%
- Last contact: Wed Nov 27 23:56:32 PST 2013
截圖:
注意:有時(shí)候會(huì)發(fā)現(xiàn)hadoop1上的datanode沒(méi)有出現(xiàn),這個(gè)時(shí)候以我的體會(huì),最好是把/home/wujunshen/hadoop下的tmp文件夾刪除,然后重新建,重新初始化hadoop文件系統(tǒng),重啟hadoop,然后執(zhí)行兩種查看方式再看看
測(cè)試
兩種測(cè)試方法,實(shí)際是運(yùn)行了兩個(gè)示例程序,一個(gè)是wordcount,另外一個(gè)是randomwriter
1.執(zhí)行下列命令:
- cd /home/wujunshen
- wget http://www.gutenberg.org/cache/epub/20417/pg20417.txt
- cd hadoop
- bin/hdfs dfs -mkdir /tmp
- bin/hdfs dfs -copyFromLocal /home/wujunshen/pg20417.txt /tmp
- bin/hdfs dfs -ls /tmp
- bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /tmp/ /tmp-output
2.執(zhí)行下列命令:
- cd /home/wujunshen/hadoop
- bin/hdfs dfs -mkdir /input
- bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar randomwriter input
總結(jié)
如果你能看到這里,而且按照我之前說(shuō)的已經(jīng)運(yùn)行成功了。那么恭喜你,你實(shí)現(xiàn)了hadoop多節(jié)點(diǎn)偽分布式的配置。對(duì)的,你沒(méi)看錯(cuò)?。?!就是偽分布式~ 可能有人不服氣會(huì)說(shuō):怎么到這里就是偽分布式了呢?不是都OK的么?那么我請(qǐng)你仔細(xì)看看你測(cè)試中選擇的兩種示例程序啟動(dòng)的job,如圖是運(yùn)行第二個(gè)randomwriter 程序的job:
看到紅框了伐?全是Local!??!也就是說(shuō)不管你執(zhí)行哪個(gè)示例程序,啟動(dòng)的job都只是在master這個(gè)節(jié)點(diǎn)本地運(yùn)行的job。哪里有讓slave節(jié)點(diǎn)參與了?
再說(shuō),看看wordcount這個(gè)單詞就知道是個(gè)計(jì)算單詞的示例程序,如果只有master一個(gè)節(jié)點(diǎn)計(jì)算,那么這能算分布式多節(jié)點(diǎn)參與計(jì)算么? 所以各位朋友,請(qǐng)接著耐心地看下去,看我如何施展魔法讓hadoop真正的進(jìn)行分布式計(jì)算?。?!
#p#
真.配置
之前配置里所說(shuō)的那些文件修改還是要的。這里我們?cè)賹?duì)其中一些文件進(jìn)行修改。
在/home/wujunshen/hadoop/etc/hadoop 下找到 yarn-env.sh,修改它
找到設(shè)置JAVA_HOME的那一列 改成:
- export JAVA_HOME=/usr/lib/jdk1.7.0_45
在/home/wujunshen/hadoop/etc/hadoop 下修改mapred-site.xml 在 < configuration >中添加(原先的配置還留著):
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>192.168.72.130:10020</value>
- </property>
- <property>
- <value>192.168.72.130:19888</value>
- </property>
在/home/wujunshen/hadoop/etc/hadoop 下修改yarn-site.xml 在 < configuration >中添加:
- <property>
- <name>yarn.resourcemanager.address</name>
- <value>hadoop:8032</value>
- </property>
- <property>
- <description>The address of the scheduler interface.</description>
- <name>yarn.resourcemanager.scheduler.address</name>
- <value>hadoop:8030</value>
- </property>
- <property>
- <description>The address of the RM web application.</description>
- <name>yarn.resourcemanager.webapp.address</name>
- <value>hadoop:8088</value>
- </property>
- <property>
- <name>yarn.resourcemanager.resource-tracker.address</name>
- <value>hadoop:8031</value>
- </property>
- <property>
- <description>The address of the RM admin interface.</description>
- <name>yarn.resourcemanager.admin.address</name>
- <value>hadoop:8033</value>
- </property>
- <property>
- <description>The address of the RM admin interface.</description>
- <name>yarn.nodemanager.address</name>
- <value>hadoop:10000</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
- <value>org.apache.hadoop.mapred.ShuffleHandler</value>
- </property>
注意:這里很多value都是hadoop打頭的,我一開(kāi)始修改這些文件都是填寫(xiě)master的IP地址,我后來(lái)試驗(yàn)了一下,其實(shí)用master的hostname,也就是hadoop也可以的。
好了重復(fù)測(cè)試?yán)锬莾蓚€(gè)示例程序,這里我運(yùn)行了randomwriter程序,因?yàn)橹耙呀?jīng)創(chuàng)建過(guò)input文件夾,現(xiàn)在執(zhí)行命令會(huì)報(bào)錯(cuò)說(shuō)input已存在,很簡(jiǎn)單,后面加個(gè)1就行,命令變成
- cd /home/wujunshen/hadoop
- bin/hdfs dfs -mkdir /input1
- bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar randomwriter input1
重復(fù)執(zhí)行這些命令的話,就把后面改成2,3,4就好了。反正是例子,隨意一點(diǎn),不用像工作中要取個(gè)很正式的名字。
結(jié)果如下:
- 13/11/28 19:37:23 INFO mapreduce.Job: Running job: job_1385696103815_0001
- 13/11/28 19:37:43 INFO mapreduce.Job: Job job_1385696103815_0001 running in uber mode : false
- 13/11/28 19:37:43 INFO mapreduce.Job: map 0% reduce 0%
- 13/11/28 19:51:05 INFO mapreduce.Job: map 10% reduce 0%
- 13/11/28 19:51:11 INFO mapreduce.Job: map 20% reduce 0%
- 13/11/28 19:51:13 INFO mapreduce.Job: map 30% reduce 0%
- 13/11/28 19:51:19 INFO mapreduce.Job: map 40% reduce 0%
- 13/11/28 19:51:21 INFO mapreduce.Job: map 50% reduce 0%
- 13/11/28 19:51:40 INFO mapreduce.Job: map 60% reduce 0%
- 13/11/28 20:03:37 INFO mapreduce.Job: map 70% reduce 0%
- 13/11/28 20:03:48 INFO mapreduce.Job: map 80% reduce 0%
- 13/11/28 20:03:49 INFO mapreduce.Job: map 90% reduce 0%
- 13/11/28 20:03:51 INFO mapreduce.Job: map 100% reduce 0%
- 13/11/28 20:03:53 INFO mapreduce.Job: Job job_1385696103815_0001 completed successfully
- 13/11/28 20:03:53 INFO mapreduce.Job: Counters: 30
- File System Counters
- FILE: Number of bytes read=0
- FILE: Number of bytes written=789520
- FILE: Number of read operations=0
- FILE: Number of large read operations=0
- FILE: Number of write operations=0
- HDFS: Number of bytes read=1270
- HDFS: Number of bytes written=10772863128
- HDFS: Number of read operations=40
- HDFS: Number of large read operations=0
- HDFS: Number of write operations=20
- Job Counters
- Killed map tasks=5
- Launched map tasks=15
- Other local map tasks=15
- Total time spent by all maps in occupied slots (ms)=9331745
- Total time spent by all reduces in occupied slots (ms)=0
- Map-Reduce Framework
- Map input records=10
- Map output records=1021605
- Input split bytes=1270
- Spilled Records=0
- Failed Shuffles=0
- Merged Map outputs=0
- GC time elapsed (ms)=641170
- CPU time spent (ms)=806440
- Physical memory (bytes) snapshot=577269760
- Virtual memory (bytes) snapshot=3614044160
- Total committed heap usage (bytes)=232574976
- org.apache.hadoop.examples.RandomWriter$Counters
- BYTES_WRITTEN=10737514428
- RECORDS_WRITTEN=1021605
- File Input Format Counters
- Bytes Read=0
- File Output Format Counters
- Bytes Written=10772863128
- Job ended: Thu Nov 28 20:03:53 PST 2013
- The job took 1594 seconds.
#p#
可以看到這個(gè)時(shí)候Job名字打頭已經(jīng)不是local了,而是job了。而且可以登錄http://192.168.72.130:8088查看運(yùn)行的job狀態(tài)
如圖:
上圖還是這個(gè)job處于running狀態(tài)時(shí)的信息。
完成時(shí)信息如下圖:
現(xiàn)在我們?cè)賵?zhí)行那個(gè)wordcount程序,這里和randomwriter類(lèi)似。
命令是
- cd /home/wujunshen/hadoop
- bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /tmp/ /tmp-output100(為啥是tmp-output100,之前在說(shuō)randomwriter示例程序時(shí)候已經(jīng)說(shuō)過(guò))
結(jié)果:
- 3/11/29 00:01:40 INFO client.RMProxy: Connecting to ResourceManager at hadoop/192.168.72.130:8032
- 13/11/29 00:01:41 INFO input.FileInputFormat: Total input paths to process : 1
- 13/11/29 00:01:41 INFO mapreduce.JobSubmitter: number of splits:1
- 13/11/29 00:01:41 INFO Configuration.deprecation: user.name is deprecated. Instead, use mapreduce.job.user.name
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapred.output.value.class is deprecated. Instead, use mapreduce.job.output.value.class
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapreduce.combine.class is deprecated. Instead, use mapreduce.job.combine.class
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapreduce.map.class is deprecated. Instead, use mapreduce.job.map.class
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapred.job.name is deprecated. Instead, use mapreduce.job.name
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapreduce.reduce.class is deprecated. Instead, use mapreduce.job.reduce.class
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapred.input.dir is deprecated. Instead, use mapreduce.input.fileinputformat.inputdir
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapred.output.dir is deprecated. Instead, use mapreduce.output.fileoutputformat.outputdir
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapred.output.key.class is deprecated. Instead, use mapreduce.job.output.key.class
- 13/11/29 00:01:41 INFO Configuration.deprecation: mapred.working.dir is deprecated. Instead, use mapreduce.job.working.dir
- 13/11/29 00:01:42 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1385696103815_0009
- 13/11/29 00:01:42 INFO impl.YarnClientImpl: Submitted application application_1385696103815_0009 to ResourceManager at hadoop/192.168.72.130:8032
- 13/11/29 00:01:42 INFO mapreduce.Job: The url to track the job: http://hadoop:8088/proxy/application_1385696103815_0009/
- 13/11/29 00:01:42 INFO mapreduce.Job: Running job: job_1385696103815_0009
- 13/11/29 00:01:53 INFO mapreduce.Job: Job job_1385696103815_0009 running in uber mode : false
- 13/11/29 00:01:53 INFO mapreduce.Job: map 0% reduce 0%
- 13/11/29 00:02:03 INFO mapreduce.Job: map 100% reduce 0%
- 13/11/29 00:02:18 INFO mapreduce.Job: map 100% reduce 50%
- 13/11/29 00:02:19 INFO mapreduce.Job: map 100% reduce 100%
- 13/11/29 00:02:20 INFO mapreduce.Job: Job job_1385696103815_0009 completed successfully
- 13/11/29 00:02:20 INFO mapreduce.Job: Counters: 43
- File System Counters
- FILE: Number of bytes read=267032
- FILE: Number of bytes written=771667
- FILE: Number of read operations=0
- FILE: Number of large read operations=0
- FILE: Number of write operations=0
- HDFS: Number of bytes read=674677
- HDFS: Number of bytes written=196192
- HDFS: Number of read operations=9
- HDFS: Number of large read operations=0
- HDFS: Number of write operations=4
- Job Counters
- Launched map tasks=1
- Launched reduce tasks=2
- Data-local map tasks=1
- Total time spent by all maps in occupied slots (ms)=7547
- Total time spent by all reduces in occupied slots (ms)=25618
- Map-Reduce Framework
- Map input records=12760
- Map output records=109844
- Map output bytes=1086547
- Map output materialized bytes=267032
- Input split bytes=107
- Combine input records=109844
- Combine output records=18040
- Reduce input groups=18040
- Reduce shuffle bytes=267032
- Reduce input records=18040
- Reduce output records=18040
- Spilled Records=36080
- Shuffled Maps =2
- Failed Shuffles=0
- Merged Map outputs=2
- GC time elapsed (ms)=598
- CPU time spent (ms)=4680
- Physical memory (bytes) snapshot=267587584
- Virtual memory (bytes) snapshot=1083478016
- Total committed heap usage (bytes)=152768512
- Shuffle Errors
- BAD_ID=0
- CONNECTION=0
- IO_ERROR=0
- WRONG_LENGTH=0
- WRONG_MAP=0
- WRONG_REDUCE=0
- File Input Format Counters
- Bytes Read=674570
- File Output Format Counters
- Bytes Written=196192
可以看到j(luò)ob名字也是以job打頭的一個(gè)名字。
注意:這里有可能會(huì)碰到錯(cuò)誤:
- java.io.FileNotFoundException: Path is not a file: /tmp/hadoop-yarn
解決方法很簡(jiǎn)單,命令是:
- cd /home/wujunshen/hadoop
- bin/hdfs dfs -mkdir /tmp
- bin/hdfs dfs -copyFromLocal /home/wujunshen/pg20417.txt /tmp
- bin/hdfs dfs -ls /tmp
(如果之前已經(jīng)運(yùn)行過(guò)以上命令就沒(méi)必要再輸入這些命令了。我順便講一下這幾個(gè)命令,其實(shí)hadoop是在ubuntu的文件系統(tǒng)中劃出了一塊作為它自己的 文件系統(tǒng),所謂的hdfs全稱(chēng)就是hadoop file system,但是這個(gè)文件系統(tǒng)中的文件和文件夾是無(wú)法用ubuntu的命令找到的,也無(wú)法在win7,win8中用FTP客戶端cuteFTP找到。因 為這是虛擬的文件系統(tǒng),現(xiàn)實(shí)中不存在。所以如果要在這個(gè)虛擬化的文件系統(tǒng)中進(jìn)行文件和文件夾創(chuàng)建,還有拷貝和查看等操作,必須開(kāi)頭是以bin/hdfs dfs打頭的,這樣就能在這個(gè)虛擬的文件系統(tǒng)中進(jìn)行普通系統(tǒng)的操作,當(dāng)然后面要有個(gè)減號(hào),可以看到mkdir /tmp,copyFromLocal /home/wujunshen/pg20417.txt /tmp和ls /tmp就是普通文件系統(tǒng)操作命令)
- bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /tmp/pg20417.txt /tmp-output101
#p#
出現(xiàn)該錯(cuò)誤的原因是在運(yùn)行上條命令時(shí)候,在虛擬文件系統(tǒng)hdfs的tmp文件夾下自動(dòng)創(chuàng)建了一個(gè)/tmp/hadoop-yarn,而我們是對(duì) pg20417.txt 這個(gè)文本中的word個(gè)數(shù)進(jìn)行計(jì)算,要找的是file而不是path,所以我們改成/tmp/pg20417.txt, 讓wordcount 程序知道自己要找的是個(gè)file而不是path,而且還知道自己要找的是哪個(gè)file。
登錄http://192.168.72.130:8088查看運(yùn)行的job狀態(tài)
可以看到我試驗(yàn)的各種成功和失敗的job信息
真.總結(jié)
其實(shí)hadoop中有個(gè)很重要的東西就是yarn。在真.配置里修改的那些有關(guān)yarn的配置文件是讓hadoop變成真正的分布式系統(tǒng)的關(guān)鍵。 在這里我簡(jiǎn)單地對(duì)yarn介紹一下:
yarn原意為“紗線”,想想我們剛才對(duì)它進(jìn)行了配置讓我們實(shí)現(xiàn)了真正的分布式配置,我頓時(shí)覺(jué)得用紗線這個(gè)名字還挺形象的,呵呵。 它是hadoop的一個(gè)資源管理器。它的資源管理和執(zhí)行框架都是按master/slave范例實(shí)現(xiàn)——節(jié)點(diǎn)管理器(NM)運(yùn)行、監(jiān)控每個(gè)節(jié)點(diǎn),并向資源管理器報(bào)告資源的可用性狀態(tài)。 特定應(yīng)用的執(zhí)行由Master控制,負(fù)責(zé)將一個(gè)應(yīng)用分割成多個(gè)Job,并和資源管理器協(xié)調(diào)執(zhí)行所需的資源。資源一旦分配好,Master就和節(jié)點(diǎn)管理器一起安排、執(zhí)行、監(jiān)控獨(dú)立的Job。 yarn提供了一種新的資源管理模型和執(zhí)行方式,用來(lái)執(zhí)行MapReduce任務(wù)。因此,在最簡(jiǎn)單的情況下,現(xiàn)有的MapReduce應(yīng)用仍然能照原樣運(yùn)行(需要重新編譯),yarn只不過(guò)能讓開(kāi)發(fā)人員更精確地指定執(zhí)行參數(shù)。
好了,我終于寫(xiě)完了。大家隨便看看吧~
題外話
我蠻喜歡hadoop這個(gè)黃色小象的logo,貼出來(lái)給大家養(yǎng)養(yǎng)眼
另外不知道大家在登錄時(shí)有沒(méi)有注意到右上角的登錄帳號(hào),見(jiàn)下圖紅框:
這個(gè)dr. who可是大大有名啊~它是目前人類(lèi)歷史上最長(zhǎng)的電視連續(xù)劇,英國(guó)科幻劇《神秘博士》的劇名。前不久google上還紀(jì)念過(guò)這部電視劇開(kāi)播50周年。新版 的dr. who從2005年開(kāi)始也開(kāi)播了快10年了。至于它的外傳劇集《火炬木小組》在國(guó)內(nèi)年輕人之中更加有名。(火炬木小組絕對(duì)是個(gè)坑,從2006年開(kāi)始播,到 現(xiàn)在也只有四季,平均每?jī)赡瓿鲆患?,第一,第二季還一季20多集,從第三季開(kāi)始居然只有五六集。而且到現(xiàn)在也沒(méi)說(shuō)會(huì)不會(huì)拍第五季,不過(guò)看第四季最后一集應(yīng) 該有續(xù)集。這片子主角杰克上校扮演者在美劇《綠箭俠》里演一號(hào)反派。第四季里那個(gè)會(huì)說(shuō)上海話的黑人在夏天《星際迷航》最新電影版里也出來(lái)過(guò),就是被可汗脅 迫炸樓的那位。)
原文鏈接:http://www.ituring.com.cn/article/63927























