MapReduce優化----宏觀hadoop

Google提出了一個令人興奮的架構。MapReduce把任務分解成小任務,這些小任務可以在普通PC集羣上並行執行。這種架構的一種開源實現是yahoo!的hadoop。目前國內在用此架構的公司爲百度,淘寶,騰訊等,國外Amazon,Facebook,New York Times等已在使用。

  目前,很多internet服務都具有上百萬的用戶。這些服務產生海量的數據,如何針對海量數據進行分析和處理是目前亟待解決的問題。

  Google提出了一個令人興奮的架構。MapReduce把任務分解成小任務,這些小任務可以在普通PC集羣上並行執行。這種架構的一種開源實現是yahoo!的hadoop。目前國內在用此架構的公司爲百度,淘寶,騰訊等,國外Amazon,Facebook,New York Times等已在使用。

  MapReduce帶來的關鍵性好處是它自動處理錯誤的能力。如果集羣中的一個節點宕機,MapReduce講在另外一臺機器上執行任務。如果一臺在執行任務的機器處理速度很慢,成爲整個任務traggler,將會在另外一臺機器上運行任務副本backup task,這就是推測執行。推測執行可以提高任務44%的速度。

  推測執行不是沒有代價的。

  1. 對比各種資源,如網絡

  2. 選擇哪個節點來執行任務副本

  3. Straggler與平均速度的對比是苦難的

  Hadoop採用master/slaves的結構。出入文件存在於分佈式文件系統中。Hadoop把每個job分爲多個tasks,每個輸入首先被用戶定義的map函數map task進行處理,輸出一系列key-value中間結果。當map任務結束後,執行reduce task。Slaves通過‘心跳‘機制來告知master自己是否有空閒,如果有,則會被分配一個task。這裏對“心跳機制”進行簡單的介紹:

  hadoop的集羣是基於master/slave模式,namenode和jobtracker屬於master,而datanode/tasktracker屬於slaves。master只有一個,而slaves有多個。

  namenode與datanode之間的通信,jobtracker與tasktracker直接的通信,都是通過“心跳”完成的。

  心跳的機制大概是這樣的:

  1) master啓動的時候,會開一個ipc server在那裏。

  2) slave啓動時,會連接master,並每隔3秒鐘主動向master發送一個“心跳”,將自己的狀態信息告訴master,然後master也是通過這個心跳的返回值,向slave節點傳達指令。

  Hadoop的調度:

  總體思路---

  a. 選定推測執行任務

  b. 選擇能快速執行的節點

  c. 設置最高時限,防止超負荷

  推測執行的目標是最小化job的響應時間。響應時間對那些短任務特別重要。

  如果有節點有空的task可以執行,則從以下三種類型來選擇一個task來分配

  a. 失敗的任務,給予更高的優先級

  b. 爲被調度安排的任務

  c. 需要推測執行的任務

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