學習Hadoop——Mapreduce 細說
Mapreduce 程式設計思想
Mapper
Map-reduce的思想就是“分而治之”
Mapper負責“分”,即把複雜的任務分解為若干個“簡單的任務”執行
“簡單的任務”有幾個含義:
1 .資料或計算規模相對於原任務要大大縮小;
2 就近計算 ,即會被分配到存放了所需資料的節點進行計算;
3 這些小任務可以平行計算,彼此間 幾乎沒有依賴關係
Reducer
對map階段的結果進行彙總
Reducer的數目由mapred-site.xml配置檔案裡的專案mapred.reduce.tasks決定。
預設值為1,使用者可以覆蓋之
Shuffler:在reduce之前的預處理,減少計算量,有利於叢集的計算
在mapper和reducer中間的一個步驟(可以沒有)
可以把mapper的輸出按照某種key值重新切分和組合成n份,把key值符合某種範圍的 輸出送到特定的reducer那裡去處理
可以簡化reducer過程
舉個栗子吧
M-R的現例項子
例子:mapper
例子:reducer
例子:執行mapper和reducer
流程原理圖
Map-Reduce工作機制剖析
排程機制
預設為先入先出作業佇列排程
支援公平排程器
支援容量排程器
任務執行優化
推測式執行:即如果jobtracker發現有拖後腿的任務,會再啟動一個相同的備份任務, 然後哪個先執行完就會kill去另外一個。因此在監控網頁上經常能看到正常執行完的作 業有被kill掉的任務
推測式執行預設開啟,但如果是程式碼問題,並不能解決問題,而且會使叢集更慢,通 過在mapred-site.xml配置檔案中設定mapred.map.tasks.speculative.execution和 mapred.reduce.tasks.speculative.execution可為map任務或reduce任務開啟或關閉 推測式執行
重用JVM,可以省去啟動新的JVM消耗的時間,在mapred-site.xml配置檔案中設定 mapred.job.reuse.jvm.num.tasks設定單個JVM上執行的最大任務數(1,>1或-1表 示沒有限制)
忽略模式,任務在讀取資料失敗2次後,會把資料位置告訴jobtracker,後者重新啟動 該任務並且在遇到所記錄的壞資料時直接跳過(預設關閉,用SkipBadRecord方法打 開)
錯誤處理機制:硬體故障
硬體故障是指jobtracker故障或tasktracker故障
jobtracker是單點,若發生故障目前hadoop還無法處理,唯有選擇最牢靠的硬體作為 jobtracker
Jobtracker通過心跳(週期1分鐘)訊號瞭解tasktracker是否發生故障或負載過於嚴重
Jobtracker將從任務節點列表中移除發生故障的tasktracker
如果故障節點在執行map任務並且尚未完成,jobtracker會要求其它節點重新執行此 map任務
如果故障節點在執行reduce任務並且尚未完成,jobtracker會要求其它節點繼續執行尚未完成的reduce任務
錯誤處理機制:任務失敗
由於程式碼缺陷或程序崩潰引起任務失敗
Jvm自動退出,向tasktracker父程序傳送方錯誤資訊,錯誤資訊也會寫入到日誌
Tasktracker監聽程式會發現程序退出,或程序很久沒 有更新資訊送回,將任務標記為 失敗
標記失敗任務後,任務計數器減去1以便接受新任務,並通過心跳訊號告訴jobtracker 任務失敗的資訊
Jobtrack獲悉任務失敗後,將把該任務重新放入排程佇列,重新分配出去再執行
如果一個任務失敗超過4次(可以設定),將不會再被執行,同時作業也宣佈失敗
Hadoop命令大全
Hadoop API大全
審計日誌
監控日誌