利用MapReduce框架,編程實現數據去重與排序。

利用MapReduce框架,編程實現數據去重與排序。

  1. 熟練掌握map-reduce工作流程;

核心思想:分而治之,把大的數據集分成許多小數據塊,在多臺機器上並行處理。

  1. 透徹理解map-reduce工作流程中每個“節點”的功能。

Input: 輸入文件的存儲位置

Split: 大數據集拆分成小數據集。

Mapper:<1> 把輸入目錄下的文件進行邏輯切片,每個切片由一個MapTask處理。

<2> 將切片解析成<key,value>對。

<3> 調用map方法。上階段每解析出來一個<k,v>,調用一次map方法。

<4> 按照規則對第三階段輸出的鍵值對進行分區。分區的數量就是Reducer任務運行的數量。(默認一個Reducer任務)

<5> 對每個分區的鍵值對進行排序。

<6> 對數據進行局部聚合處理。

Shuffle: 分區、排序、合併交給Reduce.

Reducer:<1> Reducer任務主動複製Mapper任務輸出的鍵值對。

<2> 把複製到Reducer的本地數據全部進行合併,再排序。

<3> 調用reduce方法。(將輸出的鍵值對寫入到HDFS文件中)

Result: 上述產生一系列<k,v>對,最終寫入HDFS。

安裝maven:

問題1:Please set the JAVA_HOME variable in your environment to match the location。

原因:DK配置文件中JAVA_HOME路徑設置和實際JDK路徑不符合,造成該原因可能是重複安裝了不同版本的JDK。

解決:將JAVA_HOME、CLASSPATH、Path修改了一下,配置成功!

問題2:eclipse無法啓動,查看日誌發現java.lang.NoClassDefFoundError: javax/annotation/PreDestroy

原因:修改了jdk的版本,所以無法啓動,網上的解決辦法是修改eclipse.ini文件,添加--add-modules=ALL-SYSTEM還是無法啓動,重新裝eclipse

問題3The compiler compliance specified is 1.5 but a JRE 10 is used

解決:右鍵項目>Properties>Java Compiler>將Compiler compliance level改爲10

問題4jdk的tools.jar導入問題,我的jdk的版本是12.0.1,修改pom.xml的時候一直有錯誤,<version>1.7</version> 怎麼改都不行,最後把<systemPath>改成絕對路徑<systemPath>D:\Java\jdk1.7.0_75\lib\tools.jar</systemPath>纔可以。

在dos命令下進入項目,執行mvn clean package

得到jar包:

(讓其他Maven項目運用這個jar,執行命令:mvn clean install)

將做好的jar傳輸到master中,執行。

問題5Exception in thread “main" java.lang.UnsupportedClassVersionError,如下:

原因:我的虛擬機Java版本是1.8的,而生成jar包用的java版本是12.0.2的。

重新嘗試一下,把jdk換成了1.7.0_75,生成jar包,還是錯誤,最後發現是jre版本是10.0.2,將jre版本改成1.7.0_75

問題6master與slave1和slave2時間不同步,導致出錯。

修改時間後,再次嘗試多遍:

 

最後:運行成功!(可喜可賀~)

錯誤的原因真的是有很多,大部分錯誤在網上都可以查到,查不到的根據翻譯也能大概清楚哪裏錯了,再一步步調試和改正,在這次實驗中,我認爲較難的應該是pom.xml的配置和Maven項目打成jar包。一開始真的是一頭霧水,不斷的添加配置文件,不斷的運行調試,多次測試MapReduce數據集。好在不斷的嘗試終於運行出來了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章