Hadoop2.2.0多節(jié)點分布式安裝及測試
眾所周知,hadoop在10月底release了最新版2.2。很多國內(nèi)的技術(shù)同仁都馬上在網(wǎng)絡(luò)上推出了自己對新版hadoop的配置心得。這其中主要分為兩類:
1.單節(jié)點配置
這個太簡單了,簡單到只要懂點英語,照著網(wǎng)上說的做就ok了。我這里不談這個,有興趣的童鞋可以自己去問度娘和谷哥~
2.多節(jié)點配置
這個就是我要重點說明的,老實說網(wǎng)絡(luò)上說的的確是多節(jié)點,但不是真正的分布式部署~ 我們?yōu)槭裁匆胔adoop?因為hadoop是一個分布式系統(tǒng)基礎(chǔ)架構(gòu),我們可以在不了解分布式底層細節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力進行高速運算和存儲。 如果只是多節(jié)點,但是程序還在一個節(jié)點運行,其它節(jié)點沒有參與程序運行活動。 那和你在網(wǎng)吧里,自己一個人看片子和其他人無交集有什么區(qū)別? 所以網(wǎng)上提供的都是多節(jié)點偽分布式的配置~
接下來我會貢獻出自己這幾天弄的一些心得,或許有人看了開頭覺得我寫的和網(wǎng)上那些差不多,但是真正的區(qū)別我會在之后列出來,就看誰有耐心看完我寫的東西啦~霍霍~
準備
我用的linux系統(tǒng)是ubuntu 12.04 LTS server版(就是沒有桌面顯示的版本)。 虛擬機用的是VMWare Workstation10,ssh客戶端是開源的putty,還有ftp客戶端軟件是cuteFTP(雖然可以在linux系統(tǒng)里用vim對文件進行編輯修改,但我覺得有客戶端直接在windows系統(tǒng)里修改文件比較方便和高效)。 tomcat版本是6.0.29,jdk版本是1.7.45。虛擬機里ubuntu的網(wǎng)絡(luò)設(shè)置我用的是UAT模式,也就是說和外部window系統(tǒng)的網(wǎng)絡(luò)配置是共享的,除了IP地址不一樣,其他都雷同。
安裝tomcat和jdk什么我就不用說了。還有初始的分辨率是600x800,需要重調(diào)我也不說了。至于安裝vsftpd和openssh,我更加不說了。度娘和谷哥都知道。
這里就列我弄的兩個ubuntu系統(tǒng)。hadoop里把主節(jié)點系統(tǒng)叫為master,從節(jié)點系統(tǒng)叫為slave。master只能有一 個,slave可以有許多個。就如一個老板可以有很多員工為他打工一樣。(當然在很多情況下,還會有個做備份的master,防止master出問題時 候,有個替補直接頂上)
為了行文方便,后面我就直接用master和slave稱呼這兩個。(網(wǎng)上都喜歡用三節(jié)點做例子,一個master兩個slave,我簡化了一下,就一個master和一個slave,反正都是以此類推的東西,搞簡單點)
我的系統(tǒng)原始信息:
hostname | IP address | |
master | hadoop | 192.168.72.130 |
slave | hadoop1 | 192.168.72.128 |
hostname是自己改的,IP地址是你安裝完你的ubuntu后,電腦在UAT模式下自動生成的IP地址。請根據(jù)你自己情況記錄這些信息。還有hostname如何永久地改成hadoop和hadoop1,請問度娘和谷哥。
每個ubuntu里分別加入專為hadoop使用的帳號
命令:
addgroup hadoop adduser –ingroup hadoop wujunshen
這個wujunshen是我在用VMWare安裝ubuntu時候,讓我自己設(shè)定的帳號名字,大家可以自行設(shè)定。但是hadoop這個用戶組名最好不要改。
有人會問 ubuntu里非root賬戶登錄后,輸入命令開頭不都要打sudo么?這個其實也可以設(shè)置,再次提醒請問度娘和谷哥。這里哥給個當年自己記錄的博文鏈接: http://darkranger.iteye.com/admin/blogs/768608
注意:兩個ubuntu的hadoop帳號名要一樣,不一樣就算你配置好了,測試時候也不成功的。我看了一下hadoop的代碼,它好像是在hadoop代碼里寫死了讀取帳號名的值。(shell不太會,只看了個大概) 有人說要在系統(tǒng)里設(shè)置%HADOOP_HOME%為你安裝hadoop的路徑,就可以帳號名不一樣了。 我沒試驗過,因為我覺得測試這個有點無聊了,或許《生活大爆炸》里Sheldon會這么做。:)
建立兩個系統(tǒng)ssh通信互相信任關(guān)系
要在兩個系統(tǒng)上每一個進行以下操作。(如果slave有很多個,這樣做是很浪費時間的,一般都要用個shell自動化腳本來建立信任關(guān)系。這里只是示例,麻煩各位手打或copy了。)
進入wujunshen帳號,輸入命令
ssh-keygen -t rsa -P "" cat .ssh/id_rsa.pub >>.ssh/authorized_keys (出現(xiàn)兩個問題,第一個問題回車就行,第二個輸入y回車,千萬不要直接回車,否則不會生成key)
注意:如果出現(xiàn)錯誤:-bash: .ssh/authorized_keys: No such file or directory 這是由于新建好的用戶帳號,比如我這里是wujunshen這個帳號,默認沒有.ssh目錄,需要自己建立。
mkdir -p ~/.ssh
接下來還有一步,我用cuteFTP做的,覺得自己牛逼的可以用linux的拷貝粘貼命令搞。
在每個ubuntu下找到剛才生成的authorized_keys文件,我這里路徑是: /home/wujunshen/.ssh/authorized_keys
修改該文件,讓此文件包含生成的rsa字符串(有關(guān)RSA加密算法的由來,你還是可以去問度娘和谷哥,那是個傳奇的故事)和兩個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
保證每個ubuntu系統(tǒng)的authorized_keys文件都包含wujunshen@hadoop1和wujunshen@hadoop以及它們的rsa字符串.
然后在其中一個ubuntu上進行測試,比如我這里在master里輸入
ssh hadoop1
去訪問slave,這樣就不需要輸入密碼就能訪問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)錯誤: Host key verification failed
解決方法:到 /home/wujunshen/.ssh目錄下找到known_hosts文件,刪除known_hosts文件。命令
rm known_hosts
#p#
安裝
去官網(wǎng)下載hadoop-2.2.0.tar.gz
然后在兩個ubuntu里進行以下操作。
解壓壓縮包在/home/wujunshen目錄下
命令:
tar zxf hadoop-2.2.0.tar.gz
解開之后是個hadoop-2.2.0文件夾,改名為hadoop
命令:
mv hadoop-2.2.0 hadoop
安裝結(jié)束。(安裝很簡單,但你要想用起來,接下來是重頭戲)
配置
以下操作,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下缺省是沒有tmp文件夾的,要用命令: mkdir /home/wujunshen/hadoop/tmp創(chuàng)建
- hdfs://192.168.72.130:8010 里的IP地址就是master 的IP地址
同一路徑下修改 mapred-site.xml
因為缺省是沒有這個文件的,要用模板文件造一個,命令為:
- 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文件備份個數(shù), 如果你只有3個slave,但是你卻指定值為4,那么這是不會生效的,因為每個salve上只能存放一個備份文件。 如果你設(shè)置了100個slave,那么這個就寫100。 我這里slave就1個,就寫了1。 網(wǎng)上那些因為都是三節(jié)點,一個master,兩個slave,所以都寫2,但網(wǎng)上很少有人會說要根據(jù)實際slave的個數(shù)修改。
同一路徑下修改slaves文件 增加所有slaves的hostname。比如我這里slave就一個,hostname是hadoop1,所以只有一個hadoop1,該文件內(nèi)容只為
- hadoop1
運行
所有操作只需要在master運行即可。系統(tǒng)會自動登錄到slave上。
初次運行Hadoop的時候需要初始化Hadoop文件系統(tǒng) ,在master上輸入命令
- cd /home/wujunshen/hadoop/bin
- ./hdfs namenode -format
執(zhí)行成功,你會在日志中(倒數(shù)幾行)找到如下成功的提示信息:
- common.Storage: Storage directory /home/wujunshen/hadoop/tmp/hadoop-wujunshen/dfs/name has been successfully formatted.
再去啟動hadoop,命令:
- cd home/wujunshen/hadoop/sbin/
- ./start-dfs.sh
- ./start-yarn.sh
#p#
注意:你也可以直接運行./start-all.sh,不用分開啟動dfs和yarn.第一次運行start-all會出現(xiàn)一個問題,輸入yes就行了。
查看運行結(jié)果 執(zhí)行你的jdk運行目錄下的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
截圖:
注意:有時候會發(fā)現(xiàn)hadoop1上的datanode沒有出現(xiàn),這個時候以我的體會,最好是把/home/wujunshen/hadoop下的tmp文件夾刪除,然后重新建,重新初始化hadoop文件系統(tǒng),重啟hadoop,然后執(zhí)行兩種查看方式再看看
測試
兩種測試方法,實際是運行了兩個示例程序,一個是wordcount,另外一個是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é)
如果你能看到這里,而且按照我之前說的已經(jīng)運行成功了。那么恭喜你,你實現(xiàn)了hadoop多節(jié)點偽分布式的配置。對的,你沒看錯?。?!就是偽分布式~ 可能有人不服氣會說:怎么到這里就是偽分布式了呢?不是都OK的么?那么我請你仔細看看你測試中選擇的兩種示例程序啟動的job,如圖是運行第二個randomwriter 程序的job:
看到紅框了伐?全是Local!??!也就是說不管你執(zhí)行哪個示例程序,啟動的job都只是在master這個節(jié)點本地運行的job。哪里有讓slave節(jié)點參與了?
再說,看看wordcount這個單詞就知道是個計算單詞的示例程序,如果只有master一個節(jié)點計算,那么這能算分布式多節(jié)點參與計算么? 所以各位朋友,請接著耐心地看下去,看我如何施展魔法讓hadoop真正的進行分布式計算?。。?/p>
#p#
真.配置
之前配置里所說的那些文件修改還是要的。這里我們再對其中一些文件進行修改。
在/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打頭的,我一開始修改這些文件都是填寫master的IP地址,我后來試驗了一下,其實用master的hostname,也就是hadoop也可以的。
好了重復(fù)測試里那兩個示例程序,這里我運行了randomwriter程序,因為之前已經(jīng)創(chuàng)建過input文件夾,現(xiàn)在執(zhí)行命令會報錯說input已存在,很簡單,后面加個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就好了。反正是例子,隨意一點,不用像工作中要取個很正式的名字。
結(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#
可以看到這個時候Job名字打頭已經(jīng)不是local了,而是job了。而且可以登錄http://192.168.72.130:8088查看運行的job狀態(tài)
如圖:
上圖還是這個job處于running狀態(tài)時的信息。
完成時信息如下圖:
現(xiàn)在我們再執(zhí)行那個wordcount程序,這里和randomwriter類似。
命令是
- cd /home/wujunshen/hadoop
- bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /tmp/ /tmp-output100(為啥是tmp-output100,之前在說randomwriter示例程序時候已經(jīng)說過)
結(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打頭的一個名字。
注意:這里有可能會碰到錯誤:
- java.io.FileNotFoundException: Path is not a file: /tmp/hadoop-yarn
解決方法很簡單,命令是:
- 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)運行過以上命令就沒必要再輸入這些命令了。我順便講一下這幾個命令,其實hadoop是在ubuntu的文件系統(tǒng)中劃出了一塊作為它自己的 文件系統(tǒng),所謂的hdfs全稱就是hadoop file system,但是這個文件系統(tǒng)中的文件和文件夾是無法用ubuntu的命令找到的,也無法在win7,win8中用FTP客戶端cuteFTP找到。因 為這是虛擬的文件系統(tǒng),現(xiàn)實中不存在。所以如果要在這個虛擬化的文件系統(tǒng)中進行文件和文件夾創(chuàng)建,還有拷貝和查看等操作,必須開頭是以bin/hdfs dfs打頭的,這樣就能在這個虛擬的文件系統(tǒng)中進行普通系統(tǒng)的操作,當然后面要有個減號,可以看到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)該錯誤的原因是在運行上條命令時候,在虛擬文件系統(tǒng)hdfs的tmp文件夾下自動創(chuàng)建了一個/tmp/hadoop-yarn,而我們是對 pg20417.txt 這個文本中的word個數(shù)進行計算,要找的是file而不是path,所以我們改成/tmp/pg20417.txt, 讓wordcount 程序知道自己要找的是個file而不是path,而且還知道自己要找的是哪個file。
登錄http://192.168.72.130:8088查看運行的job狀態(tài)
可以看到我試驗的各種成功和失敗的job信息
真.總結(jié)
其實hadoop中有個很重要的東西就是yarn。在真.配置里修改的那些有關(guān)yarn的配置文件是讓hadoop變成真正的分布式系統(tǒng)的關(guān)鍵。 在這里我簡單地對yarn介紹一下:
yarn原意為“紗線”,想想我們剛才對它進行了配置讓我們實現(xiàn)了真正的分布式配置,我頓時覺得用紗線這個名字還挺形象的,呵呵。 它是hadoop的一個資源管理器。它的資源管理和執(zhí)行框架都是按master/slave范例實現(xiàn)——節(jié)點管理器(NM)運行、監(jiān)控每個節(jié)點,并向資源管理器報告資源的可用性狀態(tài)。 特定應(yīng)用的執(zhí)行由Master控制,負責將一個應(yīng)用分割成多個Job,并和資源管理器協(xié)調(diào)執(zhí)行所需的資源。資源一旦分配好,Master就和節(jié)點管理器一起安排、執(zhí)行、監(jiān)控獨立的Job。 yarn提供了一種新的資源管理模型和執(zhí)行方式,用來執(zhí)行MapReduce任務(wù)。因此,在最簡單的情況下,現(xiàn)有的MapReduce應(yīng)用仍然能照原樣運行(需要重新編譯),yarn只不過能讓開發(fā)人員更精確地指定執(zhí)行參數(shù)。
好了,我終于寫完了。大家隨便看看吧~
題外話
我蠻喜歡hadoop這個黃色小象的logo,貼出來給大家養(yǎng)養(yǎng)眼
另外不知道大家在登錄時有沒有注意到右上角的登錄帳號,見下圖紅框:
這個dr. who可是大大有名啊~它是目前人類歷史上最長的電視連續(xù)劇,英國科幻劇《神秘博士》的劇名。前不久google上還紀念過這部電視劇開播50周年。新版 的dr. who從2005年開始也開播了快10年了。至于它的外傳劇集《火炬木小組》在國內(nèi)年輕人之中更加有名。(火炬木小組絕對是個坑,從2006年開始播,到 現(xiàn)在也只有四季,平均每兩年出一季,第一,第二季還一季20多集,從第三季開始居然只有五六集。而且到現(xiàn)在也沒說會不會拍第五季,不過看第四季最后一集應(yīng) 該有續(xù)集。這片子主角杰克上校扮演者在美劇《綠箭俠》里演一號反派。第四季里那個會說上海話的黑人在夏天《星際迷航》最新電影版里也出來過,就是被可汗脅 迫炸樓的那位。)
原文鏈接:http://www.ituring.com.cn/article/63927