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