《Hadoop MapReduce性能优化》一1.3 Hadoop MapReduce的工作原理
本節書摘來異步社區《Hadoop MapReduce性能優化》一書中的第1章,第1.3節,作者: 【法】Khaled Tannir 譯者: 范歡動 責編: 楊海玲,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。
1.3 Hadoop MapReduce的工作原理
Hadoop MapReduce性能優化
經過一個或者多個步驟,MapReduce編程模型可以用來處理許多大規模數據問題,還可以更高效地實現MapReduce編程模型來支持使用大量機器處理大量數據的問題。在大數據的背景下,可以處理的數據規模可以大到無法在單機存儲。
在典型的Hadoop MapReduce框架下,數據拆分為數據塊并分發到集群內的多個節點上。MapReduce框架通過把計算邏輯轉移到數據所在的機器,而不是把數據轉移到其能夠得以處理的機器上,從而充分利用數據的本地性優勢。MapReduce應用的大多數輸入數據塊存放在本地節點,因而能夠迅速加載,而且可以并行讀取在多個節點上的多個數據塊。因此,MapReduce能夠達到很高的綜合I/O帶寬和數據處理速率。
要啟動一項MapReduce作業,Hadoop會創建一個MapReduce應用的實例并把作業提交給JobTracker。然后,作業被拆分為map任務(也叫作mapper)和reduce任務(也叫作reducer)。
Hadoop啟動MapReduce作業時,輸入數據集拆分為大小相等的數據塊,并采用心跳協議(heartbeat protocol)分配任務。每個數據塊被調度到一個TaskTracker節點上并由一個map任務處理。
每項任務都在一個工作節點的可用插槽上執行,每個節點會配置固定數量的map插槽和固定數量的reduce插槽。如果所有可用插槽都被占用,掛起的任務就需要等待一些插槽被釋放。
TaskTracker周期性地向JobTracker發送其狀態。當TaskTracker節點空閑時,JobTracker節點會給它分配新任務。JobTracker節點在散發數據塊時會考慮數據本地性,總是試圖把本地數據塊分配給TaskTracker節點。如果嘗試失敗,JobTracker節點會分配一個本地機架或者隨機數據塊給TaskTracker節點。
當所有的map函數都執行結束時,運行時系統會將中間鍵值對分組,并發起一組reduce任務來生成最終結果。接下來執行過程從shuffle階段轉向reduce階段。在這個最終的reduce階段,reduce函數被調用來處理中間數據并寫最終輸出。
用戶經常使用不同的術語來表述Hadoop的map和reduce任務、子任務、階段、子階段。map任務包含了兩個子任務(map和merge),而reduce任務僅包含一個任務。然而,shuffle和sort首先發生,并由系統完成。每個子任務又拆分為多個子階段,如read-map、spill、merge、copy-map和reduce-write。
總結
以上是生活随笔為你收集整理的《Hadoop MapReduce性能优化》一1.3 Hadoop MapReduce的工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《CCNA无线640-722认证考试指南
- 下一篇: 《Windows 8 权威指南》——1.