1. 程式人生 > >學習Hadoop——Mapreduce 細說

學習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大全

審計日誌 

監控日誌