原文鏈接:
https://www.toutiao.com/i6764296608705151496/
單詞統計的是統計一個文件中單詞出現的次數,比如下面的數據源

其中,最終出現的次數結果應該是下面的顯示

那么在MapReduce中該如何編寫代碼並出現最終結果?
首先我們把文件上傳到HDFS中(hdfs dfs –put …)
數據名稱:data.txt,大小是size是2G
紅黃綠三個塊表示的是數據存放的塊

然后數據data.txt進入map階段,會以<K,V>(KV對)的形式進入,K表示的是:每行首字母相對於文件頭的字節偏移量,V表示的是每一行的文本。

那么我可以用圖表示:藍色的橢圓球表示一個map,紅黃綠數據塊在進入map階段的時候,數據的形式為左邊紅色的<K,V>(KV對)的形式

經過map處理,比如String.split(""),做一次處理,數據會在不同的紅黃綠數據塊中變為下面的KV形式


我們在配置Hadoop的時候或設置reduce的數量,假如有兩個reduce
Map執行完的數據會放到對應的reduce中,如下圖

這個地方有一個簡單的原理就是
Job.setNumReduce(2)會設置reduce的數量
而HashPartioner類可以利用 key.hashcode % reduce的結果,將不同的map結果輸入到不同的reduce中,比如a-e開頭的放到一個地方,e-z開頭的放到一個地方,那么


這樣的數據結果就會變成



好那么我們此時可以統計了,我開始編寫代碼
首先我們創建一個wordCount項目,我們創建的項目是maven項目

其中pom的配置部分



我們創建類

繼承Mapper(注意注釋)

編寫代碼

同樣創建WordCountReducer,編寫代碼,利用前面的reduce思想理解

創建WordCountDriver類編寫代碼

導出項目jar




我們啟動Hadoop

我們上傳數據和jar包

將數據上傳到hdfs上

執行下面語句
bin/yarn jar /data/wordCount/wordCount.jar com.xlglvc.xx.mapredece.wordcount_client.WordCountDriver /data.txt /outputwordcount

出了點問題,時間不同步

安裝ntpdate工具
yum -y install ntp ntpdate
設置系統時間與網絡時間同步
ntpdate cn.pool.ntp.org

然后重新執行,此時我們新選擇個目錄
bin/yarn jar /data/wordCount/wordCount.jar com.xlglvc.xx.mapredece.wordcount_client.WordCountDriver /data.txt /outputwordcount1

我們去瀏覽器查詢

我們查看最終結果
bin/hdfs dfs -text /outputwordcount1/part-r-00000

出現我們想要的結果,統計完成