一、下載數據
這些數據即將作爲mapreduce作業的輸入
$ wget http://www.gutenberg.org/cache/epub/4300/pg4300.txt
$ wget http://www.gutenberg.org/files/5000/5000-8.txt
$ wget http://www.gutenberg.org/cache/epub/20417/pg20417.txt
並將下載到的三個.txt文件全放在本地的一個gutenberg文件夾下,假設放在/usr/local/hadoop/tmp/gutenberg下
二、啓動hadoop集羣
如果之前已經停止了hadoop,那麼此時需要重新啓動
/usr/local/hadoop/$ start-all.sh
三、將本地數據複製到HDFS
在我們運行mapreduce作業之前,需要先把輸入數據複製到hadoop的文件系統HDFS
1.在hdfs中創建目錄/user/hduser,-p代表創建路徑中的各級父目錄
/usr/local/hadoop$ hdfs dfs -mkdir -p /user/hduser/
2.將本地的gutenberg文件夾下的所有內容複製到HDFS中
/usr/local/hadoop$ bin/hadoop dfs -copyFromLocal ./tmp/gutenberg /user/hduser/
可以看到/user/hduser/下多了一個文件夾gutenberg
/usr/local/hadoop$ bin/hadoop fs -ls /user/hduser
查看hdfs中/user/hduser/gutenberg文件夾中是否有三個txt文件
/usr/local/hadoop$ bin/hadoop fs -ls /user/hduser/gutenberg
說明數據已經成功複製到hdfs中了。
四、運行mapreduce作業
以wordcount爲例,下面爲運行命令
/usr/local/hadoop$ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount /user/hduser/gutenberg /user/hduser/gutenberg-output
注意!!!
share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar——對於不同hadoop版本,路徑以及名稱都可能不一樣哦
/user/hduser/gutenberg ——輸入數據所在文件夾
/user/hduser/gutenberg-output——輸出結果所在文件夾
運行後可以看到這樣的過程:
五、查看輸出數據所在文件夾
/usr/local/hadoop$ bin/hadoop dfs -ls /user/hduser
/usr/local/hadoop$ bin/hadoop dfs -ls /user/hduser/gutenberg-output
六、採用-D選項,修改reducer個數
再次運行時一定要新建一個存放輸出數據的文件夾或者將原來的刪掉!!!我新建的是gutenberg-output1
/usr/local/hadoop$ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount -D mapred.reduce.tasks=16 /user/hduser/gutenberg /user/hduser/gutenberg-output1
#查看輸出結果,位於part-r-00000文件中
/usr/local/hadoop$ bin/hadoop dfs -cat /user/hduser/gutenberg-output1/part-r-00000
七、將HDFS中的數據文件下載到本地
運行完mapreduce作業之後,如果你想把輸出結果下載到本地,則可以使用下面這一命令:
hadoop fs -get <hdfs_src> <localdst>
#以下載gutenberg-output1文件夾中的part-r-00000文件爲例,到本地時可以使用原來的文件名
/usr/local/hadoop$ sudo bin/hadoop fs -get /user/hduser/gutenberg-output1/part-r-00000 /home/
可以看到/home/文件夾下有了一個part-r-00000文件:
#也可以在下載到本地時自定義文件名,比如自定義爲hdfile:
/usr/local/hadoop$ sudo bin/hadoop fs -get /user/hduser/gutenberg-output1/part-r-00000 /home/hdfile
如果需要將gutenberg-output1文件夾中的所有文件合併連接成本地目標文件,且文件名也爲gutenberg-output1,則使用hadoop fs -getmerge命令
/usr/local/hadoop$ sudo bin/hadoop fs -getmerge /user/hduser/gutenberg-output1 /home/gutenberg-output1
可以看到home/下多了一個文件gutenberg-output1