使用前面的腳本與直接使用 wc –l 來計算大文件的行數進行比較,具體結果以下:node
文件大小 | 文件行數 | Wc –l 時間(秒) | Mapperreduce 時間(秒) |
5.8g | 2497440 | 4 | 171 |
103g | 960000000 | 280 | 2172 |
能夠看出,直接使用wc –l 進行統計的效率要比使用hadoop mapperreduce來統計高比較多,但由於使用hadoop mapperreduce統計時要把文件上傳到hdfs上,而上傳這個過程實際上會花費很長的時間,因而修改了代碼去除了上傳文件的過程(這兩個文件在前面測試時已經上傳到hdsf上了),具體腳本以下:shell
#!/bin/bash file_name=$1 #刪除結果目錄 hadoop fs -rm -r /bigdata/output/test/ #統計行數 hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-1.0.1.jar -files count.sh -input /bigdata/input/test/$file_name -output /bigdata/output/test/ -mapper 'wc -l' -reducer "sh count.sh"
又從新對這兩個文件進行了測試,具體結果以下:bash
文件大小 | 文件行數 | Wc –l 時間(秒) | Mapperreduce 時間(秒) |
5.8g | 2497440 | 4 | 171 |
103g | 960000000 | 280 | 2172 |
能夠看到隨着文件的增大,使用hadoop mapperreduce方式進行統計的效率比直接使用wc –l的方式要高,但前提是這些文件已經上傳到hdfs上了。app
附測試環境的hadoop配置:oop
兩臺namenode,三臺datanode測試
配置都爲2個物理cpu,24核,內存爲64gspa