1. 程式人生 > >解讀MapReduce程式例項

解讀MapReduce程式例項

Mapreduce 是一個分散式運算程式的程式設計框架,核心功能是將使用者編寫的業務邏輯程式碼和自帶預設元件整合成一個完整的 分散式運算程式,併發執行在一個 hadoop 叢集上。MapReduce採用“分而治之”策略,一個儲存在分散式檔案系統中的大規模資料集,會被切分成許多獨立的分片(split),這些分片可以被多個Map任務並行處理。

    Hadoop 的四大元件:

(1)HDFS:分散式儲存系統;

(2)MapReduce:分散式計算系統;

(3)YARN: hadoop 的資源排程系統;

(4)Common: 以上三大元件的底層支撐元件,主要提供基礎工具包和 RPC 框架等;

    在 MapReduce 元件裡, 官方給我們提供了一些樣例程式,其中非常有名的就是 wordcount 和 pi 程式,這些程式程式碼都在 hadoop-example.jar 包裡,jar包的安裝目錄在Hadoop下,為:

 下面我們來逐一解讀這兩個樣例程式。

    測試前,先關閉防火牆,啟動Zookeeper、Hadoop叢集,依次順序為 :

 成功啟動後,檢視程序是否完整。這些可參考之前部落格中關於叢集的搭建。

    一、pi樣例程式

    (1)執行命令,帶上引數

執行程式,引數含義:

第1個引數5指的是要執行5次map任務 ;

第2個引數5指的是每個map任務,要投擲多少次 ;

    2個引數的乘積就是總的投擲次數(pi程式碼就是以投擲來計算值)。

    通過上面我們獲得了Pi的值:3.680000,當然也可以改變引數來驗證得出的結果和引數的關係,比如我的引數換成10和10,則得出的結果為:3.20000。由此可見:引數越大,結果越是精確。

    (2)檢視執行程序

    在執行過程中,它的時間不定,所以我們可以通過訪問介面,檢視具體的執行程序,訪問:

介面顯示如下:

 從上面我們可以看出:當Progress程序結束,即代表運算過程結束,也可以點選檢視具體的內容,這裡不做演示了。

    二、wordcount樣例程式

    (1)準備資料,上傳HDFS

    簡單的說就是單詞統計,這裡我們新建一個txt檔案,輸入一些單詞,方便統計:

輸入以下單詞,並儲存:

上傳到HDFS,先在hdfs上建立資料夾,在將txt檔案放到該資料夾下,下面是一種建立方式,或者是hadoop fs -mkdir 的方式,二者擇其一,注意路徑:

我們可以通過訪問 slave01:50070,檢視HDFS檔案系統:

 成功上傳。

    (2)執行程式

    執行下面的命令,注意路徑:

命令引數的含義:

    第一個指的是jar包路徑,第二個指的是要執行的樣例程式名稱wordcount,第三個指的是檔案所在的HDFS路徑,第四個指的是要輸出的檔案目錄(不要是已經存在的)。

    上面是輸出結果,同樣的我們可以通過訪問 slave01:8088 檢視程序。

    執行結束後,在HDFS檔案系統上,可以看到輸出的目錄已經建立好了,且裡面存在了輸出的檔案:

通過命令,可以檢視執行後的結果檔案:

從上面可以看出:單詞已經統計完成,我們可以對照檔案進行驗證。

    好了,上面是對兩個已有樣例的解讀,至於程式碼方面有空再一起討論吧。