(二)Hadoop例子——運行example中的wordCount例子


Hadoop例子——運行example中的wordCount例子

一、   需求說明

單詞計數是最簡單也是最能體現MapReduce思想的程序之一,可以稱為 MapReduce版"Hello World",該程序的完整代碼可以在Hadoop安裝包的"src/examples"目錄下找到。單詞計數主要完成功能是:統計一系列文本文件中每個 單詞出現的次數,如下圖所示。

 

二、   環境

  1. VMware® Workstation 10.04
  2. Ubuntu14.04 32位
  3. Java JDK 1.6.0
  4. hadoop1.2.1

三、       WordCount例子的運行

1. 創建本地的示例數據文件:

依次進入【Home】-【hadoop】-【hadoop-1.2.1】創建一個文件夾file用來存儲本地原始數據。

 

並在這個目錄下創建2個文件分別命名為【myTest1.txt】和【myTest2.txt】或者你想要的任何文件名。

分別在這2個文件中輸入下列示例語句:

 

2. 在HDFS上創建輸入文件夾

呼出終端,輸入下面指令:

bin/hadoop fs -mkdir hdfsInput

執行這個命令時可能會提示類似安全的問題,如果提示了,請使用

bin/hadoop dfsadmin -safemode leave

來退出安全模式。

當分布式文件系統處於安全模式的情況下,文件系統中的內容不允許修改也不允許刪除,直到安全模式結 束。安全模式主要是為了系統啟動的時候檢查各個DataNode上數據塊的有效性,同時根據策略必要的復制或者刪除部分數據塊。運行期通過命令也可以進入 安全模式。

意思是在HDFS遠程創建一個輸入目錄,我們以后的文件需要上載到這個目錄里面才能執行。

3. 上傳本地file中文件到集群的hdfsInput目錄下

在終端依次輸入下面指令:

cd hadoop-1.2.1

bin/hadoop fs -put file/myTest*.txt hdfsInput

 

4. 運行例子:

在終端輸入下面指令:

bin/hadoop jar hadoop-examples-1.2.1.jar wordcount hdfsInput hdfsOutput

注意,這里的示例程序是1.2.1版本的,可能每個機器有所不一致,那么請用*通配符代替版本號

bin/hadoop jar hadoop-examples-*.jar wordcount hdfsInput hdfsOutput

應該出現下面結果:

 

Hadoop命令會啟動一個JVM來運行這個MapReduce程序,並自動獲得Hadoop的配置,同時把類的路徑(及其依賴關系)加入到 Hadoop的庫中。以上就是Hadoop Job的運行記錄,從這里可以看到,這個Job被賦予了一個ID號:job_201202292213_0002,而且得知輸入文件有兩個(Total input paths to process : 2),同時還可以了解map的輸入輸出記錄(record數及字節數),以及reduce輸入輸出記錄。

查看HDFS上hdfsOutput目錄內容:

在終端輸入下面指令:

bin/hadoop fs -ls hdfsOutput

 

從上圖中知道生成了三個文件,我們的結果在"part-r-00000"中。

使用下面指令查看結果輸出文件內容

bin/hadoop fs -cat output/part-r-00000

 

wordcount的例子中是以空格作為單詞的分隔符。

輸出目錄日志以及輸入目錄中的文件是永久存在的,如果不刪除的話,如果出現結果不一致,請參考這個因素。

四、       WordCount處理過程

WordCount的詳細執行步驟如下:

1)將文件拆分成splits,由於測試用的文件較小,所以每個文件為一個split,並將文件按行分割形 成<key,value>對,如圖4-1所示。這一步由MapReduce框架自動完成,其中偏移量(即key值)包括了回車所占的字符數 (Windows和Linux環境會不同)。

 

圖4-1 分割過程

2)將分割好的<key,value>對交給用戶定義的map方法進行處理,生成新的<key,value>對,如圖4-2所示。

 

圖4-2 執行map方法

3)得到map方法輸出的<key,value>對后,Mapper會將它們按照key值進行排序,並執行Combine過程,將key至相同value值累加,得到Mapper的最終輸出結果。如圖4-3所示。

 

圖4-3 Map端排序及Combine過程

4)Reducer先對從Mapper接收的數據進行排序,再交由用戶自定義的reduce方法進行處理,得到新的<key,value>對,並作為WordCount的輸出結果,如圖4-4所示。

 

圖4-4 Reduce端排序及輸出結果

 

文章內容圖片來自:

http://www.cnblogs.com/nod0620/archive/2012/06/20/2549395.html

http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html

http://www.cnblogs.com/madyina/p/3708153.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM