Hadoop_MapReduce的基本应用
| 實驗 目的 要求 | 目的:
|
| ? 實 驗 環 境 ? |
|
?
練習內容
任務一:MapReduce詞頻統計編程實例;
1、創建MapReduce項目;
2、修改pom.xml依賴文件
3、導入Hadoop配置文件
4、關鍵代碼說明
4.1、map函數的方法
4.2、reduce函數的方法
4.3、main函數的調用(創建job類)
4.4、main函數的調用(設置job的輸入輸出路徑并提交集群)
4.5、main函數的調用(定義輸入輸出路徑)
5、編寫并上傳hello.txt文件至Hadoop hdfs系統
6、將項目打包成jar包并上傳至Hadoop中;
7、運行jar包,并顯示運行結果;
8、Web端Hadoop平臺任務展示
?
任務二:MapReduce排序的代碼實現
1、關鍵代碼說明
1.1、map函數的方法;
?
1.2、reduce函數的方法;
?
1.3、main函數的調用(創建job類)
?
?
1.4、main函數的調用(設置job類的輸入輸出路徑)
?
?
1.5、main函數的調用(定義輸入輸出路徑)
?
2、將項目打包成jar包,并上傳至Hadoop集群中;
3、上傳測試文件;
4、執行程序并展示結果;
5、Web端驗證;
任務三:MapReduce二次排序的實現原理
1、關鍵代碼的實現;
1.1、map函數的方法;
?
1.2、Reduce函數的方法;
?
1.3、main函數的調用(創建job類)
?
1.4、main函數的調用(設置job類輸入輸出路徑)
?
1.5、main函數的調用(定義輸入輸出路徑)
?
1.6、main函數的調用(調用分組函數)
?
1.7、排序函數的實現;
2、將項目打包成jar包,并上傳至Hadoop集群中;
3、上傳測試文件;
4、執行程序并展示結果;
?
出現的問題與解決方案
排錯一:
錯誤:關于MapReduce,Map能完全執行,Reduce執行到一半卡住不執行
排錯思路:
卡住了幾個小時,死活停滯不前,發現后根據提示開始排錯,進入50030,進入作業發現
這說明作業在map之完后的shuffle階段中,reduce無法從map處拷貝數據,是因為客戶端與數據節點通訊失敗造成的。客戶端程序應該能夠和所有的節點通訊才能保證數據的傳輸正常,然后開始各種檢查:所有節點hosts中寫的完全相通,不是節點名稱不同或者節點沒有完全加上造成的,排除;找到slaves發現寫的也完全相同,不是節點缺失有誤,最后查看了防火墻的狀態,發現其中一個節點的防火墻沒有關閉,找到原因,service iptables stop,然后重新提交作業,成功運行
?
排錯二:
錯誤:Map或Reduce任務中的某些代碼拋出異常,此時Hadoop強行停止java虛擬機,并向JobTracker匯報,JobTracker將任務標記為失敗顯示給用戶,同時寫入日志目錄
排錯思路:
設置重試次數以及等待一定次數后對異常記錄跳過檢測:
conf.setInt("Mapred.Map.max.attempts",2); //設置嘗試次數,超過則失敗
conf.setInt("Mapred.skip.attempts.to.start.skipping",1); ? //開始“跳過”模式,讀取失敗超過則開啟“skip mode”
conf.setInt("Mapred.skip.Map.max.skip.reords",1); ? ? //設置最大跳過記錄數;
解決:不是所有的異常都會導致任務失敗,也有可能因為網絡或者硬件或其他原因導致運行過慢,此時Haodop會自動在另外一個節點上啟動同一個任務作為任務執行的一個備份。
?
排錯三:
錯誤:JAVA虛擬機重用。
原因:Hadoop為每個任務啟動一個新的虛擬機,若java虛擬機開啟過多(任務被劃分得過于細粒度),資源損耗會過大。
解決:“Java虛擬機重用模式”,類似線程池與連接池的原理。將細粒度的任務變成串行執行。多個java虛擬機被同時啟動,執行完一個任務后,并不直接關閉,而是被加載新的任務重新執行。同時執行的java虛擬機數目可設定,默認1,(不適合重用);默認-1,所有任務都用同一個java虛擬機。
總結
以上是生活随笔為你收集整理的Hadoop_MapReduce的基本应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDFS_API基本应用
- 下一篇: HBASE_API的应用