Hadoop下面WordCount執行詳解

石曼迪發表於2014-05-04

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

image

現在我們以"hadoop"使用者登入"Master.Hadoop"伺服器。

1. 建立本地的示例資料檔案:

依次進入【Home】-【hadoop】-【hadoop-1.2.1】建立一個資料夾file用來儲存本地原始資料。

image

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

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

image

image

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

image

 

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

應該出現下面結果:

image

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

image

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

使用下面指令檢視結果輸出檔案內容

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

image

(注意:請忽視截圖指令中的3)

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

相關文章